Jak to:
SECURITY_DESCRIPTOR SD;
InitializeSecurityDescriptor(&SD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&SD, TRUE, NULL, FALSE);
pominąłem błąd sprawdzanie zwięzłości. Nie zrobiłbyś tego.
Wtedy, kiedy zadzwonić CreateNamedPipe
można skonfigurować zabezpieczenia rekordu atrybutów tak:
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &SD;
SA.bInheritHandle = TRUE;
Dokumentacja SetSecurityDescriptorDacl
stanach:
Gdy parametr pDacl nie wskazują na DACL i flaga bDaclPresent ma wartość TRUE, podano NULL DACL. Cały dostęp jest dozwolony. Nie powinieneś używać NULL DACL z obiektem, ponieważ każdy użytkownik może zmienić listę DACL i właściciela deskryptora bezpieczeństwa. Będzie to przeszkadzać w korzystaniu z obiektu.
Tak, powyższe jest, jak to zrobić, ale dokumentacja podkreśla, że nie należy tego robić.
Hm, część o zmianę własności było zaskoczeniem. Ale w moim przypadku to nie problem, po prostu muszę mieć możliwość połączenia się z moim exe, niezależnie od użytkownika, który go uruchamia, a połączenie z rurą nie pozwoli im zhakować mojej usługi systemu Windows lub cokolwiek. Ale nadal jest to interesujące - czy można zezwolić na dostęp wszystkim, aby się połączyć, bez możliwości zmiany właściciela? – sashoalm
Tak, to trzeba użyć prawdziwego DACL. Kod w moim komentarzu na poprzednim pytaniu wyjaśnia, jak to robię. –