LockServiceDatabase-Funktion (winsvc.h)
[Ab Windows Vista wird diese Funktion aus Gründen der Anwendungskompatibilität bereitgestellt und hat keine Auswirkungen auf die Datenbank.]
Fordert den Besitz der SCM-Datenbanksperre (Service Control Manager) an. Nur ein Prozess kann die Sperre zu einem bestimmten Zeitpunkt besitzen.
Syntax
SC_LOCK LockServiceDatabase(
[in] SC_HANDLE hSCManager
);
Parameter
[in] hSCManager
Ein Handle für die SCM-Datenbank. Dieses Handle wird von der OpenSCManager-Funktion zurückgegeben und muss über das zugriffsrecht SC_MANAGER_LOCK verfügen. Weitere Informationen finden Sie unter Dienstsicherheit und Zugriffsrechte.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert eine Sperre für die angegebene SCM-Datenbank.
Wenn bei der Funktion ein Fehler auftritt, ist der Rückgabewert NULL. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Die folgenden Fehlercodes können vom SCM festgelegt werden. Andere Fehlercodes können von Registrierungsfunktionen festgelegt werden, die vom SCM aufgerufen werden.
Rückgabecode | Beschreibung |
---|---|
|
Das Handle verfügt nicht über das Zugriffsrecht SC_MANAGER_LOCK . |
|
Das angegebene Handle ist ungültig. |
|
Die Datenbank ist gesperrt. |
Hinweise
Eine Sperre ist ein Protokoll, das von Setup- und Konfigurationsprogrammen und dem SCM verwendet wird, um den Zugriff auf die Dienststruktur in der Registrierung zu serialisieren. Der SCM fordert nur dann den Besitz der Sperre an, wenn er einen Dienst startet.
Ein Programm, das die SCM-Datenbanksperre abruft und sie nicht freigeben kann, verhindert, dass der SCM andere Dienste startet. Aufgrund des Schweregrads dieses Problems dürfen Prozesse die Datenbank nicht mehr sperren. Aus Gründen der Kompatibilität mit älteren Anwendungen gibt die LockServiceDatabase-Funktion eine Sperre zurück, hat jedoch keine anderen Auswirkungen.
Windows Server 2003 und Windows XP: Durch das Abrufen der SCM-Datenbanksperre wird verhindert, dass der SCM einen Dienst startet, bis die Sperre aufgehoben wird. Beispielsweise könnte ein Programm, das mehrere verwandte Dienste konfigurieren muss, bevor eine dieser Dienste gestartet wird , LockServiceDatabase aufrufen, bevor der erste Dienst konfiguriert wird. Alternativ kann sichergestellt werden, dass keiner der Dienste gestartet wird, bis die Konfiguration abgeschlossen ist.
Ein Aufruf der StartService-Funktion zum Starten eines Diensts in einer gesperrten Datenbank schlägt fehl. Keine anderen SCM-Funktionen sind von einer Sperre betroffen.
Die Sperre wird so lange gehalten , bis das SC_LOCK Handle in einem nachfolgenden Aufruf der UnlockServiceDatabase-Funktion angegeben wird. Wenn ein Prozess, der eine Sperre besitzt, beendet wird, bereinigt der SCM automatisch und gibt den Besitz der Sperre frei.
Wenn die Sperre nicht aufgehoben wird, kann dies zu Systemproblemen führen. Ein Prozess, der die Sperre erhält, sollte sie so bald wie möglich freigeben.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winsvc.h (windows.h einschließen) |
Bibliothek | Advapi32.lib |
DLL | Advapi32.dll |