ControlServiceExA-Funktion (winsvc.h)
Sendet einen Steuerelementcode an einen Dienst.
Syntax
BOOL ControlServiceExA(
[in] SC_HANDLE hService,
[in] DWORD dwControl,
[in] DWORD dwInfoLevel,
[in, out] PVOID pControlParams
);
Parameter
[in] hService
Ein Handle für den Dienst. Dieses Handle wird von der OpenService-- oder CreateService--Funktion zurückgegeben. Die für dieses Handle erforderlichen Zugriffs berechtigungen hängen vom angeforderten dwControl Code ab.
[in] dwControl
Dieser Parameter kann einer der folgenden Steuerelementcodes sein.
Dieser Parameter kann auch ein benutzerdefinierter Steuerelementcode sein, wie in der folgenden Tabelle beschrieben.
Steuerelementcode | Bedeutung |
---|---|
|
Der Dienst definiert die Aktion, die dem Steuerelementcode zugeordnet ist. Der hService- Handle muss über das SERVICE_USER_DEFINED_CONTROL Zugriffsrecht verfügen. |
[in] dwInfoLevel
Die Informationsebene für die Parameter des Dienststeuerelements. Dieser Parameter muss auf SERVICE_CONTROL_STATUS_REASON_INFO (1) festgelegt werden.
[in, out] pControlParams
Ein Zeiger auf die Parameter des Dienststeuerelements. Wenn dwInfoLevel- SERVICE_CONTROL_STATUS_REASON_INFO ist, ist dieses Element ein Zeiger auf eine SERVICE_CONTROL_STATUS_REASON_PARAMS Struktur.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.
Wenn die Funktion fehlschlägt, ist der Rückgabewert null. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.
Die folgenden Fehlercodes können vom Dienststeuerungs-Manager festgelegt werden. Andere Fehlercodes können von den Registrierungsfunktionen festgelegt werden, die vom Dienststeuerungs-Manager aufgerufen werden.
Rückgabecode | Beschreibung |
---|---|
|
Das Handle verfügt nicht über das erforderliche Zugriffsrecht. |
|
Der Dienst kann nicht beendet werden, da andere ausgeführte Dienste davon abhängig sind. |
|
Das angegebene Handle wurde nicht mit CreateService oder OpenService-abgerufen, oder der Handle ist nicht mehr gültig. |
|
Der angeforderte Steuerelementcode im dwControl-Parameter ist nicht definiert, oder dwControl- ist SERVICE_CONTROL_STOP, aber die dwReason oder pszComment Member der SERVICE_CONTROL_STATUS_REASON_PARAMS Struktur sind ungültig. |
|
Der angeforderte Steuerelementcode ist ungültig oder für den Dienst nicht akzeptabel. |
|
Der angeforderte Steuerelementcode kann nicht an den Dienst gesendet werden, da der Dienststatus SERVICE_STOPPED, SERVICE_START_PENDING oder SERVICE_STOP_PENDING ist. |
|
Der Dienst wurde nicht gestartet. |
|
Der Prozess für den Dienst wurde gestartet, aber er hat nicht StartServiceCtrlDispatcheraufgerufen, oder der Thread, der StartServiceCtrlDispatcher aufgerufen wurde, kann in einer Steuerelementhandlerfunktion blockiert werden. |
|
Das System wird heruntergefahren. |
Bemerkungen
Die ControlServiceEx--Funktion fordert den Service Control Manager (SCM) auf, den angeforderten Steuerelementcode an den Dienst zu senden. Der SCM sendet den Code, wenn der Dienst angegeben hat, dass er den Code akzeptiert, und befindet sich in einem Zustand, in dem ein Steuerelementcode an ihn gesendet werden kann.
SCM verarbeitet Dienststeuerungsbenachrichtigungen auf serielle Weise – es wartet, bis ein Dienst die Verarbeitung einer Dienststeuerungsbenachrichtigung abgeschlossen hat, bevor die nächste gesendet wird. Aus diesem Grund wird ein Aufruf von ControlServiceEx 30 Sekunden blockiert, wenn ein Dienst beschäftigt ist, um einen Steuerelementcode zu verarbeiten. Wenn der beschäftigt-Dienst nach Ablauf des Timeouts immer noch nicht von der Handlerfunktion zurückgegeben wurde, schlägt ControlServiceEx- mit ERROR_SERVICE_REQUEST_TIMEOUT fehl.
Zum Beenden und Starten eines Diensts ist ein Sicherheitsdeskriptor erforderlich, mit dem Sie dies tun können. Der Standardmäßige Sicherheitsdeskriptor ermöglicht das LocalSystem-Kontound Mitglieder der Gruppen "Administratoren" und "Power Users", dienste zu beenden und zu starten. Informationen zum Ändern der Sicherheitsbeschreibung eines Diensts finden Sie unter Ändern der DACL für einen Dienst.
Die QueryServiceStatusEx--Funktion gibt eine SERVICE_STATUS_PROCESS Struktur zurück, deren dwCurrentState und dwControlsAccepted-Member den aktuellen Zustand und die von einem ausgeführten Dienst akzeptierten Steuerelemente angeben. Alle ausgeführten Dienste akzeptieren standardmäßig den SERVICE_CONTROL_INTERROGATE Steuerelementcode. Treiber akzeptieren keine anderen Steuercodes als SERVICE_CONTROL_STOP und SERVICE_CONTROL_INTERROGATE. Jeder Dienst gibt die anderen Steuerelementcodes an, die er akzeptiert, wenn er den SetServiceStatus Funktion aufruft, um den Status zu melden. Ein Dienst sollte diese Codes immer akzeptieren, wenn er ausgeführt wird, unabhängig davon, was er tut.
Die folgende Tabelle zeigt die Aktion des SCM in jedem der möglichen Dienstzustände.
Dienststatus | Aufhören | Andere Steuerelemente |
---|---|---|
ANGEHALTEN | (c) | (c) |
STOP_PENDING | b) | b) |
START_PENDING | a) | b) |
AUSGEFÜHRTE | a) | a) |
CONTINUE_PENDING | a) | a) |
PAUSE_PENDING | a) | a) |
PAUSIERT | a) | a) |
- a)
- Wenn der Dienst diesen Steuercode akzeptiert, senden Sie die Anforderung an den Dienst; andernfalls gibt ControlServiceEx null zurück und GetLastErrorERROR_INVALID_SERVICE_CONTROLzurück.
- b)
- Der Dienst befindet sich nicht in einem Zustand, in dem ein Steuerelement an das Steuerelement gesendet werden kann, sodass ControlServiceEx null zurückgibt und GetLastError-ERROR_SERVICE_CANNOT_ACCEPT_CTRLzurückgibt.
- (c)
- Der Dienst ist nicht aktiv, sodass ControlServiceEx Null zurückgibt und GetLastErrorERROR_SERVICE_NOT_ACTIVEzurückgibt.
Anmerkung
Der winsvc.h-Header definiert ControlServiceEx als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows Vista [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows Server 2008 [Nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | winsvc.h (enthalten Windows.h) |
Library | Advapi32.lib |
DLL- | Advapi32.dll |