Neu in .NET 8.0 [10]: Plattformneutrale Abfrage der Privilegien
In der Klasse System.Environment hat Microsoft in .NET 8.0 die Eigenschaft IsPrivilegedProcess hinzugefĂĽgt.

(Bild: Alexey_Erofejchev/Shutterstock.com)
- Dr. Holger Schwichtenberg
Mit der Eigenschaft IsPrivilegedProcess
der statischen Klasse System.Environment
können Entwicklerinnen und Entwickler nun endlich auf einfache Weise abfragen, ob der aktuelle Prozess erhöhte Rechte (Administrator bzw. root) besitzt und berechtigt ist, sicherheitsrelevante Funktionen auszuführen.
IsPrivilegedProcess
funktioniert nicht nur unter Windows, sondern auch unter Unix-basierten Systemen (also Linux und macOS). IsPrivilegedProcess
liefert laut dem zugehörigen Issue auf GitHub true
in diesen Fällen:
Windows:
- NT AUTHORITY\LocalSystem
- BUILTIN\Administrator
- Jedes Administratorkonto in einem erhöhten Kontext
- Falls die Benutzerkontensteuerung deaktiviert ist: jedes Administratorkonto
Die Windows-Implementierung findet man in der Klasse Environment.Windows.cs
in der DLL (siehe den zugehörigen Code auf GitHub)
Unix-basierte Systeme wie Linux und macOS:
geteuid() == 0
Die Unix-Implementierung findet man in der Klasse Environment.Unix.cs (siehe Code auf GitHub).
Bisher war diese Rechteabfrage User-seitig plattformspezifisch zu implementieren, beispielsweise unter Windows folgendermaĂźen:
bool IsPrivilegedProcess()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
Die neue Implementierung von IsPrivilegedProcess
fĂĽr Windows verwendet direkt die Advanced Windows 32 Base API (Advapi32) via GetTokenInformation()
.
(rme)