Named pipes 开放式模式

管道服务器在 CreateNamedPipe函数的 dwOpenMode 参数中指定管道访问、重叠和写入模式。 管道客户端可以使用 CreateFile 函数为管道句柄指定这些打开的模式。

访问模式

设置管道访问模式相当于指定与管道服务器的句柄关联的读取或写入访问权限。 下表显示了可使用 CreateNamedPipe指定的每个访问模式的等效通用访问权限。

访问模式 等效一般访问权限
管道 _ 访问 _ 入站 通用 _ 读取
管道 _ 访问 _ 出站 泛型 _ 写入
管道 _ 访问 _ 双工 泛型 _ 读取 | 泛型 _ 写入

如果管道服务器使用管道访问入站来创建管道,则管道 _ _ 对于管道客户端是只读的,而对于管道客户端是只写的。 如果管道服务器使用管道 _ 访问出站创建管道 _ ,则管道将是管道客户端的只读管道。 使用管道 _ 访问双工创建的管道 _ 对于管道服务器和管道客户端都是可读/写的。

使用 CreateFile 连接到命名管道的管道客户端必须在与管道服务器指定的访问模式兼容的 dwDesiredAccess 参数中指定访问权限。 例如,客户端必须指定一般 _ 读取访问权限,以打开管道服务器使用管道 _ 访问出站创建的管道的句柄 _ 。 对于管道的所有实例,访问模式都必须相同。

若要读取管道属性(例如读取模式或阻止模式),管道句柄必须具有文件 _ 读取 _ 属性访问权限; 若要写入管道属性,管道句柄必须具有文件 _ 写入 _ 特性访问权限。 这些访问权限可与适用于管道的一般访问权限组合使用: _ _ 对只读管道使用文件写入特性的泛型读取 _ ,或 _ 具有 _ 只写管道的文件读取属性的泛型写入 _ 。 以这种方式限制访问权限可为管道提供更好的安全性。

重叠模式

在重叠模式下,执行冗长的读取、写入和连接操作的函数可以立即返回。 这使线程可以执行其他操作,同时在后台执行耗时的操作。 若要指定重叠模式,请使用 "文件 _ 标志 _ 重叠" 标志。 有关详细信息,请参阅 同步和重叠的输入和输出

CreateFile函数允许管道客户端 _ _ 使用 dwFlagsAndAttributes 参数为其管道句柄设置重叠模式 (文件标记重叠) 。

Write-Through 模式

指定通过文件标记写入的写入 _ 模式 _ _ 。 此模式仅影响不同计算机上的管道客户端和管道服务器之间的 byte 类型管道的写入操作。 在写入模式下,写入命名管道的函数在通过网络传输数据并将其传输到远程计算机上的管道缓冲区之前,不会返回。 对于需要每个写入操作进行同步的应用程序,可以使用写入模式。

如果未启用写入模式,则系统会缓冲数据,从而提高网络操作的效率,直到最小字节数已积累或到最大时间段已过去。 通过缓冲,系统可以将多个写入操作合并为单个网络传输。 这意味着,在系统将数据放入出站缓冲区后,但在系统通过网络传输数据之前,写操作可以成功完成。

CreateFile函数允许管道客户端 _ _ _ 使用 dwFlagsAndAttributes 参数 (文件标记为其管道句柄写入) 的写入模式。 创建管道句柄后,无法更改管道句柄的写入模式。 对于同一管道实例的服务器和客户端句柄,该写入模式可能有所不同。

管道客户端可以使用 SetNamedPipeHandleState 函数来控制传输到禁用了写入模式的管道之前的字节数和超时期限。 对于只读管道,必须使用一般的 " _ 读取" 和 "文件 _ 写入" _ 属性访问权限打开管道句柄。