2009-10-07 11 views
17

Czy jest możliwe, aby aplikacja C++ działająca w systemie Windows zrzucała uprawnienia w środowisku wykonawczym?Upuszczanie uprawnień w C++ w systemie Windows

Na przykład, jeśli użytkownik uruchamia moją aplikację jako administrator, ale nie ma powodu, aby uruchomić moją aplikację jako administrator, czy mogę w jakiś sposób zrezygnować z uprawnień administratora?

W skrócie, chciałbym napisać kod w funkcji main(), która upuszcza uprawnienia, których nie potrzebuję (na przykład, Dostęp do zapisu w katalogu Windows).

Odpowiedz

16

Tak, możesz użyć AdjustTokenPrivileges, aby usunąć niepotrzebne i niebezpieczne przywileje z tokena. Możesz wyłączyć, jeśli nie jest to od razu potrzebne (przywilej można włączyć później) lub całkowicie usunąć przywilej z tokena.

Możesz także utworzyć ograniczony token za pośrednictwem CreateRestrictedToken i ponownie uruchomić aplikację z tym ograniczonym tokenem. CreateRestrictedToken może służyć do wyłączania uprawnień i usuwania grup (takich jak grupa administratorów) z tokena.

Być może będzie można użyć AdjustTokenGroups, aby usunąć grupę administratorów z tokenu uruchomionego procesu, ale nigdy nie próbowałem tego w już działającym procesie.

Należy pamiętać, że uprawnienia do zapisu do katalogu Windows nie są objęte uprawnieniami. Zasoby w systemie mają ACL's, które określają, kto ma dostęp. System i administratorzy mają dostęp do zapisu do katalogu Windows.

Powiązane problemy