Signatur
Beschreibung
win32_read_right_access_service() ermöglicht es, die Zugriffsrechte zu ermitteln, die einem bestimmten Benutzer oder einer Gruppe für einen Windows-Dienst gewährt wurden. Die Funktion fragt dazu den Windows Service Control Manager (SCM) ab und liefert eine Ganzzahl zurück, deren Bits die einzelnen Berechtigungen kodieren.
Die Funktion ist Teil der win32service-Erweiterung und steht daher ausschließlich auf Windows-Systemen zur Verfügung. Sie eignet sich vor allem für administrative PHP-Skripte, die Berechtigungen von Diensten prüfen oder auditieren sollen, ohne direkt auf die Windows-API zugreifen zu müssen.
Der Rückgabewert ist eine Bitmaske, die mit den Konstanten der win32service-Erweiterung (z. B. WIN32_SERVICE_ALL_ACCESS, WIN32_SERVICE_START, WIN32_SERVICE_STOP) verglichen werden kann. Bei einem Fehler wird false zurückgegeben.
Beachte, dass das aufrufende Skript ausreichende Rechte auf dem Zielsystem benötigt, um die Dienstrechte lesen zu können. Auf entfernten Rechnern ($machine) sind entsprechende Netzwerk- und Administratorrechte erforderlich.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $service Pflicht | string | Der interne Name (Short Name) des Windows-Dienstes, dessen Rechte gelesen werden sollen, z. B. 'W32Time'. |
|
| $machine | string | null | Der Name des Zielrechners, auf dem der Dienst läuft. Wird null oder ein leerer String übergeben, wird der lokale Rechner verwendet. |
Rückgabewert
false zurückgegeben.Beispiele
Zugriffsrechte eines lokalen Dienstes prüfen
<?php
// Zugriffsrechte des Windows-Zeitdienstes lesen
$rights = win32_read_right_access_service('W32Time');
if ($rights === false) {
echo "Fehler beim Lesen der Dienstrechte.\n";
} else {
echo "Rechte-Bitmaske: " . $rights . "\n";
// Prüfen, ob Start-Recht vorhanden ist
if ($rights & WIN32_SERVICE_START) {
echo "Startrecht ist vorhanden.\n";
} else {
echo "Kein Startrecht.\n";
}
// Prüfen, ob Stop-Recht vorhanden ist
if ($rights & WIN32_SERVICE_STOP) {
echo "Stopprecht ist vorhanden.\n";
} else {
echo "Kein Stopprecht.\n";
}
}
?>
Rechte auf einem entfernten Rechner prüfen
<?php
// Zugriffsrechte auf einem Remote-Server prüfen
$maschine = 'REMOTESRV01';
$dienst = 'Spooler';
$rights = win32_read_right_access_service($dienst, $maschine);
if ($rights === false) {
echo "Konnte Rechte für Dienst '{$dienst}' auf '{$maschine}' nicht lesen.\n";
} else {
if ($rights & WIN32_SERVICE_ALL_ACCESS) {
echo "Vollzugriff auf den Druckspooler-Dienst.\n";
} else {
echo "Eingeschränkte Rechte: " . $rights . "\n";
}
}
?>
// Wichtig · Fallstricke
Plattformabhängigkeit: Diese Funktion steht ausschließlich unter Windows zur Verfügung und erfordert die installierte und aktivierte win32service-PECL-Erweiterung. Auf Linux- oder macOS-Systemen ist sie nicht verfügbar.
Berechtigungen: Das ausführende PHP-Prozess-Konto benötigt ausreichende Rechte, um den Windows Service Control Manager abzufragen. Fehlen diese Rechte, gibt die Funktion false zurück, ohne eine aussagekräftige Fehlermeldung zu liefern. Prüfe daher stets den Rückgabewert.
Hinweis zur Dokumentation: Die Funktion ist in der offiziellen PHP-Dokumentation nur spärlich dokumentiert. Die genauen Konstantenwerte für die Rechte-Bitmasken sind unter den win32service-Konstanten (WIN32_SERVICE_*) zu finden.