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