SetNamedPipeHandleState功能设置指定命名管道的读取模式和阻塞模式。如果指定的句柄是指向命名管道的客户端,并且如果命名管道服务器进程在远程计算机上,则该函数也可用于控制本地缓冲。
BOOL SetNamedPipeHandleState(
HANDLE 【hNamedPipe】, | //命名管道的句柄 |
LPDWORD 【//当前模式标志】, | //新管道模式的地址 |
LPDWORD 【lpMaxCollectionCount】, | //最大地址远程传输前的字节 |
LPDWORD 【lpCollectDataTimeout】 | //最大地址远程传输之前的时间 |
); |
参数
【hNamedPipe】
标识命名的管道实例。此参数可以由CreateNamedPipe函数返回的管道的服务器端的句柄,或CreateFile函数返回的管道的客户端。句柄必须具有对命名管道的GENERIC_WRITE访问权限。
【//当前模式标志】
指向提供新模式的32位变量。该模式是读模式标志和等待模式标志的组合。如果未设置模式,此参数可以为NULL。可以指定以下读取模式之一:
模式 | 描述 |
PIPE_READMODE_BYTE | 数据作为字节流从管道读取。如果没有指定读模式标志,则此模式是默认模式。 |
PIPE_READMODE_MESSAGE | 从管道读取数据作为消息流。如果为字节型管道指定了此标志,则该函数将失败。 |
可以指定以下等待模式之一:
模式 | 描述 |
PIPE_WAIT | 禁止模式启用。如果未指定等待模式标志,则此模式为默认模式。当ReadFile,WriteFile或ConnectNamedPipe功能中指定了阻塞模式管道手柄时,只有在要读取数据,所有数据被写入或连接客户端之前,操作才能完成。使用此模式可能意味着在某些情况下无限期等待客户端进程执行操作。 |
PIPE_NOWAIT | 启用非阻塞模式。在此模式下,ReadFile,WriteFile和ConnectNamedPipe始终立即返回。请注意,与Microsoft LAN Manager 2.0版兼容,支持非阻塞模式,不应使用命名管道实现异步输入和输出(I / O)。 |
【lpMaxCollectionCount】
指向32位变量,指定在传输到服务器之前在客户端计算机上收集的最大字节数。如果指定的管道句柄位于命名管道的服务器端,或者客户机和服务器进程位于同一台机器上,则此参数必须为NULL。如果客户端进程在创建句柄时在CreateFile函数中指定FILE_FLAG_WRITE_THROUGH标志,则忽略此参数。如果未设置收集计数,此参数可以为NULL。
【lpCollectDataTimeout】
指向一个32位变量,指定在远程命名管道通过网络传输信息之前可以通过的最大时间(以毫秒为单位)。如果指定的管道句柄位于命名管道的服务器端,或者客户端和服务器进程位于同一台计算机上,则此参数必须为NULL。如果客户端进程在创建句柄时在CreateFile函数中指定了FILE_FLAG_WRITE_THROUGH标志,则忽略此参数。如果未设置收集计数,此参数可以为NULL。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
也可以看看
ConnectNamedPipe, CreateFile, CreateNamedPipe, GetNamedPipeHandleState, ReadFile, WriteFile