次の方法で共有


CM_Register_Notification関数 (cfgmgr32.h)

CM_Register_Notification関数は、指定した型の PnP イベントが発生したときに呼び出されるアプリケーション コールバック ルーチンを登録します。

コードが Windows 7 以前のバージョンの Windows を対象とする場合は、CM_Register_Notificationの代わりに RegisterDeviceNotification を使用します。 カーネル モードの呼び出し元は、代わりに IoRegisterPlugPlayNotification を使用する必要があります。

構文

CMAPI CONFIGRET CM_Register_Notification(
  [in]           PCM_NOTIFY_FILTER   pFilter,
  [in, optional] PVOID               pContext,
  [in]           PCM_NOTIFY_CALLBACK pCallback,
  [out]          PHCMNOTIFICATION    pNotifyContext
);

パラメーター

[in] pFilter

CM_NOTIFY_FILTER構造体へのポインター。

[in, optional] pContext

pCallback のコールバック ルーチンに渡されるコンテキストを含む呼び出し元によって割り当てられたバッファーへのポインター。

[in] pCallback

指定した PnP イベントが発生したときに呼び出されるルーチンへのポインター。 コールバック関数のプロトタイプについては、「 解説 」セクションを参照してください。

コールバック ルーチンの Action パラメーターは、 CM_NOTIFY_ACTION 列挙の値になります。

通知を受信すると、コールバックが通知を調べる方法は、コールバック ルーチンの EventData パラメーターの FilterType メンバーによって異なります。

CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE

コールバックは EventData-u.DeviceInterface> を調べる必要があります。

CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE

コールバックは EventData-u.DeviceHandle> を調べる必要があります。

CM_NOTIFY_FILTER_TYPE_DEVICEINSTANCE

コールバックは EventData-u.DeviceInstance> を調べる必要があります。

[out] pNotifyContext

登録呼び出しに対応する HCMNOTIFICATION ハンドルを受け取るポインター。

戻り値

操作が成功した場合、関数はCR_SUCCESSを返します。 それ以外の場合は、 Cfgmgr32.h で定義されているCR_プレフィックス付きのエラー コードのいずれかを返します。

注釈

プラグ アンド プレイデバイス イベントは、できるだけ早く処理してください。 イベント ハンドラーが実行をブロックする可能性がある操作 (I/O など) を実行する場合は、別のスレッドを起動して操作を非同期的に実行することをお勧めします。

CM_Register_Notification関数は、既存のデバイス インターフェイスの通知を提供しません。 既存のインターフェイスを取得するには、最初 に CM_Register_Notification を呼び出し、次 に CM_Get_Device_Interface_List を呼び出します。 ドライバーが CM_Register_Notificationを呼び出した後で、ドライバーが CM_Get_Device_Interface_Listを呼び出す前にインターフェイスが有効になっている場合、ドライバーはインターフェイス到着の通知を受け取り、インターフェイスは CM_Get_Device_Interface_List によって返されるデバイス インターフェイス インスタンスの一覧にも表示されます。

CM_Register_Notificationによって返される HCMNOTIFICATION ハンドルは、不要になったCM_Unregister_Notification関数を呼び出して閉じる必要があります。

コールバック ルーチンは、次の関数プロトタイプを使用します。

typedef __callback DWORD (CALLBACK *PCM_NOTIFY_CALLBACK)(
    _In_ HCMNOTIFICATION       hNotify,
    _In_opt_ PVOID             Context,
    _In_ CM_NOTIFY_ACTION      Action,
    _In_reads_bytes_(EventDataSize) PCM_NOTIFY_EVENT_DATA EventData,
    _In_ DWORD                 EventDataSize
    );

CM_NOTIFY_ACTION_DEVICEQUERYREMOVE通知に応答する場合、PCM_NOTIFY_CALLBACKコールバックは必要に応じて、ERROR_SUCCESSまたはERROR_CANCELLEDを返す必要があります。 それ以外の場合、コールバックはERROR_SUCCESSを返す必要があります。 コールバックは、他の値を返さないでください。 その他のアクションの説明については、 CM_NOTIFY_ACTION ドキュメントを参照してください。 EventData パラメーターでこのコールバックが受け取る構造体については、「CM_NOTIFY_EVENT_DATA」も参照してください。

例については、「 デバイス インターフェイスの到着とデバイスの削除の通知の登録」を参照してください。

要件

要件
サポートされている最小のクライアント Microsoft Windows 8 以降のバージョンの Windows で使用できます。
対象プラットフォーム ユニバーサル
Header cfgmgr32.h (Cfgmgr32.h を含む)
Library Cfgmgr32.lib;Windows 10の OneCoreUAP.lib
[DLL] CfgMgr32.dll

こちらもご覧ください

CM_NOTIFY_ACTION

CM_NOTIFY_FILTER

CM_Unregister_Notification

RegisterDeviceNotification

デバイス インターフェイスの到着とデバイスの削除の通知の登録

デバイス インターフェイスの使用