Windows Server 2008 64 ビットを除くすべての Windows OS で正常に動作するコードがいくつかあります。このコードは、UAC がオンになっているかどうかを判別します。
int TokenInfLength = 0; bool 結果; // 最初の呼び出しで TokenInformation の長さを取得します 結果 = GetTokenInformation(WindowsIdentity.GetCurrent().Token, TOKEN_INFORMATION_CLASS.TokenElevationType, IntPtr.Zero, TokenInfLength, out TokenInfLength); IntPtr TokenInformation = Marshal.AllocHGlobal(TokenInfLength); 結果 = GetTokenInformation(WindowsIdentity.GetCurrent().Token, TOKEN_INFORMATION_CLASS.TokenElevationType, TokenInformation, TokenInfLength, out TokenInfLength); if (結果) { TOKEN_ELEVATION_TYPE elevationType = (TOKEN_ELEVATION_TYPE)Marshal.ReadInt32(TokenInformation); Marshal.FreeHGlobal(TokenInformation); スイッチ (標高タイプ) { case TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault: Console.WriteLine("お使いのオペレーティング システムで UAC (ユーザー アカウント制御) がオフになっています。UAC をオンにして、コンピューターを再起動してください。"); 壊す; case TOKEN_ELEVATION_TYPE.TokenElevationTypeFull: Console.WriteLine("ユーザーには分割トークンがあり、プロセスは昇格して実行されています"); 壊す; ケース TOKEN_ELEVATION_TYPE.TokenElevationTypeLimited: Console.WriteLine("ユーザーは分割トークンを持っていますが、プロセスは昇格して実行されていません"); 壊す; } } ... enum TOKEN_ELEVATION_TYPE : int { TokenElevationTypeDefault = 1、 TokenElevationTypeFull、 TokenElevationTypeLimited } enum TOKEN_INFORMATION_CLASS { トークンユーザー = 1、 トークングループ、 TokenPrivileges、 トークン所有者、 TokenPrimaryGroup、 TokenDefaultDacl、 トークンソース、 トークンタイプ、 TokenImpersonationLevel、 トークン統計、 TokenRestrictedSids、 TokenSessionId、 TokenGroupsAndPrivileges、 TokenSessionReference、 TokenSandBox不活性、 TokenAuditPolicy、 TokenOrigin、 TokenElevationType、 TokenLinkedToken、 TokenElevation、 TokenHasRestrictions、 トークンアクセス情報、 トークン仮想化許可、 TokenVirtualizationEnabled、 TokenIntegrityLevel、 TokenUIAccess、 TokenMandatoryPolicy、 TokenLogonSid、 MaxTokenInfoClass }
TOKEN_INFORMATION_CLASS.TokenElevationType
序数値が 18 の enum const です。
そのため、WS 2008 64 ビットで UAC を有効にすると、「オペレーティング システムで UAC (ユーザー アカウント制御) がオフになっています。UAC をオンにして、コンピューターを再起動してください」というメッセージが表示されます。誰が問題を知っていますか?