簡體   English   中英

創建命名管道時出現GLE = 5(訪問被拒絕)錯誤

[英]Getting GLE=5 (Access Denied ) Error While creating Named Pipe

我嘗試創建命名管道,但得到GLE 5(訪問被拒絕錯誤)

#include <windows.h> 
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include "iostream.h"

//#define PIPE_ACCESS_DUPLEX 0x00000003
//#define PIPE_ACCESS_INBOUND 0x00000001
//#define PIPE_ACCESS_OUTBOUND 0x00000002
#define BUFSIZE 512

int main()
{
    HANDLE hPipe;
    LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\mynamedpipe"); 
    hPipe=CreateNamedPipe(lpszPipename,PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,BUFSIZE,BUFSIZE,0,NULL);

    if (hPipe != INVALID_HANDLE_VALUE) 
        cout<<"Valid";


      if (GetLastError() != ERROR_PIPE_BUSY) 
      {
         printf( TEXT("Could not open pipe. GLE=%d\n"), GetLastError() ); 
         return -1;
      }

    return 0;
}

lPipeName無效,您需要像msdn示例中一樣正確轉義'\\'字符(有關各種錯誤代碼的詳細信息,請參見此處 )。

我也將使用定義而不是十六進制數字,將使用的管道聲明為:

hPipe = CreateNamedPipe( lpszPipename, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,  
                         PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 
                        PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, 0, NULL);

哪個imo更易讀。

MSDN代碼段是針對客戶端的。 服務器端使用CreateNamedPipe創建管道,客戶端使用CreateFile連接到已創建的管道。

編輯: CreatenamedPipe手冊頁的備注部分的前兩段描述了為什么您可能會被拒絕訪問。 假設這是您正在創建的此命名管道的唯一實例,則問題可能出在您的權限上。 您使用的是Vista還是Windows 7? 如果是這樣,請確保您以管理員身份運行。 否則,您將不得不使用設置,直到正確設置為止。

PS:完成管道后,是否要調用DisconnectNamedPipe和CloseHandle? 即使管道創建不正確,我也會打電話給他們。

好吧,我在程序中嘗試了很多事情,但是無法找出創建失敗的原因。

我正在VC ++ 6.0上工作。 然后,我啟動了Visual Studio 2008,並創建了一個C ++項目。 粘貼代碼。 已編譯。 得到了錯誤:

Error   1   fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory

評論了#include "iostream.h"

重建和工作。 不太確定為什么會這樣,但是對我有用。 如果您知道為什么會發生這種情況或有解決方案,請進行更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM