PnP 通知の概要
PnP マネージャーは、特定のイベントが特定のデバイスまたはシステムで一般的に発生したときに、ドライバーとアプリケーションが通知を受けるメカニズムを提供します。 ドライバーは、次のカテゴリのイベントの通知に対して登録できます。
EventCategoryDeviceInterfaceChange
ドライバーがデバイス インターフェイス上のイベントのこのカテゴリに登録すると、PnP マネージャーは、次のイベントをドライバーに通知します。
GUID_DEVICE_INTERFACE_ARRIVAL
指定したクラスのデバイス インターフェイスが有効になっていることを示します。 たとえば、ユーザーがコンピューターに新しいディスクを追加し、ボリューム マネージャーが新しいボリューム (クラス "volume" のデバイス インターフェイス) を有効にします。GUID_DEVICE_INTERFACE_REMOVAL
指定したクラスのデバイス インターフェイスが無効になっていることを示します。デバイス インターフェイスの詳細については、IoRegisterDeviceInterface および関連ルーチンを参照してください。
EventCategoryTargetDeviceChange
ドライバーがデバイス上のイベントのこのカテゴリに登録すると、PnP マネージャーは、そのデバイスで次のイベントが発生したときにドライバーに通知します。
GUID_TARGET_DEVICE_QUERY_REMOVE
PnP マネージャーがデバイスのドライバーを削除しようとしていることを示します。 このイベントを引き起こすアクションとして、ユーザーが指定したデバイスをコンピューターから取り出すように要求した、ユーザーがデバイスのドライバー更新要求を発行したなど、いくつかのアクションが考えられます。 この通知は、デバイスのドライバーに対して、間近の取り出し操作を承認または拒否するよう要求します。GUID_TARGET_DEVICE_REMOVE_COMPLETE
指定したデバイスがコンピューターから取り出されたか、ユーザーがデバイスのドライバーを変更していることを示します。GUID_TARGET_DEVICE_REMOVE_CANCELLED
指定したデバイスで間近の取り出し操作が取り消されたことを示します。GUID_XXX (カスタム イベント)
指定したデバイスでカスタム イベントが発生したことを示します。ドライバー ライターは、デバイスのカスタム イベントを定義できます。 ドライバー (または別の関連コンポーネント) がカスタム イベントが発生したことを PnP マネージャーに通知すると、PnP マネージャーは、デバイス上のターゲット デバイス変更通知に登録されたすべてのコンポーネントに通知します。
インターフェイスの "パッシブ" な関心事項と見なすことができるデバイス インターフェイス変更の登録とは異なり、ターゲット デバイス変更の登録は、デバイスの "アクティブ" な関心事項を示します。
EventCategoryHardwareProfileChange
このカテゴリには、次のイベントが含まれます。
GUID_HWPROFILE_QUERY_CHANGE
ユーザーがコンピューターのハードウェア プロファイルの変更を要求したことを示します。 PnP マネージャーは、この通知を使用して、システム操作を中断せずにハードウェア プロファイルを変更できるかどうかを登録済みコンポーネントに確認します。 登録済みコンポーネントは通常、これらのクエリ要求に成功します。GUID_HWPROFILE_CHANGE_COMPLETE
コンピューターのハードウェア プロファイルが変更されたことを示します。 ドライバーがプロファイル固有の設定を維持している場合、このようなドライバーは、ハードウェア プロファイル変更後にこれらの設定を更新する必要があります。GUID_HWPROFILE_CHANGE_CANCELLED
間近のハードウェア プロファイル変更が取り消されたことを示します。
PnP 通知は、カーネル モード コンポーネントに対して次のように機能します。
ドライバーは、IoRegisterPlugPlayNotification を呼び出して、イベントのカテゴリに関する通知を登録します。
PnP 通知コールバック ルーチンは、ドライバーが明示的に登録を削除するまで登録された状態を維持します。
PnP マネージャーは、登録されているカテゴリのイベントが発生したときに、ドライバーのコールバック ルーチンを呼び出します。
ドライバーは、IoUnregisterPlugPlayNotification を呼び出して、コールバック登録を削除します。
ドライバーは、同期イベントを生成したり、クローズの処理中に非同期イベントが発生するのを待機することはできません。
PnP 通知の詳細については、次のセクションを参照してください。