내가 만들고있는 명명 된 파이프에 대해 모든 사용자에게 액세스 권한을 부여해야합니다. NULL/빈 DACL을 만들고이를 CreateNamedPipe
으로 전달하는 방법을 알고 있습니다.NULL/빈 DACL은 어떻게 만듭니 까?
어떻게 NULL DACL을 만들 수 있습니까? LPSECURITY_ATTRIBUTES
에 대해 NULL 포인터를 전달하는 것과 같지 않다고 들었습니다. 이처럼
내가 만들고있는 명명 된 파이프에 대해 모든 사용자에게 액세스 권한을 부여해야합니다. NULL/빈 DACL을 만들고이를 CreateNamedPipe
으로 전달하는 방법을 알고 있습니다.NULL/빈 DACL은 어떻게 만듭니 까?
어떻게 NULL DACL을 만들 수 있습니까? LPSECURITY_ATTRIBUTES
에 대해 NULL 포인터를 전달하는 것과 같지 않다고 들었습니다. 이처럼
는 :
SECURITY_DESCRIPTOR SD;
InitializeSecurityDescriptor(&SD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&SD, TRUE, NULL, FALSE);
나는 간결하게하기 위해 오류 검사를 생략. 너는 그렇게하지 않을 것이다. 전화 할 때
그런 CreateNamedPipe
당신은 보안이 같은 기록을 속성을 설정할 수 있습니다
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &SD;
SA.bInheritHandle = TRUE;
SetSecurityDescriptorDacl
상태에 대한 문서 :
pDacl 매개 변수가 DACL 가리 키지 않는
및 bDaclPresent 플래그가 TRUE이면 NULL DACL이 지정됩니다. 모든 액세스가 허용됩니다. 모든 사용자가 DACL 및 보안 설명 자의 소유자를 변경할 수 있으므로 개체에 NULL DACL을 사용하면 안됩니다. 이것은 객체의 사용을 방해합니다.
위의 내용은 수행 방법이지만 설명서에서는 그렇게해서는 안됩니다.
가 여기에 우리가 우리의 프로젝트 중 하나에서 사용하는 코드입니다 :
SECURITY_DESCRIPTOR pSD;
SECURITY_ATTRIBUTES SA;
if(!InitializeSecurityDescriptor(&pSD, SECURITY_DESCRIPTOR_REVISION))
throw error;
if(!SetSecurityDescriptorDacl(&pSD, true, NULL, false))
throw error;
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &pSD;
SA.bInheritHandle = true;
pSA = &SA;
...
FMapping = CreateFileMapping(INVALID_HANDLE_VALUE, pSA, PAGE_READWRITE, 0, 4096, p);
이 코드는 모든
포인터 변수 ('pSA')를 쓰는 이유는 무엇입니까? – Ajay
흠에 대한 액세스 매핑을 생성, 소유권 변경에 대한 부분은 놀라운 일이었다. 하지만 내 경우에는 문제가되지 않는다. 실행중인 사용자에 관계없이 내 exe에서 연결할 수 있어야하고, 파이프에 연결하면 Windows 서비스 나 다른 것을 해킹 할 수 없다. 하지만 여전히 흥미 롭습니다. 소유권을 변경하지 않고도 모든 사람에게 접속 권한을 부여 할 수 있습니까? – sashoalm
예, 그렇다면 실제 DACL을 사용해야합니다. 이전 질문에 대한 내 의견의 코드는 어떻게 수행하는지 설명합니다. –