创建命名管道时出现GLE = 5(访问被拒绝)错误

时间:2010-08-27 09:04:43

标签: c++ named-pipes windows

我尝试过创建命名管道但获得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;
}

2 个答案:

答案 0 :(得分:1)

lPipeName无效,您需要像在msdn示例中一样正确转义'\'字符(有关各种错误代码的详细信息,请参阅here)。

我还使用了define而不是hex数字,我使用的管道声明为:

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吗?即使管道没有正确创建,我也会打电话给他们。

答案 1 :(得分:0)

我用我的程序试了很多东西但是却无法找出创作失败的原因。

我正在研究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"

重建并且有效。不太确定为什么会这样,但对我有用。如果你知道为什么会这样或者有解决方案,请更新。