2009-10-07 3 views
17

Windows에서 실행중인 C++ 응용 프로그램이 런타임에 권한을 삭제할 수 있습니까?Windows의 C++에서 권한 삭제

예를 들어, 사용자가 관리자로 내 애플리케이션을 시작했지만 관리자로 내 애플리케이션을 실행할 이유가없는 경우 어떤 방법 으로든 관리자 권한을 포기할 수 있습니까?

간단히 말해, 필자는 Windows 디렉토리에서 쓰기 액세스와 같이 필요없는 권한을 삭제하는 main() 함수에 코드를 작성하고 싶습니다.

답변

16

예, AdjustTokenPrivileges을 사용하여 불필요하고 위험한 권한을 토큰에서 제거 할 수 있습니다. 즉시 필요하지 않은 경우 (나중에 권한을 활성화 할 수 있음) 비활성화하거나 토큰에서 권한을 모두 제거 할 수 있습니다.

CreateRestrictedToken을 통해 제한된 토큰을 생성하고 제한된 토큰으로 실행중인 응용 프로그램을 다시 실행할 수도 있습니다. CreateRestrictedToken을 사용하여 권한을 비활성화하고 토큰에서 Administrators 그룹과 같은 그룹을 제거 할 수 있습니다.

AdjustTokenGroups을 사용하면 실행중인 프로세스의 토큰에서 관리자 그룹을 제거 할 수는 있지만 이미 실행중인 프로세스에서는 시도한 적이 없습니다.

Windows 디렉터리에 대한 쓰기 권한은 권한의 적용을받지 않습니다. 시스템의 리소스에는 누가 액세스 할 수 있는지를 나타내는 ACL's이 있습니다. 시스템 및 관리자는 Windows 디렉터리에 대한 쓰기 권한이 있습니다.