Discerner les niveaux d'élévation dans les applications .NET
Cet article aborde le défi de faire la différence entre l'exécution avec des privilèges d'administrateur standard et des privilèges d'administrateur élevés au sein d'une application .NET.
Méthodes existantes et limitations
Bien que les méthodes existantes puissent confirmer le statut d'administrateur, elles ne parviennent pas à faire la distinction entre l'accès administrateur standard et élevé.
Approche améliorée utilisant UacHelper
Une solution plus robuste utilise la classe UacHelper
:
<code class="language-csharp">using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Security.Principal; using Microsoft.Win32; public static class UacHelper { ... // (Implementation details omitted for brevity) public static bool IsProcessElevated { get { if (IsUacEnabled) { // ... (Implementation details omitted for brevity) return elevationResult == TOKEN_ELEVATION_TYPE.TokenElevationTypeFull; } else { // ... (Implementation details omitted for brevity) return result; } } } }</code>
Cette classe détermine efficacement le niveau d'élévation en vérifiant l'UAC (User Account Control) et en utilisant la fonction GetTokenInformation
pour une identification précise du type d'élévation. Lorsque l'UAC est inactif, il s'agit par défaut d'une vérification basée sur WindowsPrincipal
.
Mise en œuvre
Pour vérifier l'état d'élévation de l'application, utilisez simplement :
<code class="language-csharp">bool isElevated = UacHelper.IsProcessElevated;</code>
Cette méthode raffinée offre un moyen fiable de vérifier le niveau d'élévation précis de votre application .NET, en faisant la distinction entre les privilèges d'administrateur standard et les privilèges d'administrateur entièrement élevés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!