ControlServiceExW

サービスに制御コードを送信する。(ControlServiceExW)

ControlServiceExW hService, dwControl, dwInfoLevel, pControlParams

hService : [intptr] サービスへのハンドル。このハンドルは OpenService または CreateService 関数が返す。このハンドルに必要なアクセス権は要求する dwControl コードに依存する。
dwControl : [int] このパラメータには以下の制御コードのいずれかを指定できる。
dwInfoLevel : [int] サービス制御パラメータの情報レベル。このパラメータは SERVICE_CONTROL_STATUS_REASON_INFO (1) に設定する必要がある。
pControlParams : [intptr] サービス制御パラメータへのポインタ。dwInfoLevel が SERVICE_CONTROL_STATUS_REASON_INFO の場合、このメンバは SERVICE_CONTROL_STATUS_REASON_PARAMS 構造体へのポインタである。

(プラグイン / モジュール : advapi32.dll)

解説

サービスに制御コードを送信する。(ControlServiceExW)

[戻り値]
関数が成功した場合、戻り値は 0 以外となる。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
GetLastError
を呼び出す。以下のエラーコードがサービス制御マネージャによって設定される場合がある。そのほかのエラーコードは、サービス制御マネージャが呼び出すレジストリ関数によって設定される場合がある。
(以下省略)

[備考]
ControlServiceEx 関数は、要求された制御コードをサービスに送信するようサービス制御マネージャ (SCM)
に依頼する。SCM は、サービスがそのコードを受け入れると指定しており、制御コードを送信できる状態にある場合にコードを送信する。SCM
はサービス制御通知を直列に処理する。つまり、1
つのサービスが制御通知の処理を完了するまで待ってから次の通知を送信する。このため、いずれかのサービスが制御コードの処理で忙しい場合、ControlServiceEx
の呼び出しは 30
秒間ブロックする。タイムアウト時点で忙しいサービスがハンドラ関数から復帰していない場合、ControlServiceEx は
ERROR_SERVICE_REQUEST_TIMEOUT
で失敗する。サービスを停止したり開始したりするには、それを許可するセキュリティ記述子が必要である。既定のセキュリティ記述子では、LocalSystem
アカウントと Administrators および Power Users
グループのメンバにサービスの停止と開始が許可されている。サービスのセキュリティ記述子を変更するには「Modifying the DACL
for a Service」を参照のこと。QueryServiceStatusEx 関数は、実行中のサービスが受け入れる現在の状態と制御を
dwCurrentState および dwControlsAccepted メンバで示す SERVICE_STATUS_PROCESS
構造体を返す。実行中のすべてのサービスは既定で SERVICE_CONTROL_INTERROGATE 制御コードを受け入れる。ドライバは
SERVICE_CONTROL_STOP および SERVICE_CONTROL_INTERROGATE
以外の制御コードを受け入れない。各サービスは、SetServiceStatus
関数を呼び出して状態を報告する際に、受け入れるその他の制御コードを指定する。サービスは実行中であれば、何をしていてもこれらのコードを常に受け入れるべきである。SCM
が各サービス状態で取るアクションを次の表に示す。
(以下省略)

情報

プラグイン / モジュールadvapi32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の advapi32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_advapi32_gen2.hs