ControlServiceExA 関数 (winsvc.h)
コントロール コードをサービスに送信します。
構文
BOOL ControlServiceExA(
[in] SC_HANDLE hService,
[in] DWORD dwControl,
[in] DWORD dwInfoLevel,
[in, out] PVOID pControlParams
);
パラメーター
[in] hService
サービスへのハンドル。 このハンドルは、
[in] dwControl
このパラメーターには、次のいずれかの制御コードを指定できます。
このパラメーターは、次の表に示すように、ユーザー定義のコントロール コードにすることもできます。
コントロール コード | 意味 |
---|---|
|
サービスは、コントロール コードに関連付けられているアクションを定義します。 hService ハンドルには、SERVICE_USER_DEFINED_CONTROLアクセス権が必要です。 |
[in] dwInfoLevel
サービス 制御パラメーターの情報レベル。 このパラメーターは、SERVICE_CONTROL_STATUS_REASON_INFO (1) に設定する必要があります。
[in, out] pControlParams
サービス コントロール パラメーターへのポインター。 dwInfoLevel
戻り値
関数が成功した場合、戻り値は 0 以外です。
関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError
サービス コントロール マネージャーでは、次のエラー コードを設定できます。 その他のエラー コードは、サービス コントロール マネージャーによって呼び出されるレジストリ関数によって設定できます。
リターン コード | 形容 |
---|---|
|
ハンドルに必要なアクセス権がありません。 |
|
実行中の他のサービスがそれに依存しているため、サービスを停止できません。 |
|
指定したハンドルが、 |
|
|
|
要求された制御コードが無効であるか、サービスに対して許容できません。 |
|
サービスの状態がSERVICE_STOPPED、SERVICE_START_PENDING、またはSERVICE_STOP_PENDINGであるため、要求された制御コードをサービスに送信できません。 |
|
サービスが開始されていません。 |
|
サービスのプロセスは開始されましたが、StartServiceCtrlDispatcher |
|
システムがシャットダウン中です。 |
備考
ControlServiceEx 関数は、要求されたコントロール コードをサービスに送信するように Service Control Manager (SCM) に要求します。 SCM は、サービスがコードを受け入れることを指定しており、コントロール コードを送信できる状態にある場合にコードを送信します。
SCM は、サービス制御通知をシリアル形式で処理します。1 つのサービスがサービス 制御通知の処理を完了するまで待機してから、次の通知を送信します。 このため、ControlServiceEx の呼び出し、コントロール コードの処理がビジー状態のサービスがある場合、30 秒間ブロックされます。 タイムアウトの有効期限が切れたときにビジー状態のサービスがハンドラー関数からまだ返されていない場合は、ControlServiceEx
サービスを停止して開始するには、それを可能にするセキュリティ記述子が必要です。 既定のセキュリティ記述子を使用すると、LocalSystem アカウント、および Administrators グループと Power Users グループのメンバーがサービスを停止および開始できます。 サービスのセキュリティ記述子を変更するには、「サービスの DACL の変更」を参照してください。
QueryServiceStatusEx 関数は、dwCurrentState および dwControlsAccepted メンバーが現在の状態を示し、実行中のサービスによって受け入れられるコントロールを持つ SERVICE_STATUS_PROCESS 構造体を返します。 実行中のすべてのサービスは、既定でSERVICE_CONTROL_INTERROGATE制御コードを受け入れます。 ドライバーは、SERVICE_CONTROL_STOPおよびSERVICE_CONTROL_INTERROGATE以外のコントロール コードを受け入れません。 各サービスは、SetServiceStatus 関数を呼び出して状態を報告するときに受け入れる他のコントロール コードを指定します。 サービスは、何を行っていても、実行中にこれらのコードを常に受け入れる必要があります。
次の表に、使用可能な各サービス状態における SCM のアクションを示します。
サービスの状態 | 止める | その他のコントロール |
---|---|---|
停止 | (c) | (c) |
STOP_PENDING | (b) | (b) |
START_PENDING | (a) | (b) |
ランニング | (a) | (a) |
CONTINUE_PENDING | (a) | (a) |
PAUSE_PENDING | (a) | (a) |
一時 停止 | (a) | (a) |
- (a)
-
サービスがこの制御コードを受け入れる場合は、サービスに要求を送信します。それ以外の場合、
ControlServiceEx は 0 を返し、GetLastErrorは ERROR_INVALID_SERVICE_CONTROL を返します。 - (b)
-
サービスはコントロールを送信できる状態ではないため、ControlServiceEx
0 が返され、GetLastError ERROR_SERVICE_CANNOT_ACCEPT_CTRL が返されます。 - (c)
-
サービスがアクティブではないため、
ControlServiceEx は 0 を返し、GetLastErrorは ERROR_SERVICE_NOT_ACTIVE を返します。
手記
winsvc.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして ControlServiceEx を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2008 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winsvc.h (Windows.h を含む) |
ライブラリ | Advapi32.lib |
DLL | Advapi32.dll |
関連項目
CreateService の
SERVICE_CONTROL_STATUS_REASON_PARAMS
SetServiceObjectSecurity の
SetServiceStatus の