Signatur
Beschreibung
win32_read_all_rights_access_service() ist Teil der win32service-Erweiterung für PHP unter Windows und liest sämtliche Zugriffsrechte (ACL/ACE-Einträge) eines angegebenen Windows-Dienstes aus dem Service Control Manager aus. Die Funktion gibt ein Array zurück, das alle konfigurierten Berechtigungseinträge für den Dienst enthält.
Die Funktion ist besonders nützlich für Administrationsskripte, die prüfen müssen, welche Benutzer oder Gruppen welche Rechte auf einen bestimmten Windows-Dienst besitzen – zum Beispiel ob ein bestimmter Account berechtigt ist, den Dienst zu starten, zu stoppen oder zu konfigurieren.
Die Erweiterung php_win32service muss installiert und aktiviert sein, damit diese Funktion verfügbar ist. Sie ist ausschließlich auf Windows-Systemen verfügbar und hat keine Entsprechung auf Unix/Linux-Systemen.
Im Fehlerfall – etwa wenn der Dienst nicht gefunden wird oder keine ausreichenden Rechte zum Abfragen der ACL vorliegen – gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $service_name Pflicht | string | Der interne Name des Windows-Dienstes (nicht der Anzeigename), dessen Zugriffsrechte ausgelesen werden sollen. Beispiel: 'W3SVC' für den IIS-Webserver-Dienst. |
|
| $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. Für entfernte Rechner den NetBIOS-Namen oder die IP-Adresse angeben. |
Rückgabewert
false zurück, wenn der Dienst nicht gefunden wurde, der Zugriff verweigert wurde oder ein anderer Fehler aufgetreten ist.Beispiele
Zugriffsrechte eines lokalen Dienstes auslesen
<?php
// Zugriffsrechte des Windows-Update-Dienstes auslesen
$serviceName = 'wuauserv';
$rights = win32_read_all_rights_access_service($serviceName);
if ($rights === false) {
echo "Fehler: Zugriffsrechte konnten nicht gelesen werden.\n";
} else {
echo "Zugriffsrechte für Dienst '$serviceName':\n";
print_r($rights);
}
Zugriffsrechte eines Dienstes auf einem Remote-Rechner prüfen
<?php
// Zugriffsrechte des IIS-Dienstes auf einem entfernten Server abfragen
$serviceName = 'W3SVC';
$machine = 'WEBSERVER01';
$rights = win32_read_all_rights_access_service($serviceName, $machine);
if ($rights === false) {
echo "Fehler: Konnte Rechte von '$machine' nicht abrufen. Zugriff verweigert oder Dienst nicht vorhanden.\n";
} else {
foreach ($rights as $entry) {
echo "Trustee: " . $entry['trustee'] . " | Access-Mask: " . $entry['access_mask'] . "\n";
}
}
// Wichtig · Fallstricke
Plattformbeschränkung: Diese Funktion ist ausschließlich unter Windows verfügbar und erfordert die installierte PHP-Erweiterung php_win32service (PECL). Ein Aufruf auf anderen Betriebssystemen führt zu einem fatalen Fehler.
Berechtigungen: Das PHP-Prozess-Konto benötigt ausreichende Rechte, um die Dienstsicherheitsdeskriptoren vom SCM abzufragen (READ_CONTROL-Recht auf den Dienst). Fehlen diese Rechte, gibt die Funktion false zurück.
Remote-Zugriff: Beim Abfragen von Rechten auf entfernten Maschinen muss das ausführende Konto über entsprechende Netzwerkrechte verfügen, und die Windows-Firewall darf die SCM-Kommunikation nicht blockieren.