RegisterServiceCtrlHandlerW

サービス制御要求を処理する関数を登録する。(Unicode)

RegisterServiceCtrlHandlerW lpServiceName, lpHandlerProc

lpServiceName : [wstr] 呼び出しスレッドが実行するサービスの名前。これは、サービス制御プログラムがサービス作成時に CreateService 関数で指定したサービス名である。
lpHandlerProc : [int] 登録するハンドラ関数へのポインタ。詳細は Handler を参照のこと。

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

解説

サービス制御要求を処理する関数を登録する。(Unicode)

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

[備考]
新しいサービスの ServiceMain 関数は、ただちに RegisterServiceCtrlHandler
関数を呼び出してコントロールディスパッチャに制御ハンドラ関数を登録すべきである。これにより、コントロールディスパッチャはこのサービスに対する制御要求を受け取ったときに指定した関数を呼び出せるようになる。指定可能な制御コードの一覧については
Handler を参照のこと。呼び出し側プロセスのスレッドは、この関数が返すサービスステータスハンドルを使用して、その後の
SetServiceStatus 関数の呼び出しでサービスを識別できる。RegisterServiceCtrlHandler 関数は最初の
SetServiceStatus 呼び出しより前に呼び出す必要がある。これは RegisterServiceCtrlHandler
が呼び出し側で使用するサービスステータスハンドルを返し、他のサービスがこのサービス状態を誤って設定できないようにするためである。さらに、サービスが
SetServiceStatus
関数を通じて受け入れる制御を指定するまでに、制御ハンドラが制御要求を受け取れる状態になっていなければならない。制御ハンドラ関数が制御要求とともに呼び出されたとき、サービスはサービス状態が変化した場合にのみ(停止やシャットダウン制御の処理時など)SetServiceStatus
を呼び出してサービス制御マネージャに状態を報告する必要がある。サービス状態が変化していない場合、サービスはサービス制御マネージャに状態を報告すべきではない。サービスステータスハンドルは閉じる必要はない。

情報

プラグイン / モジュール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