SubscribeServiceChangeNotifications 関数
コールバック関数を使用してサービス状態変更通知をサブスクライブします。
構文
DWORD WINAPI SubscribeServiceChangeNotifications(
_In_ SC_HANDLE hService,
_In_ SC_EVENT_TYPE eEventType,
_In_ PSC_NOTIFICATION_CALLBACK pCallback,
_In_opt_ PVOID pCallbackContext,
_Out_ PSC_NOTIFICATION_REGISTRATION *pSubscription
);
パラメーター
-
hService [in]
-
サービスへのハンドル、または変更を監視するサービス コントロール マネージャー (SCM) へのハンドル。
サービスへのハンドルは 、OpenService 関数と CreateService 関数によって返され、 SERVICE_QUERY_STATUS アクセス権が必要です。 サービス コントロール マネージャーへのハンドルは OpenSCManager 関数によって返され、 SC_MANAGER_ENUMERATE_SERVICE アクセス権が必要です。
-
eEventType [in]
-
報告する必要がある状態変更の種類を指定します。 このパラメーターは、 SC_EVENT_TYPEで指定された値のいずれかに設定されます。 この関数の動作は、次のようにイベントの種類によって異なります。
値 説明 - SC_EVENT_DATABASE_CHANGE
- 0
サービスが追加または削除されました。 hService パラメーターは、SCM へのハンドルである必要があります。 - SC_EVENT_PROPERTY_CHANGE
- 1
1 つ以上のサービス プロパティが更新されました。 hService パラメーターは、サービスへのハンドルである必要があります。 - SC_EVENT_STATUS_CHANGE
- 2
サービスの状態が変更されました。 hService パラメーターは、サービスへのハンドルである必要があります。 -
pCallback [in]
-
コールバック関数を指定します。 コールバックは、 SC_NOTIFICATION_CALLBACKの型を持つものとして定義する必要があります。 詳細については、「解説」を参照してください。
-
pCallbackContext [in, optional]
-
この通知コールバックのコンテキストを表すポインター。
-
pSubscription [out]
-
通知コールバックの登録に起因するサブスクリプションへのポインターを返します。 呼び出し元は、 UnsubscribeServiceChangeNotifications を呼び出して通知の受信を停止する必要があります。
戻り値
関数が成功した場合、戻り値は ERROR_SUCCESS。
関数が失敗した場合、戻り値は システム エラー コードの 1 つです。
解説
コールバック関数は次のように宣言されます。
typedef VOID CALLBACK SC_NOTIFICATION_CALLBACK(
_In_ DWORD dwNotify,
_In_ PVOID pCallbackContext
);
typedef SC_NOTIFICATION_CALLBACK* PSC_NOTIFICATION_CALLBACK;
コールバック関数は、呼び出し元によって提供されるコンテキストへのポインターを受け取ります。 コールバックは、サービス状態変更イベントの結果として呼び出されます。 コールバックが呼び出されると、サービス状態の種類が変化することを示す SERVICE_NOTIFY_XXX 値のビットマスクが提供されます。 有効な SERVICE_NOTIFY_XXX 値の代わりにコールバックにゼロが指定されている場合、アプリケーションは何が変更されたかを確認する必要があります。
コールバック関数は、実行をブロックすることはできません。 コールバック関数の実行に時間がかかると予想される場合は、作業項目をスレッド プール内のスレッドにキューに入れて、コールバック関数で実行する作業を別のスレッドにオフロードします。 コールバック関数に時間がかかる作業には、ファイル I/O の実行、イベントの待機、外部リモート プロシージャ呼び出しなどがあります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows 8 [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows Server 2012 [デスクトップ アプリのみ] |
Header |
|
[DLL] |
|