Freigeben über


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
ERROR_ACCESS_DENIED
Das Handle verfügt nicht über das Zugriffsrecht SC_MANAGER_LOCK .
ERROR_INVALID_HANDLE
Das angegebene Handle ist ungültig.
ERROR_SERVICE_DATABASE_LOCKED
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

Weitere Informationen

ChangeServiceConfig

OpenSCManager

QueryServiceLockStatus

Dienstkonfiguration:

Dienstfunktionen

SetServiceObjectSecurity

Startservice

UnlockServiceDatabase