NotifyServiceStatusChangeA 関数 (winsvc.h)
指定したサービスが作成または削除されたとき、またはその状態が変更されたときに、アプリケーションが通知を受信できるようにします。
構文
DWORD NotifyServiceStatusChangeA(
[in] SC_HANDLE hService,
[in] DWORD dwNotifyMask,
[in] PSERVICE_NOTIFYA pNotifyBuffer
);
パラメーター
[in] hService
サービスまたはサービス コントロール マネージャーへのハンドル。 サービスへのハンドルは、
サービスごとに未処理の通知要求は 1 つだけ存在できます。
[in] dwNotifyMask
報告する必要がある状態の種類が変更されます。 このパラメーターには、次の値のうち 1 つ以上を指定できます。
価値 | 意味 |
---|---|
|
サービスが作成されたときに報告します。
hService パラメーターは、SCM へのハンドルである必要があります。 |
|
サービスを続行しようとしているときに報告します。
hService パラメーターは、サービスへのハンドルである必要があります。 |
|
アプリケーションが DeleteService 関数の呼び出しでサービスを指定した場合に報告します。 アプリケーションは、サービスを削除できるように、サービスへのハンドルを閉じる必要があります。
hService パラメーターは、サービスへのハンドルである必要があります。 |
|
サービスが削除されたことを報告します。 アプリケーションがサービスに対して開いているハンドルを持っている場合、アプリケーションはこの通知を受け取ることができません。
hService パラメーターは、SCM へのハンドルである必要があります。 |
|
サービスが一時停止中であることを報告します。
hService パラメーターは、サービスへのハンドルである必要があります。 |
|
サービスが一時停止したときに報告します。
hService パラメーターは、サービスへのハンドルである必要があります。 |
|
サービスの実行中にレポートします。
hService パラメーターは、サービスへのハンドルである必要があります。 |
|
サービスの開始時にレポートします。
hService パラメーターは、サービスへのハンドルである必要があります。 |
|
サービスが停止しているときに報告します。
hService パラメーターは、サービスへのハンドルである必要があります。 |
|
サービスが停止したときに報告します。
hService パラメーターは、サービスへのハンドルである必要があります。 |
[in] pNotifyBuffer
コールバック関数へのポインターなど、通知情報を含む SERVICE_NOTIFY 構造体へのポインター。 コールバック関数が呼び出されるか、呼び出し元のスレッドが通知要求をキャンセルするまで、この構造体は有効なままである必要があります。
最初の呼び出しのコールバック関数がバッファーで終了するか、最初の通知要求が取り消されるまで、同じバッファー パラメーターを使用して NotifyServiceStatusChange を
Windows Vista: コールバック関数のアドレスは、読み込まれたモジュールのアドレス範囲内にある必要があります。 そのため、コールバック関数は、実行時に生成されるコード (JIT コンパイラによって生成されたマネージド コードなど) または実行時に展開されるネイティブ コードにすることはできません。 この制限は、Windows Server 2008 および Windows Vista sp1 で削除されました。
戻り値
関数が成功した場合、戻り値はERROR_SUCCESS。 サービスが削除対象としてマークされている場合、戻り値はERROR_SERVICE_MARKED_FOR_DELETEされ、サービスへのハンドルを閉じる必要があります。 サービス通知がシステム状態より遅すぎる場合、関数はERROR_SERVICE_NOTIFY_CLIENT_LAGGINGを返します。 この場合、クライアントは SCM へのハンドルを閉じ、新しいハンドルを開き、この関数をもう一度呼び出す必要があります。
関数が失敗した場合、戻り値は
備考
NotifyServiceStatusChange 関数を使用して、サービス アプリケーションに関する通知を受信できます。 ドライバー サービスに関する通知を受信するために使用することはできません。
サービスの状態が変わると、システムは、呼び出し元のスレッドにキューに入れた非同期プロシージャ呼び出し (APC) として、指定されたコールバック関数を呼び出します。 呼び出し元のスレッドは、通知を受信するために、(たとえば、SleepEx 関数を呼び出すことによって) 警告可能な待機を入力する必要があります。 詳細については、「非同期プロシージャ 呼び出し」を参照してください。
NotifyServiceStatusChange が呼び出されたときに、サービスが要求された状態
NotifyServiceStatusChange 関数は、呼び出し元のスレッドで OpenThread 関数をTHREAD_SET_CONTEXTアクセス権で呼び出します。 呼び出し元のスレッドにこのアクセス権がない場合、NotifyServiceStatusChange は失敗します。 呼び出し元のスレッドが別のユーザーを偽装している場合は、コンテキストを設定するための十分なアクセス許可がない可能性があります。
待機を実行するスレッドから NotifyServiceStatusChange
コールバック関数が呼び出された後、呼び出し元は NotifyServiceStatusChange
未処理の通知を取り消すには、CloseServiceHandle 関数を使用してサービス ハンドルを閉じます。 CloseServiceHandle
手記
winsvc.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして NotifyServiceStatusChange を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2008 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winsvc.h (Windows.h を含む) |
ライブラリ | Advapi32.lib |
DLL | Advapi32.dll |
関連項目
SubscribeServiceChangeNotifications の