2012-08-12 1 views
3

로컬 사용자로 실행되는 응용 프로그램에 대해 관리자 권한으로 실행을 비활성화 할 수 있습니까?응용 프로그램을 관리자 권한으로 실행하지 못하도록 설정하는 방법

+0

@elyashiv이 질문에 대한 태그로 UAC를 지원하는 다른 Windows 버전이 없으므로 Windows Vista 또는 Windows 7 중 하나 또는 둘 모두처럼 보입니다. –

+0

이 [질문]보세요 (http://stackoverflow.com/questions/2051415/how-to-launch-an-exe-at-user-level-from-a-higher-level?rq=1) – Steve

+2

실행중인 사용자가 관리자 그룹에 있으면 종료하십시오. –

답변

5

관리자로 프로세스를 시작할 수 있다고 생각하지 않습니다. 그러나 상승 된 권한으로 실행 중인지 확인할 수 있으며이 경우 종료 할 수 있습니다.

static bool IsRunningWithElevatedPrivileges() 
    { 
     IntPtr hToken; 
     int sizeofTokenElevationType = Marshal.SizeOf(typeof(int)); 
     IntPtr pElevationType = 
      Marshal.AllocHGlobal(sizeofTokenElevationType); 

     if (OpenProcessToken(GetCurrentProcess(), TokenQuery, out hToken)) 
     { 
      uint dwSize; 
      if (GetTokenInformation(hToken, 
       TokenInformationClass.TokenElevationType, pElevationType, 
       (uint)sizeofTokenElevationType, out dwSize)) 
      { 
       TokenElevationType elevationType = (TokenElevationType)Marshal.ReadInt32(pElevationType); 
       Marshal.FreeHGlobal(pElevationType); 

       switch (elevationType) 
       { 
        case TokenElevationType.TokenElevationTypeFull: 
         return true; 
        default: 
         //case TokenElevationType.TokenElevationTypeLimited: 
         //case TokenElevationType.TokenElevationTypeDefault: 
         return false; 
       } 
      } 
     } 

     return false; 
    } 

    [DllImport("kernel32.dll")] 
    static extern IntPtr GetCurrentProcess(); 

    [DllImport("advapi32.dll", SetLastError = true)] 
    static extern bool OpenProcessToken(
     IntPtr processHandle, 
     uint desiredAccess, 
     out IntPtr tokenHandle); 

    [DllImport("advapi32.dll", SetLastError = true)] 
    static extern bool GetTokenInformation(
     IntPtr tokenHandle, 
     TokenInformationClass tokenInformationClass, 
     IntPtr tokenInformation, 
     uint tokenInformationLength, 
     out uint returnLength); 

    const UInt32 TokenQuery = 0x0008; 

    enum TokenElevationType 
    { 
     TokenElevationTypeDefault = 1, 
     TokenElevationTypeFull, 
     TokenElevationTypeLimited 
    } 

    enum TokenInformationClass 
    { 
     TokenUser = 1, 
     TokenGroups, 
     TokenPrivileges, 
     TokenOwner, 
     TokenPrimaryGroup, 
     TokenDefaultDacl, 
     TokenSource, 
     TokenType, 
     TokenImpersonationLevel, 
     TokenStatistics, 
     TokenRestrictedSids, 
     TokenSessionId, 
     TokenGroupsAndPrivileges, 
     TokenSessionReference, 
     TokenSandBoxInert, 
     TokenAuditPolicy, 
     TokenOrigin, 
     TokenElevationType, 
     TokenLinkedToken, 
     TokenElevation, 
     TokenHasRestrictions, 
     TokenAccessInformation, 
     TokenVirtualizationAllowed, 
     TokenVirtualizationEnabled, 
     TokenIntegrityLevel, 
     TokenUIAccess, 
     TokenMandatoryPolicy, 
     TokenLogonSid, 
     MaxTokenInfoClass 
    }