2011-03-14 2 views
1

여기에서 빌린 내 코드는 어디서, 어쩌면 여기 또는 코드 룰 또는 codeproject를 모르겠다.이 코드가이 명명 된 파이프의 보안을 설정합니까?

어쨌든 CreateNamedPipe의 마지막 매개 변수로 NULL을 전달할 수 있는지 또는 NULL을 넘어서 어떤 유형의 보안을 수행하는 sa 구조입니까? 당신은 반드시 CreateNamedPipe의 마지막 매개 변수로 NULL을 전달하면

// Setup the named pipe with a security attribute so it is open to anyone that enquires. 
SECURITY_ATTRIBUTES sa; 
SECURITY_DESCRIPTOR sd; 
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION); 
SetSecurityDescriptorDacl(&sd, TRUE, (PACL) NULL, FALSE); 
sa.nLength = (DWORD) sizeof(SECURITY_ATTRIBUTES); 
sa.lpSecurityDescriptor = (LPVOID) &sd; 
sa.bInheritHandle = TRUE; 

do 
    { 
    hPipe = CreateNamedPipe(lpszPipename,PIPE_ACCESS_DUPLEX,PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,BUFSIZE,BUFSIZE,5000,&sa); 
    if (hPipe != INVALID_HANDLE_VALUE) 
     { 

     if (ConnectNamedPipe(hPipe, NULL)) { 

답변

0

는() 당신은 명명 된 파이프에 대한 기본 보안 설명을 얻을.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365600%28v=vs.85%29.aspx

귀하의 샘플 코드는 NULL DACL (임의 액세스 제어 목록)을 설정합니다. 이는 모든 사람에게 모든 권한을 허용하기 때문에 위험합니다. 즉, 다른 응용 프로그램이 명명 된 파이프의 소유권을 가져 오거나 해당 응용 프로그램의 액세스 권한을 변경할 수 있습니다.