나는이 주제에 대해 많은 혼란이 있음을 알고 있으며 케이트의 대답은 정확하고 불완전하지 않다.
Vista 이후 관리자가 로그인 할 수 있지만 프로세스가 자동으로 상승되지 않습니다. 관리자는 소위 "분할 토큰"을 가지고 있습니다. 즉, 동일한 관리 사용자에 대해 실행중인 프로세스가있을 수 있으며 그 중 일부는 승격되고 다른 프로세스는 승격되지 않습니다. 관리자가 승격되지 않은 프로세스를 실행하면 해당 토큰의 권한 중 일부가 제거됩니다. XP 에서처럼 모든 프로세스가 상승되거나 상승하지 않는 것은 더 이상 아닙니다.
www.sysinternals.com의 프로세스 탐색기를 설치하고 "무결성 수준"열을 활성화하십시오. "중간"이 표시되면이 프로세스가 상승되지 않습니다. "높음"이 표시되면 프로세스가 상승됩니다. 프로세스가 무결성 레벨 "높음"으로 실행되면 상승 된 다른 프로세스를 시작하는 데 UAC 프롬프트가 필요하지 않습니다.
UAC가 완전히 꺼지면 모든 프로세스가 "높음"으로 실행되므로 절대로 고도가 필요하지 않습니다. UAC는
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System
키를 "EnableLUA
"으로 설정하여 해제 할 수 있습니다. 이 설정을 변경하면 재부팅해야합니다.
아직 여기에 언급되지 않은 또 다른 점이 있습니다. 제어판에서 "프롬프트없이 상승"을 구성 할 수 있습니다. 이 경우 관리자는 승격되지 않은 프로세스에서 승격 된 프로세스를 시작할 수 있으며 UAC 프롬프트가 표시되지 않습니다.
이 설정은 관리 사용자의 경우 키 "ConsentPromptBehaviorAdmin
"의 동일한 레지스트리 경로 아래에 저장됩니다.
관리자가 아닌 모든 사용자의 경우 "ConsentPromptBehaviorUser
"키가 있지만 이것은 변경 사항 만 변경하지만 고도는 해제 할 수 없습니다. 비 관리자는 항상 UAC 프롬프트를받습니다.
(UAC가 완전히 해제되지 않은 경우) 프로세스가 상승 실행하는 경우 어떻게 알 수 있습니까 : 다음 GetTokenInformation(TokenElevation)
다음 전화 OpenProcess()
, OpenProcessToken()
.
그리고 무결성 수준 호출을 얻을 수 GetTokenInformation(TokenIntegrityLevel)
하고 고도가 정말 당신이 당신의 프로세스가 높은 실행 여부를 확인하고 또한 이러한 레지스트리 키를 확인하고해야합니다 필요한 경우에만 아이콘을 표시 할 그렇다면 다음 GetSidSubAuthority()
사용자가 관리자인지 아닌지 확인하십시오. 이것은 몇 줄의 코드를 포함하고 있으며 높이가 일 때 일 때마다이 아이콘을 항상 표시하는 것이 좋습니다.
API IsUserAnAdmin()
은 (는) 더 이상 사용되지 않습니다. Vista 이후 더 이상 사용해서는 안됩니다. 사용자가 관리자 그룹에 속하는지 확인하는 것이 훨씬 더 많은 코드입니다.
본 적이 있으면 잘 쓰여있는 질문입니다. – badp
@badp : 나는 그것에 대해 약간 생각하고 연구했지만, 너무 쉽기 때문에 여전히 나를 괴롭힌다. 어쩌면 나는 어떤 경계 조건을 고려하지 않았을 것이다. – Wizard79