次の方法で共有


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
Winsvcp.h
[DLL]
SecHost.dll

関連項目

CreateService

OpenService

OpenSCManager

UnsubscribeServiceChangeNotifications

QueryServiceDynamicInformation