CreateMailslot函数创建一个具有指定名称的邮槽,并返回一个邮件服务器可以用来在邮槽上执行操作的句柄。邮槽是创建它的计算机的本地。如果具有指定名称的邮槽已存在,则会发生错误。
手柄CreateMailslot(
LPCTSTR 【lpName】, | //指向mailslot名称的字符串的指针 |
DWORD 【nMaxMessageSize】, | //最大邮件大小 |
DWORD 【lReadTimeout】, | //读取超时之前的毫秒 |
LPSECURITY_ATTRIBUTES 【lpSecurityAttributes】 | //指向安全结构的指针 |
); |
参数
【lpName】
指向指定邮槽的名称的以null结尾的字符串。该名称必须具有以下形式:
\\\\。\\邮筒\\[【path】]【名称】
【名称】字段必须是唯一的。该名称可能包含多个由反斜杠分隔的伪指令级别。例如,\\\\。\\ mailslot \\ example_mailslot_name和\\\\。\\ mailslot \\ abc \\ def \\ ghi都是有效的名称。
【nMaxMessageSize】
指定可以写入邮槽的单个消息的最大大小(以字节为单位)。要指定消息可以是任何大小,请将此值设置为零。
【lReadTimeout】
指定在超时发生之前,读取操作可以等待消息写入邮槽的时间(以毫秒为单位)。以下值具有特殊含义:
值 | 含义 |
0 | 如果没有消息存在,立即返回。(系统不会将立即返回视为错误。) |
MAILSLOT_WAIT_FOREVER | 等待一个消息永远。 |
此超时值适用于所有后续读取操作和所有继承的邮槽控制。
【lpSecurityAttributes】
指向SECURITY_ATTRIBUTES结构的指针,用于确定返回的句柄是否可由子进程继承。如果【lpSecurityAttributes】为NULL,则无法继承该句柄。
Windows NT:结构的lpSecurityDescriptor成员指定新邮槽的安全描述符。如果【lpSecurityAttributes】为NULL,邮槽将获得默认安全描述符。
Windows 95:结构的lpSecurityDescriptor成员将被忽略。
返回值
如果函数成功,则返回值是邮槽的句柄,用于服务器邮槽操作。
如果函数失败,返回值为INVALID_HANDLE_VALUE。要获取扩展错误信息,请调用GetLastError.
备注
邮箱存在,直到满足以下条件之一为止:
*使用CloseHandle函数关闭最后一个(可能是继承的或复制的)句柄。
*进程拥有最后一个(可能是继承的或重复的)句柄退出。
Windows NT和Windows 95都使用第二种方法来销毁邮槽。
要将消息写入邮槽,进程使用CreateFile函数,使用以下格式之一指定邮槽名称:
格式 | 用法 |
\\\\。\\邮筒\\【名称】 | 检索到本地邮槽的客户端句柄。 |
\\【计算机名】\\邮筒\\【名称】 | 检索远程邮箱的客户端句柄。 |
\\【域名】\\邮筒\\【名称】 | 检索指定域中指定名称的所有邮槽的客户机句柄。 |
\\\\ * \\邮筒\\【名称】 | 在系统的主域中以指定的名称检索所有邮槽的客户机句柄。 |
如果CreateFile指定域或使用星号格式来指定系统的主域,则应用程序不能一次写入多达400个字节到邮槽。如果应用程序尝试这样做,WriteFile功能失败,GetLastError返回ERROR_BAD_NETPATH。
使用CreateFile检索邮箱的客户端句柄时,应用程序必须指定FILE_SHARE_READ标志。
也可以看看
CloseHandle, CreateFile, GetMailslotInfo, SECURITY_ATTRIBUTES, SetMailslotInfo, WriteFile