サービスでのイベントの受信
コンソール アプリケーションであるサービスは、ユーザーがログオフしたときに通知を受け取る コンソール コントロール ハンドラー を登録できます。 ただし、対話型ユーザーがログオンしたときに送信されるコンソール イベントはありません。 ユーザーがログオンしたときに通知を受信する方法については、「 Winlogon 通知パッケージの作成」を参照してください。
システムは、デバイス変更イベントをすべてのサービスにブロードキャストします。 これらのイベントは、ウィンドウ プロシージャまたはそのサービス 制御ハンドラー内のサービスによって受信できます。 サービスで受信するイベントを指定するには、 RegisterDeviceNotification 関数を使用します。
プラグ アンド プレイデバイス イベントは、できるだけ早く処理してください。 そうしないと、システムが応答しなくなる可能性があります。 イベント ハンドラーが実行をブロックする可能性がある操作 (I/O など) を実行する場合は、別のスレッドを起動して操作を非同期的に実行することをお勧めします。
サービスが RegisterDeviceNotification を呼び出すと、サービスはウィンドウ ハンドルまたはサービス状態ハンドルも指定します。 サービスでウィンドウ ハンドルが指定されている場合、ウィンドウ プロシージャは通知イベントを受け取ります。 サービスがサービス状態ハンドルを指定した場合、そのサービス制御ハンドラーは通知イベントを受け取ります。 詳細については、「 HandlerEx」を参照してください。
RegisterDeviceNotification によって返されるデバイス通知ハンドルは、必要なくなったときに UnregisterDeviceNotification 関数を呼び出して閉じる必要があります。