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.

Wert Bedeutung
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
Der Dienst ist ein Dateisystemtreiber.
SERVICE_KERNEL_DRIVER
0x00000001
Der Dienst ist ein Gerätetreiber.
SERVICE_WIN32_OWN_PROCESS
0x00000010
Der Dienst wird in einem eigenen Prozess ausgeführt.
SERVICE_WIN32_SHARE_PROCESS
0x00000020
Der Dienst teilt einen Prozess mit anderen Diensten.
SERVICE_USER_OWN_PROCESS
0x00000050
Der Dienst wird in einem eigenen Prozess unter dem angemeldeten Benutzerkonto ausgeführt.
SERVICE_USER_SHARE_PROCESS
0x00000060
Der Dienst teilt einen Prozess mit einem oder mehreren anderen Diensten, die unter dem angemeldeten Benutzerkonto ausgeführt werden.
 

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
SERVICE_INTERACTIVE_PROCESS
0x00000100
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.

Wert Bedeutung
SERVICE_CONTINUE_PENDING
0x00000005
Die Fortsetzung des Dienstes steht aus.
SERVICE_PAUSE_PENDING
0x00000006
Das Anhalten des Dienstes steht aus.
SERVICE_PAUSED
0x00000007
Der Dienst wurde angehalten.
SERVICE_RUNNING
0x00000004
Der Dienst wird ausgeführt.
SERVICE_START_PENDING
0x00000002
Der Dienst wird gestartet.
SERVICE_STOP_PENDING
0x00000003
Der Dienst wird beendet.
SERVICE_STOPPED
0x00000001
Der Dienst wird nicht ausgeführt.

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
SERVICE_ACCEPT_NETBINDCHANGE
0x00000010
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.

SERVICE_ACCEPT_PARAMCHANGE
0x00000008
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.

SERVICE_ACCEPT_PAUSE_CONTINUE
0x00000002
Der Dienst kann angehalten und fortgesetzt werden.

Mit diesem Steuerelementcode kann der Dienst SERVICE_CONTROL_PAUSE und SERVICE_CONTROL_CONTINUE Benachrichtigungen empfangen.

SERVICE_ACCEPT_PRESHUTDOWN
0x00000100
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.

SERVICE_ACCEPT_SHUTDOWN
0x00000004
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.

SERVICE_ACCEPT_STOP
0x00000001
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.)

Steuerungscode Bedeutung
SERVICE_ACCEPT_HARDWAREPROFILECHANGE
0x00000020
Der Dienst wird benachrichtigt, wenn sich das Hardwareprofil des Computers geändert hat. Dadurch kann das System SERVICE_CONTROL_HARDWAREPROFILECHANGE Benachrichtigungen an den Dienst senden.
SERVICE_ACCEPT_POWEREVENT
0x00000040
Der Dienst wird benachrichtigt, wenn sich die Stromversorgung des Computers status geändert hat. Dadurch kann das System SERVICE_CONTROL_POWEREVENT Benachrichtigungen an den Dienst senden.
SERVICE_ACCEPT_SESSIONCHANGE
0x00000080
Der Dienst wird benachrichtigt, wenn sich die Sitzung des Computers status geändert hat. Dadurch kann das System SERVICE_CONTROL_SESSIONCHANGE Benachrichtigungen an den Dienst senden.
SERVICE_ACCEPT_TIMECHANGE
0x00000200
Der Dienst wird benachrichtigt, wenn sich die Systemzeit geändert hat. Dadurch kann das System SERVICE_CONTROL_TIMECHANGE Benachrichtigungen an den Dienst senden.

Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Steuerelementcode wird nicht unterstützt.

SERVICE_ACCEPT_TRIGGEREVENT
0x00000400
Der Dienst wird benachrichtigt, wenn ein Ereignis auftritt, für das sich der Dienst registriert hat. Dadurch kann das System SERVICE_CONTROL_TRIGGEREVENT Benachrichtigungen an den Dienst senden.

Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Steuerelementcode wird nicht unterstützt.

SERVICE_ACCEPT_USERMODEREBOOT
0x00000800
Die Dienste werden benachrichtigt, wenn der Benutzer einen Neustart initiiert.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Steuerelementcode wird nicht unterstützt.

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)

Weitere Informationen

ControlService

ControlServiceEx

EnumDependentServices

EnumServicesStatus

QueryServiceStatus

SetServiceStatus