Start · Sprachen · PHP · Referenz · win32_read_right_access_service

win32_read_right_access_service

Funktion

Liest die Zugriffsrechte eines Benutzers auf einen Windows-Dienst aus und gibt eine Bitmaske mit den erlaubten Rechten zurück.

Kategorie: misc

Signatur

win32_read_right_access_service(string $service, string $machine = null): int|false

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

Typ
int|false
Beschreibung
Gibt eine Ganzzahl als Bitmaske der erlaubten Zugriffsrechte zurück. Im Fehlerfall (z. B. Dienst nicht gefunden oder fehlende Berechtigungen) wird 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-Bitmaske: 983551 Startrecht ist vorhanden. Stopprecht ist vorhanden.

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.