IoRequestDeviceEject 関数 (wdm.h)
IoRequestDeviceEject ルーチンは、デバイスの取り出しボタンが押されたことを PnP マネージャーに通知します。
構文
void IoRequestDeviceEject(
[in] PDEVICE_OBJECT PhysicalDeviceObject
);
パラメーター
[in] PhysicalDeviceObject
デバイスの PDO へのポインター。
戻り値
なし
解説
このルーチンは、メディアの取り出しではなく、デバイスの取り出しの要求を報告します。
通常、PnP バス ドライバーは IoRequestDeviceEject を呼び出して、ユーザーがいずれかの子デバイスでデバイスの取り出しボタンを押したことを PnP マネージャーに通知します。
ドライバーは、 IRP_MN_EJECT 要求を送信するのではなく、このルーチンを呼び出します。これは、PnP マネージャーが IRP の送信以外に取り出しの追加アクションを調整できるためです。 たとえば、PnP マネージャーは、デバイス上の変更の通知のために登録されたユーザー モードとカーネル モードのコンポーネントに通知します。
PnP マネージャーは、デバイスを順番にシャットダウンします。 PnP マネージャー:
-
取り出されるこのデバイスの影響を受ける他のデバイスの一覧を作成します。
PnP マネージャーは、デバイスの削除関係、排出関係、バス関係 (子デバイス) を照会します。
-
デバイスとその関連デバイスをソフトウェアから削除できるかどうかを決定します。
PnP マネージャーは 、デバイス とその関連デバイスのドライバーにIRP_MN_QUERY_REMOVE_DEVICE IRP を送信します。 PnP マネージャーは、デバイスまたはその関連デバイスのデバイス変更通知に登録されたユーザー モードコンポーネントとカーネルモード コンポーネントにも通知を送信します。 ドライバーまたはユーザー モードコンポーネントのいずれかがクエリ削除に失敗した場合、PnP マネージャーはダイアログ ボックスをポップアップ表示して、取り出しが失敗したことをユーザーに通知します。
-
ソフトウェアは、デバイスとその関連デバイスを削除します。
前の手順が成功した場合、PnP マネージャーは、登録されているドライバーとアプリケーションに、デバイスとその関連デバイスがソフトウェアから削除されていることを通知します。 その後、PnP マネージャーは 、デバイス とその関連デバイスのドライバーにIRP_MN_REMOVE_DEVICE IRP を送信します。 関数ドライバーとフィルター ドライバーは、デバイス スタックからデタッチし、デバイスのデバイス オブジェクトを削除します。 デバイスが物理的に削除され、バス ドライバーがデバイスの親バスの IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations に対する最新の応答でデバイスを省略しない限り、バス ドライバーはデバイスの PDO を保持します。
-
(可能な場合) デバイスを取り出すバス ドライバーを指示します。
PnP マネージャーは、デバイスの取り出し機能に応じて、さまざまな手順を実行します。
-
ホット イジェクトがサポートされています。
デバイスに 対して EjectSupported 機能が設定されている場合、システムの実行中 ( PowerSystemWorking 状態) にデバイスを取り出すことができます。 PnP マネージャーは、デバイスのバス ドライバーに IRP_MN_EJECT 要求を送信します。 IRP の削除に応答してスタックから以前にデタッチされたすべての関数ドライバーとフィルター ドライバーは、バス ドライバーが取り出し IRP を処理します。 バス ドライバーが IRP を完了すると、PnP マネージャーは、デバイスがシステムから物理的に存在しない必要があります。
-
ホット イジェクトはサポート されていません 。
この場合、デバイスはリムーバブルですが、取 り出 しはサポートされていません。 PnP マネージャーは、デバイスを正しく存在しない、または正しく動作しないとしてマークします。 PnP マネージャーは、ユーザーが物理的にデバイスを削除して再挿入するまで、デバイスを再起動しません。 この場合、PnP マネージャーは IRP_MN_EJECTを送信しません。
-
ホット イジェクトがサポートされています。
ユーザー モード アプリケーションは、デバイスの取り出しを開始できます。 その場合、ドライバーはこのルーチンを呼び出しませんが、オペレーティング システムは PnP マネージャーを呼び出して、上記の手順を開始します。
IoRequestDeviceEject の呼び出し元は、IRQL <= DISPATCH_LEVELで実行されている必要があります。 PnP マネージャーは、上記のデバイス取り出しタスクの大部分を IRQL = PASSIVE_LEVELで実行します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (「解説」セクションを参照) |