CreateMailslot

【勇芳软件工作室】汉化HomePreviousNext

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