プラットフォーム SDK
Handler
RegisterServiceCtrlHandler 関数と組み合わせて使う、アプリケーション定義の関数です。サービスプログラムは、Handler 関数を特定のサービスアプリケーションの制御ハンドラ関数として使います。この関数へのポインタとして LPHANDLER_FUNCTION 型が定義されています。Handler は、アプリケーション定義の関数名のプレースホルダです。
制御ハンドラ関数 HandlerEx は Handler 関数の改訂版であり、RegisterServiceCtrlHandlerEx 関数と組み合わせて使います。サービスはどちらの制御ハンドラを利用してもかまいませんが、新しい制御ハンドラ関数 HandlerEx はユーザー定義のコンテキストデータと追加の拡張制御コードもサポートしています。
|
VOID WINAPI Handler(
DWORD fdwControl // 要求したい制御コード
); |
パラメータ
- fdwControl
- [入力]要求された制御コードが入ります。この値は、次のいずれかの制御コードになります。
| 制御コード | 意味 |
| SERVICE_CONTROL_STOP | サービスを停止するよう要求します。 |
| SERVICE_CONTROL_PAUSE | サービスを一時停止するよう要求します。 |
| SERVICE_CONTROL_CONTINUE | 一時停止されているサービスを再開するよう要求します。 |
| SERVICE_CONTROL_INTERROGATE | サービスが自らの現在のステータス情報をサービス制御マネージャへ伝えて、情報を即座に更新するよう要求します。 |
| SERVICE_CONTROL_SHUTDOWN | システムをシャットダウン中のため、クリーンアップ作業を行うようサービスに要求します。 詳細については、「解説」を参照してください。 |
| SERVICE_CONTROL_PARAMCHANGE | Windows 2000:サービス固有の起動パラメータが変更されたことをサービスへ通知します。サービスは自らの起動パラメータを再度読み込む必要があります。 サービスには、SERVICE_PAUSE_CONTINUE アクセス権が必要です。 |
| SERVICE_CONTROL_NETBINDADD | Windows 2000:バインドするべき新しいコンポーネントが存在することをネットワークサービスへ通知します。この新しいコンポーネントへこのサービスをバインドする必要があります。 サービスには SERVICE_PAUSE_CONTINUE アクセス権が必要です。 |
| SERVICE_CONTROL_NETBINDREMOVE | Windows 2000:バインドが削除されたコンポーネントが存在することをネットワークサービスへ通知します。サービスは自らのバインド情報を再度読み込み、削除されたコンポーネントをアンバインドする必要があります。 サービスには SERVICE_PAUSE_CONTINUE アクセス権が必要です。 |
| SERVICE_CONTROL_NETBINDENABLE | Windows 2000:使用不能だったバインドが使用可能になったことをネットワークサービスへ通知します。サービスは自らのバインド情報を再度読み込み、新しいバインドを追加する必要があります。 サービスには SERVICE_PAUSE_CONTINUE アクセス権が必要です。 |
| SERVICE_CONTROL_NETBINDDISABLE | Windows 2000:バインドのいずれかが使用不能になったことをネットワークサービスへ通知します。サービスは自らのバインド情報を再度読み込み、使用不能になったバインドを削除する必要があります。 サービスには SERVICE_PAUSE_CONTINUE アクセス権が必要です。 |
この値は、次に示すユーザー定義の制御コードであってもかまいません。
| 制御コード | 意味 |
128~255 の範囲 | サービスは、制御コードに関連付けられる操作を定義します。hService ハンドルには、SERVICE_USER_DEFINED_CONTROL アクセス権が必要です。 |
戻り値
戻り値はありません。
解説
サービスアプリケーションが開始された直後に、そのアプリケーションの ServiceMain 関数は RegisterServiceCtrlHandler 関数を呼び出して、制御の要求を処理するための Handler 関数を指定しなければなりません。
サービスアプリケーションプロセスのメインスレッド内の制御ディスパッチャは、サービス制御マネージャから制御の要求を受け取ると、指定されたサービスに対応する制御ハンドラ関数を呼び出します。制御の要求を処理した後で、制御ハンドラは SetServiceStatus 関数を呼び出して、自らのステータスをサービス制御マネージャへ報告しなければなりません。
SERVICE_CONTROL_SHUTDOWN 制御コードは、シャットダウンの作業中にクリーンアップを必ず終えることができるサービスを使って処理しなければなりません。サービスのシャットダウンに利用できる時間は非常に限られている(約 20 秒)からです。この時間が経過すると、サービスのシャットダウンが完了したかどうかにかかわりなく、システムのシャットダウンが進行するからです。サービスをシャットダウンさせるためにより多くの時間が必要な場合、そのサービスは待機時間のヒントとともに STOP_PENDING ステータスメッセージを送信する必要があります。その結果、サービスコントローラは、サービスのシャットダウンが完了したとシステムへ通知する前に、どれだけの時間待機すればよいのかを把握することができます。たとえば、システムがシャットダウン作業を行っている間はネットワーク接続を確立できないので、サーバーサービスをシャットダウンする必要があります。
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:対応していません
Windows CE:対応していません
ヘッダー:winsvc.h 内で宣言
インポートライブラリ:ユーザー定義
参照
HandlerEx、RegisterServiceCtrlHandler、ServiceMain、SetServiceStatus