Präzise Bestimmung von Administrator- und erhöhten Berechtigungen
Das bereitgestellte Code-Snippet identifiziert den Administratorstatus genau, es fehlt jedoch die Möglichkeit, zwischen Standardadministratorrechten und erhöhten Berechtigungen zu unterscheiden. Diese Verbesserung behebt diese Einschränkung.
Die Lösung beinhaltet einen verfeinerten Ansatz zur Bestimmung des Höhenstatus:
Verbesserte IsProcessElevated
Methode:
Diese erweiterte Methode nutzt die Funktion GetTokenInformation
, um die Prozesshöhenstufe direkt zu ermitteln und dabei die Einstellungen der Benutzerkontensteuerung (UAC) zu berücksichtigen:
<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>
Diese Methode verarbeitet zuverlässig sowohl UAC-aktivierte als auch UAC-deaktivierte Szenarien und ermöglicht eine zuverlässige Bestimmung erhöhter Berechtigungen.
Das obige ist der detaillierte Inhalt vonWie kann ich zuverlässig feststellen, ob ein Prozess mit erhöhten Berechtigungen ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!