2010-06-26 3 views
8

UAC 및 권한 상승과 관련된 몇 가지 질문을 읽었지만 만족 스럽거나 포괄적 인 대답을 찾지 못했습니다. 사용자가 내가 권한 상승이 작업을 완료해야합니다에만 경우 확인 버튼 에 실드 (BCM_SETSHIELD)을 보여 주어야 구성 창을 열 때 윈도우 6 위,에 :UAC 및 권한 상승 프롬프트 패턴

나는이 시나리오를 가지고있다. - Windows UI에서 UAC가 비활성화되었지만 고객이이 특정 요청을 했더라도 실드는 항상 "관리 작업"으로 시각화된다는 것을 알고 있습니다.

내가 초안을 하기 위해이 조건이 아이콘 보여

  1. 사용자는 하지 관리 권한
    또는
  2. 현재의 프로세스가 TOKEN_ELEVATION_TYPE == TokenElevationTypeLimited

을 가지고했습니다 조건 # 1은 간단합니다 : 사용자에게 관리자 권한이없는 경우 elevatio n은 UAC에 관계없이 항상 필요합니다. # 2는 사용자에게 관리 권한이 있음을 의미하고 다른 값이 TOKEN_ELEVATION_TYPE이면 권한 상승이 필요하지 않음을 의미합니다.

정말 간단합니까? 나는 무엇인가 놓치고 있습니까? 그리고 -이 주제와 관련하여 문서화되거나 잘 알려진 패턴이 있습니까?

+1

본 적이 있으면 잘 쓰여있는 질문입니다. – badp

+0

@badp : 나는 그것에 대해 약간 생각하고 연구했지만, 너무 쉽기 때문에 여전히 나를 괴롭힌다. 어쩌면 나는 어떤 경계 조건을 고려하지 않았을 것이다. – Wizard79

답변

3

당신 말이 맞습니다. 대부분의 사람들은 방패를 올리면 방어막을 씌우지 만 옳은 일은 단추가 상승 할 경우 방패를 켜는 것입니다. (즉, 이미 상승한 상태라면 억누를 것입니다. (UAC가 꺼져있는 상태에서 억압하지 않는 것이 좋습니다.)

좋은 소식은 관리자 그룹의 누군가 (UAC 하에서) 응용 프로그램을 상승시키지 않으면, 그들이 관리자인지 아닌지 묻는다면 false으로 돌아올 것입니다. 그래서 저는 그 하나의 테스트만으로도 괜찮을 것 같아요.

+1

사실 애플리케이션이 이미 상승 된 경우 (또는 UAC가 비활성화 된 경우) 방패를 씌우는 것이 합리적입니다. 이렇게하면 사용자가 버튼이 "관리 물건"을 즉시 인식하게됩니다. 이 UI 스타일을 보증하지만 고객은 그렇지 않습니다. – Wizard79

+0

# 1 수표에만 의존 할 수 있다고 생각합니까? – Wizard79

+0

관리자가 아닌 경우 방패를 작성한 다음 모든 테스트 사례를 실행하여 충분한 지 확인하십시오. 내 의심은 그럴 것이다. –

2

나는이 주제에 대해 많은 혼란이 있음을 알고 있으며 케이트의 대답은 정확하고 불완전하지 않다.

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 이후 더 이상 사용해서는 안됩니다. 사용자가 관리자 그룹에 속하는지 확인하는 것이 훨씬 더 많은 코드입니다.