繁体   English   中英

命名管道服务器无法获取管道句柄状态

[英]Named Pipe server can't get the pipe handle state

我目前正在开发一个用作命名管道服务器的应用程序。 该应用程序仅用于将数据发送到客户端(不是我写的),但是还需要通知管道何时断开。 我对此任务的想法是使用GetNamedPipeHandleState()检索管道实例的数量,并查看管道是否仍驻留在系统中。 如果不再连接,则该程序旨在重置管道,以便客户端可以重新连接并继续从应用程序中提取数据。 不幸的是,我无法获取管道实例的数量。 无论何时进行调用,该函数都会失败,并且GetLastError()返回ERROR_ACCESS_DENIED 但是,这仅在我按以下方式尝试调用时发生:

GetNamedPipeHandleStateA(pipe,0,&npipeinstances,0,0,0,0);

如果我这样调用函数:

GetNamedPipeHandleStateA(pipe,0,0,0,0,0,0);

没有错误发生,但是我没有收到任何状态信息。 是否有可能缺少创建参数,或者是检查此信息的更好方法?

管道的创建代码如下:

pipe=CreateNamedPipeA(pipename,             // name of the pipe
                      PIPE_ACCESS_OUTBOUND, // read/write access 
                      PIPE_TYPE_MESSAGE |   // message type pipe 
                      PIPE_WAIT,            // blocking mode 
                      1,                    // max. instances  
                      65535,                // output buffer size 
                      65535,                // input buffer size 
                      300,                  // client time-out 
                      NULL);                // default security attribute 

API文档

hNamedPipe [in]所需信息的命名管道的句柄。 该句柄必须对只读或读/写管道具有GENERIC_READ访问权限,或者对于只读管道必须具有GENERIC_WRITE和FILE_READ_ATTRIBUTES访问权限。

如果仅使用PIPE_ACCESS_OUTBOUND打开了管道手柄( pipe ),我认为您不满足此条件。 因此, ERROR_ACCESS_DENIED错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM