IoReportTargetDeviceChangeAsynchronous 関数 (wdm.h)
IoReportTargetDeviceChangeAsynchronous ルーチンは、デバイスでカスタム イベントが発生したことを PnP マネージャーに通知します。
構文
NTSTATUS IoReportTargetDeviceChangeAsynchronous(
[in] PDEVICE_OBJECT PhysicalDeviceObject,
[in] PVOID NotificationStructure,
[in, optional] PDEVICE_CHANGE_COMPLETE_CALLBACK Callback,
[in, out] PVOID Context
);
パラメーター
[in] PhysicalDeviceObject
報告されるデバイスの PDO へのポインター。
[in] NotificationStructure
カスタム イベントを記述する呼び出し元が指定した TARGET_DEVICE_CUSTOM_NOTIFICATION 構造体へのポインター。 PnP マネージャーは、イベントの通知に登録されたドライバーにこの構造体を送信します。
PnP マネージャーは浅いコピーを作成し、コピーを使用してドライバーに通知するため、この呼び出し元が指定した構造体は、ルーチンが戻ると解放できます。 不要になると、PnP マネージャーによってコピーが自動的に解放されます。 割り当てプールの要件については、「解説」セクションを参照してください。
NotificationStructure をします。FileObject は NULL する必要があります。 NotificationStructure をします。イベント には、イベントのカスタム GUID が含まれている必要があります。 NotificationStructure の他のフィールドは、カスタム イベントに応じて入力する必要があります。
PnP マネージャーは、NotificationStructureに入力します。fileObjectフィールド、レジストリに通知を送信するときに使用します。
[in, optional] Callback
必要に応じて、このカスタム イベントに登録されたドライバーへの通知が完了した後に PnP マネージャーが呼び出す呼び出し元が指定したルーチンを指します。
コールバック ルーチンの型は次のとおりです。
typedef
VOID
(*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
IN PVOID Context
);
デバイス変更完了コールバック ルーチンは、PnP イベントを生成する同期ルーチンをブロックしたり、呼び出したりしてはなりません。
PnP マネージャーは、IRQL = PASSIVE_LEVEL でデバイス変更完了コールバック ルーチンを呼び出します。
[in, out] Context
必要に応じて、PnP マネージャーが コールバック ルーチンに渡す呼び出し元が指定したコンテキスト構造を指します。 呼び出し元は、非ページ メモリからこの構造体を割り当てる必要があります。
戻り値
リターン コード | 形容 |
---|---|
STATUS_INVALID_DEVICE_REQUEST | 呼び出し元は、GUID_TARGET_DEVICE_QUERY_REMOVEなどのシステム PnP イベントを指定しました。 このルーチンは、カスタム イベント専用です。 |
備考
IoReportTargetDeviceChangeAsynchronous ルーチンが、デバイスでカスタム イベントが発生したことを PnP マネージャーに通知すると、ルーチンはすぐに戻ります。PnP マネージャーがデバイス上の通知に登録されているドライバーにイベントの通知を送信する間は待機しません。 このルーチンを使用して、GUID_TARGET_DEVICE_REMOVE_COMPLETEなどのシステム PnP イベントを報告しないでください。
カスタム イベントが発生したことを PnP マネージャーに通知するために、IoReportTargetDeviceChangeAsynchronous カスタム デバイス イベント呼び出しを定義するドライバー。 カスタム通知は、ボリューム ラベルの変更などのイベントに使用できます。
カスタム通知構造体には、独自の GUID を持つドライバー定義イベントが含まれています。 ドライバー ライターは、(Microsoft Windows SDK に含まれている) Uuidgen.exe または Guidgen.exe を使用して GUID を生成できます。
イベント、IRP_MN_REMOVE_DEVICE、または IRP_MN_SURPRISE_REMOVALの処理中にドライバーがこのルーチンを呼び出すと、PnP マネージャーは、ドライバーが戻ってスタックをアンワインドした後、ドライバーの コールバック ルーチンを呼び出します。
IoReportTargetDeviceChangeAsynchronous の呼び出し元は、IRQL <= DISPATCH_LEVEL で実行されている必要があります。 ドライバー ライターが IRQL = DISPATCH_LEVEL でこのルーチンを呼び出す場合は、NotificationStructure を非ページ メモリから割り当てる必要があります。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (「解説」セクションを参照) |
DDI コンプライアンス規則 を する | hwStorPortProhibitedDDDIs(storport) を する |
関連項目
IoReportTargetDeviceChange の