[英]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.