Heim >Backend-Entwicklung >C++ >Wie erkennt man zuverlässig Administrator- und erhöhte Rechte in Windows?
So erkennen Sie Administratorrechte mit oder ohne erhöhte Berechtigungen
Ihr aktueller Code identifiziert erfolgreich den Administratorstatus, schlägt jedoch bei der Bestimmung erhöhter Berechtigungen fehl. Um dieses Problem umfassend anzugehen, werden wir einen anderen Ansatz untersuchen.
Überprüfen Sie, ob UAC aktiviert ist
Stellen Sie zunächst sicher, dass die Benutzerkontensteuerung (UAC) aktiviert ist. UAC ist eine Sicherheitsfunktion, die unbefugte Änderungen am Betriebssystem einschränkt. Wenn UAC aktiviert ist, benötigen wir einen anderen Ansatz für die Prüfung auf erhöhte Berechtigungen.
<code>RegistryKey uacKey = Registry.LocalMachine.OpenSubKey(uacRegistryKey, false); bool isUacEnabled = uacKey.GetValue(uacRegistryValue).Equals(1);</code>
Erhöhte Berechtigungen für den Prozess bestätigen
Als nächstes überprüfen wir den Status der erhöhten Berechtigung des aktuellen Prozesses. Wenn UAC aktiviert ist, verwenden wir die Funktion GetTokenInformation
, um den Token-Promotion-Typ abzurufen.
<code>IntPtr tokenHandle; if (!OpenProcessToken(Process.GetCurrentProcess().Handle, TOKEN_READ, out tokenHandle)) {throw new ApplicationException("无法获取进程令牌。Win32 错误代码: " + Marshal.GetLastWin32Error());} 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); bool isProcessAdmin = elevationResult == TOKEN_ELEVATION_TYPE.TokenElevationTypeFull; return isProcessAdmin; }</code>
Wenn UAC nicht aktiviert ist, können wir uns darauf verlassen, WindowsPrincipal.IsInRole
den Aktionsstatus zu überprüfen.
<code>WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); bool result = principal.IsInRole(WindowsBuiltInRole.Administrator); return result;</code>
Komplettlösung
Durch die Kombination dieser beiden Methoden können wir unabhängig vom UAC-Status umfassend erkennen, ob eine Anwendung mit erhöhten Rechten ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWie erkennt man zuverlässig Administrator- und erhöhte Rechte in Windows?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!