簡體   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