SERVICE_STATUS-Struktur (winsvc.h)
Enthält status Informationen für einen Dienst. Die Funktionen ControlService, EnumDependentServices, EnumServicesStatus und QueryServiceStatus verwenden diese Struktur. Ein Dienst verwendet diese Struktur in der SetServiceStatus-Funktion, um seinen aktuellen status an den Dienststeuerungs-Manager zu melden.
Syntax
typedef struct _SERVICE_STATUS {
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;
Member
dwServiceType
Der Diensttyp. Dieser Member kann einer der folgenden Werte sein.
Wenn der Diensttyp entweder SERVICE_WIN32_OWN_PROCESS oder SERVICE_WIN32_SHARE_PROCESS ist und der Dienst im Kontext des LocalSystem-Kontos ausgeführt wird, kann auch der folgende Typ angegeben werden.
Wert | Bedeutung |
---|---|
|
Der Dienst kann mit dem Desktop interagieren.
Weitere Informationen finden Sie unter Interaktive Dienste. |
dwCurrentState
Der aktuelle Status des Diensts. Dieser Member kann einer der folgenden Werte sein.
dwControlsAccepted
Die Steuerelementcodes, die der Dienst akzeptiert und in seiner Handlerfunktion verarbeitet (siehe Handler und HandlerEx). Ein Benutzeroberflächenprozess kann einen Dienst steuern, indem er einen Steuerungsbefehl in der ControlService - oder ControlServiceEx-Funktion angibt . Standardmäßig akzeptieren alle Dienste den SERVICE_CONTROL_INTERROGATE Wert.
Um den SERVICE_CONTROL_DEVICEEVENT-Wert zu akzeptieren, muss sich der Dienst registrieren, um Geräteereignisse mithilfe der RegisterDeviceNotification-Funktion zu empfangen.
Im Folgenden sind die Steuercodes aufgeführt.
Steuerungscode | Bedeutung |
---|---|
|
Der Dienst ist eine Netzwerkkomponente, die Änderungen in seiner Bindung akzeptieren kann, ohne beendet und neu gestartet zu werden.
Mit diesem Steuerelementcode kann der Dienst SERVICE_CONTROL_NETBINDADD-, SERVICE_CONTROL_NETBINDREMOVE-, SERVICE_CONTROL_NETBINDENABLE- und SERVICE_CONTROL_NETBINDDISABLE-Benachrichtigungen empfangen. |
|
Der Dienst kann seine Startparameter erneut lesen, ohne beendet und neu gestartet zu werden.
Mit diesem Steuerelementcode kann der Dienst SERVICE_CONTROL_PARAMCHANGE Benachrichtigungen empfangen. |
|
Der Dienst kann angehalten und fortgesetzt werden.
Mit diesem Steuerelementcode kann der Dienst SERVICE_CONTROL_PAUSE und SERVICE_CONTROL_CONTINUE Benachrichtigungen empfangen. |
|
Der Dienst kann Vorabaufgaben ausführen.
Mit diesem Steuerelementcode kann der Dienst SERVICE_CONTROL_PRESHUTDOWN Benachrichtigungen empfangen. Beachten Sie, dass ControlService und ControlServiceEx diese Benachrichtigung nicht senden können. nur das System kann sie senden. Windows Server 2003 und Windows XP: Dieser Wert wird nicht unterstützt. |
|
Der Dienst wird benachrichtigt, wenn das System heruntergefahren wird.
Mit diesem Steuerelementcode kann der Dienst SERVICE_CONTROL_SHUTDOWN Benachrichtigungen empfangen. Beachten Sie, dass ControlService und ControlServiceEx diese Benachrichtigung nicht senden können. nur das System kann sie senden. |
|
Der Dienst kann beendet werden.
Mit diesem Steuerelementcode kann der Dienst SERVICE_CONTROL_STOP Benachrichtigungen empfangen. |
Dieses Member kann auch die folgenden erweiterten Steuerelementcodes enthalten, die nur von HandlerEx unterstützt werden. (Beachten Sie, dass diese Steuercodes nicht von ControlService oder ControlServiceEx gesendet werden können.)
dwWin32ExitCode
Der Fehlercode, den der Dienst verwendet, um einen Fehler zu melden, der beim Starten oder Beenden auftritt. Um einen dienstspezifischen Fehlercode zurückzugeben, muss der Dienst diesen Wert auf ERROR_SERVICE_SPECIFIC_ERROR festlegen, um anzugeben, dass das dwServiceSpecificExitCode-Element den Fehlercode enthält. Der Dienst sollte diesen Wert auf NO_ERROR festlegen, wenn er ausgeführt wird und bei normaler Beendigung.
dwServiceSpecificExitCode
Ein dienstspezifischer Fehlercode, den der Dienst zurückgibt, wenn ein Fehler auftritt, während der Dienst gestartet oder beendet wird. Dieser Wert wird ignoriert, es sei denn, der dwWin32ExitCode-Member ist auf ERROR_SERVICE_SPECIFIC_ERROR festgelegt.
dwCheckPoint
Der Prüfpunktwert, den der Dienst in regelmäßigen Abständen erhöht, um seinen Fortschritt während eines langen Start-, Stopp-, Pausen- oder Fortsetzungsvorgangs zu melden. Beispielsweise sollte der Dienst diesen Wert erhöhen, da er beim Starten jeden Schritt seiner Initialisierung abgeschlossen hat. Das Benutzeroberflächenprogramm, das den Vorgang für den Dienst aufgerufen hat, verwendet diesen Wert, um den Fortschritt des Diensts während eines langen Vorgangs nachzuverfolgen. Dieser Wert ist ungültig und sollte null sein, wenn für den Dienst kein Start-, Stopp-, Pausen- oder Fortsetzungsvorgang aussteht.
dwWaitHint
Die geschätzte Zeit, die für einen ausstehenden Start-, Stopp-, Pausen- oder Fortsetzungsvorgang in Millisekunden erforderlich ist. Bevor die angegebene Zeit verstrichen ist, sollte der Dienst den nächsten Aufruf der SetServiceStatus-Funktion mit einem inkrementierten dwCheckPoint-Wert oder einer Änderung in dwCurrentState durchführen. Wenn die von dwWaitHint angegebene Zeit verstrichen ist und dwCheckPoint nicht inkrementiert wurde oder dwCurrentState sich nicht geändert hat, kann der Dienststeuerungs-Manager oder das Dienststeuerungsprogramm davon ausgehen, dass ein Fehler aufgetreten ist und der Dienst beendet werden sollte. Wenn der Dienst jedoch einen Prozess mit anderen Diensten teilt, kann der Dienststeuerungs-Manager die Dienstanwendung nicht beenden, da er auch die anderen Dienste beenden müsste, die den Prozess gemeinsam nutzen.
Anforderungen
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Kopfzeile | winsvc.h (einschließen von Windows.h) |