//创建命名管道(只接受一个连接)和创建管道实例(应用于服务器同时接受多个连接)的函数,成功时返回管道的句柄,否则返回“INVALID_HANDLE_VALUE”。
//创建实例时,调用的读模式、等待模式,可以不同于创建命名管道时。
HANDLE CreateNamedPipe(
LPCTSTR lpName, // pointer to pipe name such as \\.\pipe\pipename
//符合UNC规范的NPFS管道名,在创建命名管道时,由于只能在本地创建,所以必须使用相对路径,如“\\\\.\\pipe\\pipename”,注意转义字符“\”
DWORD dwOpenMode, // pipe open mode
//设定命名管道的打开模式,实际上就是管道的特性信息,包括访问模式(双向、输入、输出)、I/O模式(是否重叠、安全模式(可否对DACL或SACL或SID写)
//由各模式的“|”操作构成dwOpenMode的值
DWORD dwPipeMode, // pipe-specific modes
//在消息模式下,系统给每个消息都给出了消息边界字符,要注意每次接收方给出的接收缓冲要大于发送方发送的消息大小,否则就会出现错误;如果管道写模式为消息,而读为数据流方式,则接收方不按消息边界进行接收。
DWORD nMaxInstances, // maximum number of instances
//最大请求连接数,可设置在1至PIPE_UNLIMITED_INSTANCES(无限)之间
DWORD nOutBufferSize, // output buffer size, in bytes
DWORD nInBufferSize, // input buffer size, in bytes
//命名管道的输出缓冲区,系统可以动态决定这些缓冲区的大小,如果写入缓冲区的数据大于指定的缓冲区长度,系统会自动进行缓冲区扩充
DWORD nDefaultTimeOut, // time-out time, in milliseconds
//指定默认的超时时间(客户端等待同一个命名管道建立连接的最长时间),以ms为单位
LPSECURITY_ATTRIBUTES lpSecurityAttributes // pointer to security attributes
);//指定命名管道的安全描述符,并决定一个子进程是否可以继承新建的句柄,将该参数设置为NULL,将获得默认的安全描述符,同时句柄不可继承。