首页 > 系统相关 >Windows编程系列:进程间通信(基于Mailslot)

Windows编程系列:进程间通信(基于Mailslot)

时间:2024-04-19 16:25:41浏览次数:25  
标签:name Mailslot Windows 句柄 间通信 mailslot 消息 创建 进程

最近在做一个资源管理器背景工具,将模块注入后,需要跟模块进行通信,意向传递一些信息。

一开始想到的是使用共享内存,但是无法进行实时通知。

匿名管道的话需要传入句柄字符串,也不太适用这里的场景。

使用Mailslots可以间隔的去取消息,刚好可以实现这个需求。不同于消息队列的时,没取到消息时,不会阻塞。

 

Mailslots介绍

mailslot 是驻留在内存中的伪文件,可以使用标准文件函数对其进行访问。 mailslot 消息中的数据可以采用任何形式,但在计算机之间发送时不能大于 424 个字节。 与磁盘文件不同,mailslot 是临时的。 关闭mailslot的所有句柄后,将删除 mailslot 及其包含的所有数据。

mailslot 服务器是创建和拥有 mailslot 的进程。 当进程创建 mailslot 时,我们可以得到一个 mailslot 句柄。 从mailslot 读取消息时,必须使用此句柄。 只有创建mailslot或已通过某些其他机制(如继承 () )获取句柄的进程才能从 mailslot 读取。 所有 mailslot 都是创建它们的进程的本地位置。 进程无法创建远程mailslot。

mailslot 客户端是一个将消息写入 mailslot 的进程。 只要名字跟创建进程里的一致,任何进程都可以把消息写入到这个mailslot。

Mailslot 可以广播域中的消息。 如果域中的多个进程都使用相同的名称创建mailslot,则发送到该mailslot并发送到域的每条消息都将由参与进程接收。 由于一个进程可以控制服务器 mailslot 句柄和在打开 mailslot 进行写入操作时检索的客户端句柄,因此应用程序可以轻松地在域中实现简单的消息传递工具。

若要在计算机之间发送大于 424 字节的消息,请改用 命名管道 或 Windows 套接字 。

这一段介绍来自MSDN,翻译不是非常准确,不过大概能看懂就行了。推荐直接阅读英文原文。

 

Mailslot名称

格式如下:

\\.\mailslot\[path\]name

1 #define DEMO_SLOT_NAME L"\\\\.\\mailslot\\demo_slot"

 

还可以根据不同进程创建不同的mailslots:

如:

\\.\mailslot\mark\process1
\\.\mailslot\mark\process2
\\.\mailslot\mark\process3

 

特定远程计算机上的 mailslot:

\\ComputerName\mailslot\[path\]name

 

指定域中的每个 mailslot :

\\DomainName\mailslot\[path\]name

 

系统主域中具有给定名称的每个 mailslot:

\\*\mailslot\[path\]name

 

 

创建Mailslots

 1 #define DEMO_SLOT_NAME L"\\\\.\\mailslot\\demo_slot"
 2 
 3 HANDLE WINAPI MakeSlot(LPCTSTR lpszSlotName)
 4 {
 5     HANDLE hSlot = CreateMailslot(lpszSlotName,
 6         0,                      //no maximum message size
 7         MAILSLOT_WAIT_FOREVER,  //no time-out for operations
 8         NULL);                  //default security
 9 
10     if (hSlot == INVALID_HANDLE_VALUE)
11     {
12         std::cout << "Create mailslot failed with " 
13             << GetLastError() 
14             << std::endl;
15         return NULL;
16     }
17     else
18     {
19         std::cout << "Create mailslot successfully." << std::endl;
20         return hSlot;
21     }
22     
23 }

 

这里主要用到CreateMailslot函数,函数声明如下:

 

标签:name,Mailslot,Windows,句柄,间通信,mailslot,消息,创建,进程
From: https://www.cnblogs.com/zhaotianff/p/18146217

相关文章

  • windows11 配置账户登录锁定策略
    原文链接:https://blog.csdn.net/weixin_46119529/article/details/134162164一、打开本地策略有两种方法,都可以!!1、搜索“组策略”,或者 2、Win键+R输入“secpol.msc” 二、打开配置界面1、如果是搜索“组策略”,按以下步骤:      2、如果是Win键+R输入“sec......
  • Windows系统加固
    原文链接:https://blog.csdn.net/mu_yo/article/details/132237137一般我们从账户管理、授权管理、日志配置、服务安全、防火墙配置等方面进行Windows安全加固。一、帐户管理1、禁用或删除无用账户  1、禁用来宾账户    打开“本地安全策略->安全设置->本地策略->安......
  • Windows10中多屏显示器型号获取并与Screen对应
    需求:标识某块屏,不参与窗口快速移动@@@codepublicclassMonitor{///<summary>///DeviceID,如:\\.\DISPLAY17///</summary>publicStringDeviceName{get;set;} ///<summary>///名称,如:Def......
  • PVE下面安装Windows2012R2虚拟机的VirtIO驱动程序
    从官网链接下载不同版本的进行测试安装https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/测试结果如下virtio-win-0.1.215-2/2022-01-1305:42正常安装virtio-win-0.1.217-2/2022-05-3104:41安装失败virtio-win-0.1.221-1/2022......
  • docker也能跑windows了
    地址https://github.com/dockur/windowscomposerversion:"3"services:windows:image:dockurr/windowscontainer_name:windowsenvironment:VERSION:"win11"devices:-/dev/kvmcap_add:-NET_ADMIN......
  • reg2inf.exe 是一个 Windows 实用工具,用于将 Windows 注册表文件 (.reg) 转换为 Windo
    reg2inf.exe是一个Windows实用工具,用于将Windows注册表文件(.reg)转换为WindowsINF文件(.inf)。INF文件是一种文本文件,通常用于在Windows操作系统中安装设备驱动程序和配置设置。使用reg2inf.exe工具可以将注册表中的配置转换为INF格式,从而可以在Windows......
  • windows 修改hosts文件
    host文件的路径是 C:\Windows\System32\drivers\etc\hosts如果手动修改文件,是无法直接保存的,需要取得管理员权限。方法一,在开始菜单中搜索notepad然后再图标上右键以管理员身份运行,然后打开文件,找到hosts路径打开编辑保存。方法二,新建一个vbs后缀的文件,复制以下代码,保存后双......
  • hyperf windows使用docker搭建开发环境
    2024年4月13日23:44:16首先安装好docker注意:powershell是不支持命令换行符的dockerrun--namehyperf-vD:/code:/data-w/data-p9501:9501-it--privileged-uroothyperf/hyperf:8.1-alpine-v3.18-swoole或者使用最新版本dockerrun--namehyperf-vD:/code:/dat......
  • MySQL-8.0.33-winx64 解压版安装 [Windows]
    1、下载安装包mysql-8.0.33-winx64.ziphttps://dev.mysql.com/downloads/file/?id=5182202、安装解压mysql-8.0.33-winx64.zip(至:C:\app\mysql-8.0.33-winx64);创建my.ini文件;默认解压目录无my.ini文件,需自己创建;进入目录C:\app\mysql-8.0.33-winx64,创建my.ini,文件内容......
  • Windows Assessment and Deployment Kit(ADK)中的 DISM(Deployment Image Servicing and
    WindowsAssessmentandDeploymentKit(ADK)中的DISM(DeploymentImageServicingandManagement)工具是用于管理Windows映像(WIM)和虚拟硬盘(VHD)文件的命令行工具。DISM提供了许多功能和参数,其中一些可能不太常见或被称为“隐藏参数”。这些隐藏参数通常不在DISM命令的文档......