2013-01-14 37 views
2

我需要爲客戶機和服務器之間通信的命名管道(在同一臺主機),這裏是代碼:CreateNamedPipe導致ERROR_ACCESS_DENIED?

WCHAR wszPipeName[MAX_FILE_LENGTH]; 
swprintf_s(wszPipeName, MAX_FILE_LENGTH, L"\\\\.\\pipe\\TEST%d", uniqueID); 
pipe = CreateNamedPipe(
      wszPipeName, // name of the pipe 
      PIPE_ACCESS_DUPLEX, 
     PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT, 
     1, 
      MAX_MSG_SIZE, 
      MAX_MSG_SIZE , //inbound buffer 
      MAX_READ_DATA_TIMEOUT, 
      NULL // use default security attributes 
     ); 

它的處理程序得到的回覆是始終INVALID_HANDLE_VAULE和錯誤ERROR_ACCESS_DENIED。

這裏有什麼不對嗎?它在Windows 7/8上運行。

感謝

+0

任何幫助? *命名管道的所有實例必須指定相同的管道類型(字節類型或消息類型),管道訪問(雙工,入站或出站),實例計數和超時值。如果使用不同的值,則此函數失敗,並且GetLastError返回ERROR_ACCESS_DENIED。*另外,我只用過一次,但是當兩個進程正在使用它時,不應該至少有兩個管道實例作爲最大值? – chris

+0

這是服務器端,只是創建命名管道....現在,我甚至無法使createNamePipe函數工作。 – lzbob

+0

你的菸斗的名字是什麼?特別是什麼是包含在wszPipeName?你的代碼看起來不錯。 – stamhaney

回答

1

找到原因,這是因爲安全限制。提供合適的安全描述符後,它就可以工作了!

+2

您能否提供更多關於您使用的「合適的安全描述符」的信息?(我可能會遇到類似的問題:當我運行以管理員身份創建命名管道的程序時,它可以工作,但是當我以普通用戶身份運行程序,我得到了ERROR_ACCESS_DENIED。) – Jeremy

+0

@izbob,可以請您與我的社區分享您的解決方案 –

+0

,因爲我評論說,最終,提供合適的安全描述符解決了問題,這是因爲安全。 – lzbob

相關問題