2009-11-06 5 views
0

구현하려고하는 간단한 디자인이 있습니다.XP에서 원격 명명 된 파이프 연결이 거부되었습니다.

단일 C++ 기반 서버 응용 프로그램은 쓰기 전용 명명 된 파이프를 만듭니다. 여러 클라이언트 (C++ 또는 C#)는 읽기 전용으로 연결하고 상태 메시지를 수신합니다.

로컬 프로세스에서이 작업을 수행하지만 다른 호스트의 클라이언트를 서버에 연결할 수 없습니다.

서버가 XP SP2 (어쩌면 SP3)에서 실행 중입니다. 클라이언트가 Win7에서 실행 중입니다.

SECURITY_DESCRIPTOR sd; 
    SECURITY_ATTRIBUTES sa; 
    SID_IDENTIFIER_AUTHORITY siaWorldSidAuthority = SECURITY_WORLD_SID_AUTHORITY; 
    PSID psidWorldSid = (PSID) LocalAlloc (LPTR, GetSidLengthRequired(1)); 
    InitializeSid(psidWorldSid, &siaWorldSidAuthority, 1); 
    *(GetSidSubAuthority(psidWorldSid, 0)) = SECURITY_WORLD_RID; 
    InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION); 
    SetSecurityDescriptorGroup(&sd, psidWorldSid, TRUE); 
    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES)); 
    sa.nLength = sizeof(SECURITY_ATTRIBUTES); 
    sa.lpSecurityDescriptor = &sd; 
    sa.bInheritHandle = FALSE; 

    HANDLE hPipe = CreateNamedPipe(
     lpszPipename,    // name 
     PIPE_ACCESS_OUTBOUND,  // write access 
     PIPE_TYPE_MESSAGE |    // message type pipe 
     PIPE_READMODE_MESSAGE |   // message-read mode 
     PIPE_WAIT,      // blocking mode 
     PIPE_UNLIMITED_INSTANCES, // max. instances 
     BUFSIZE,     // output buffer size 
     BUFSIZE,     // input buffer size 
     PIPE_TIMEOUT,    // client time-out 
     NULL /*&sa*/);      // no security attribute 

최종 PARAM에 & SA로 대체 NULL은 효과가 없다. C# 클라이언트 코드는 다음과 같습니다.

 SafeFileHandle pipeHandle = 
      CreateFile(
       pipeName, 
       GENERIC_READ, 
       0, 
       IntPtr.Zero, 
       OPEN_EXISTING, 
       0, 
       IntPtr.Zero); 

무엇이 바보 같은 일로 여기에 있습니까?

답변

0

방화벽을 점검 했습니까? 포트 445가 차단 되었습니까?

+0

XP가 Win7 호스트의 VM에서 실행 중입니다. 나는 Windows 방화벽이 호스트와 VM 모두에서 비활성화되어 있다고 생각한다. VM 네트워킹 어댑터가 필터링을 수행하지 않는다고 생각합니다. 물론 "믿는다"라는 단어는 여기에서 중요한주의 사항입니다. –

+0

한편, 이전에 클라이언트와 서버가 같은 시스템에 있었을 때 "\\. \ pipe \ foo"라는 파이프를 사용하는 대신 "\\ 12.34.56.78 \ pipe \ foo "(물론, 실제 IP 주소와 함께) - 두 프로세스가 모두 로컬 일 때도 연결에 실패한 것으로 보입니다. –

+0

Josh, XP에서 명명 된 파이프를 사용하는 방법에 대한 KB 기사를 찾았습니다. 관련된 몇 가지 설정이 있습니다 ... http://support.microsoft.com/kb/925890 –