ホームページ > バックエンド開発 > C++ > プロセスが昇格された特権で実行されているかどうかを確実に判断するにはどうすればよいですか?

プロセスが昇格された特権で実行されているかどうかを確実に判断するにはどうすればよいですか?

DDD
リリース: 2025-01-13 08:19:43
オリジナル
924 人が閲覧しました

How Can I Reliably Determine if a Process is Running with Elevated Privileges?

管理者と昇格された特権の正確な決定

提供されたコード スニペットは管理者のステータスを正確に識別しますが、標準の管理者権限と昇格された特権を区別する機能がありません。 この機能拡張は、その制限に対処します。

この解決策には、標高ステータスを決定するための洗練されたアプローチが含まれます。

改良された 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート