CreateMailslotW 函数 (winbase.h)

创建具有指定名称的邮件图并返回 mailslot 服务器可用于对 mailslot 执行操作的句柄。 mailslot 是创建邮件的计算机的本地位置。 如果已存在具有指定名称的邮件图,则会发生错误。

语法

HANDLE CreateMailslotW(
  [in]           LPCWSTR               lpName,
  [in]           DWORD                 nMaxMessageSize,
  [in]           DWORD                 lReadTimeout,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

参数

[in] lpName

mailslot 的名称。 此名称必须具有以下格式:

\\.\mailslot\[路径]name

名称字段必须唯一。 该名称可能包含由反斜杠分隔的多个伪目录级别。 例如,\.\mailslot\example_mailslot_name和 \\.\mailslot\abc\def\ghi 都是有效名称。

[in] nMaxMessageSize

可以写入 mailslot 的单个邮件的最大大小(以字节为单位)。 若要指定消息可以是任意大小,请将此值设置为零。

[in] lReadTimeout

读取操作可以等待在超时发生前将邮件写入 mailslot 的时间(以毫秒为单位)。 以下值具有特殊含义。

价值 意义
0
如果没有消息,则立即返回。 (系统不会将立即返回视为错误。
MAILSLOT_WAIT_FOREVER
((DWORD)-1)
永远等待消息。
 

此超时值适用于所有后续读取操作和所有继承的 mailslot 句柄。

[in, optional] lpSecurityAttributes

指向 SECURITY_ATTRIBUTES 结构的指针。 bInheritHandle 结构的成员确定返回的句柄是否可以由子进程继承。 如果 lpSecurityAttributesNULL,则无法继承句柄。

返回值

如果函数成功,则返回值是 mailslot 的句柄,用于服务器 mailslot 操作。 此函数返回的句柄是异步的或重叠的。

如果函数失败,则返回值 INVALID_HANDLE_VALUE。 若要获取扩展的错误信息,请调用 GetLastError

言论

mailslot 存在,直到满足以下条件之一:

  • 最后一个(可能继承或复制)句柄是使用 CloseHandle 函数关闭的。
  • 拥有最后一个(可能继承或重复)的进程将退出。
系统使用第二种方法销毁 mailslots。

若要将邮件写入 mailslot,进程使用 CreateFile 函数,使用以下格式之一指定 mailslot 名称。

格式 用法
\\.\mailslot\名称 检索本地 mailslot 的客户端句柄。
\\computername\mailslot\name 检索远程 mailslot 的客户端句柄。
\\域名\mailslot\name 检索具有指定域中指定名称的所有 mailslot 的客户端句柄。
\\*\mailslot\名称 检索具有系统主域中指定名称的所有 mailslot 的客户端句柄。
 

如果 CreateFile 指定域或使用星号格式指定系统的主域,则应用程序一次无法向 mailslot 写入超过 424 个字节。 如果应用程序尝试这样做,则 WriteFile 函数失败,GetLastError 返回 ERROR_BAD_NETPATH

应用程序在使用 CreateFile 检索 mailslot 的客户端句柄时,必须指定 FILE_SHARE_READ 标志。

如果调用 CreateFile 以访问不存在的邮件图,则会设置 ERROR_FILE_NOT_FOUND 错误代码。

例子

有关示例,请参阅 创建 Mailslot

注意

winbase.h 标头将 CreateMailslot 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 winbase.h (包括 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

CloseHandle

CreateFile

GetMailslotInfo

Mailslot 函数

Mailslots 概述

SECURITY_ATTRIBUTES

SetMailslotInfo

WriteFile