Maison >développement back-end >C++ >Comment puis-je déterminer de manière fiable si un processus s'exécute avec des privilèges élevés ?
Détermination précise de l'administrateur et des privilèges élevés
L'extrait de code fourni identifie avec précision le statut d'administrateur, mais ne permet pas de faire la différence entre les droits d'administrateur standard et les privilèges élevés. Cette amélioration résout cette limitation.
La solution implique une approche raffinée de la détermination de l'état d'élévation :
Méthode IsProcessElevated
améliorée :
Cette méthode améliorée exploite la fonction GetTokenInformation
pour déterminer directement le niveau d'élévation du processus, en tenant compte des paramètres de contrôle de compte d'utilisateur (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>
Cette méthode gère de manière robuste les scénarios avec ou sans UAC, fournissant une détermination fiable des privilèges é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!