管理者と昇格された特権の正確な決定
提供されたコード スニペットは管理者のステータスを正確に識別しますが、標準の管理者権限と昇格された特権を区別する機能がありません。 この機能拡張は、その制限に対処します。
この解決策には、標高ステータスを決定するための洗練されたアプローチが含まれます。
改良された IsProcessElevated
メソッド:
この拡張された方法では、GetTokenInformation
関数を活用して、ユーザー アカウント制御 (UAC) 設定を考慮してプロセス昇格レベルを直接確認します。
<code class="language-csharp">public static bool IsProcessElevated { get { // Check UAC status if (UacHelper.IsUacEnabled) { // Obtain process token IntPtr tokenHandle; if (!OpenProcessToken(Process.GetCurrentProcess().Handle, TOKEN_READ, out tokenHandle)) { throw new ApplicationException($"Failed to retrieve process token. Win32 Error Code: {Marshal.GetLastWin32Error()}"); } // Retrieve elevation type TOKEN_ELEVATION_TYPE elevationResult = TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault; int elevationResultSize = Marshal.SizeOf((int)elevationResult); uint returnedSize = 0; IntPtr elevationTypePtr = Marshal.AllocHGlobal(elevationResultSize); bool success = GetTokenInformation(tokenHandle, TOKEN_INFORMATION_CLASS.TokenElevationType, elevationTypePtr, (uint)elevationResultSize, out returnedSize); if (success) { elevationResult = (TOKEN_ELEVATION_TYPE)Marshal.ReadInt32(elevationTypePtr); return elevationResult == TOKEN_ELEVATION_TYPE.TokenElevationTypeFull; } else { throw new ApplicationException("Elevation status determination failed."); } } else { // Fallback to standard administrator check if UAC is disabled WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } } }</code>
この方法は、UAC が有効なシナリオと UAC が無効なシナリオの両方を確実に処理し、昇格された権限を信頼性の高い判断で提供します。
以上がプロセスが昇格された特権で実行されているかどうかを確実に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。