Start · Sprachen · PHP · Referenz · win32_read_all_rights_access_service

win32_read_all_rights_access_service

Funktion

Liest alle Zugriffsrechte eines Windows-Dienstes aus dem Service Control Manager (SCM).

Kategorie: misc

Signatur

win32_read_all_rights_access_service(string $service_name, string $machine = null): array|false

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

Typ
array|false
Beschreibung
Gibt bei Erfolg ein Array zurück, das die Zugriffsrechte (ACL-Einträge) des angegebenen Dienstes enthält. Jeder Eintrag beschreibt einen Berechtigungssatz für einen bestimmten Trustee (Benutzer oder Gruppe). Gibt 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 für Dienst 'wuauserv': Array ( [0] => Array ( [trustee] => NT AUTHORITY\SYSTEM [access_mask] => 983551 [ace_type] => 0 ) ... )

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";
    }
}
Trustee: NT AUTHORITY\SYSTEM | Access-Mask: 983551 Trustee: BUILTIN\Administrators | Access-Mask: 983551

// 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.