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