次の方法で共有


IoRequestDeviceEject 関数 (wdm.h)

IoRequestDeviceEject ルーチンは、デバイスの取り出しボタンが押されたことを PnP マネージャーに通知します。

構文

void IoRequestDeviceEject(
  [in] PDEVICE_OBJECT PhysicalDeviceObject
);

パラメーター

[in] PhysicalDeviceObject

デバイスの PDO へのポインター。

戻り値

何一つ

備考

このルーチンは、メディア の取り出しではなく、デバイスの取り出しの要求を報告します。

通常、PnP バス ドライバーは IoRequestDeviceEject 呼び出して、ユーザーが子デバイスの 1 つでデバイスの取り出しボタンを押したことを PnP マネージャーに通知します。

ドライバーは、IRP_MN_EJECT 要求を送信するのではなく、このルーチンを呼び出します。これは、PnP マネージャーが IRP を送信するだけでなく、取り出しの追加アクションを調整できるためです。 たとえば、PnP マネージャーは、デバイス上の変更の通知に登録されたユーザー モードとカーネル モードのコンポーネントに通知します。

PnP マネージャーは、デバイスを順番にシャットダウンします。 PnP マネージャー:

  1. 取り出されるこのデバイスの影響を受ける他のデバイスの一覧を作成します。

    PnP マネージャーは、デバイスの取り外し関係、吐出関係、バス関係 (子デバイス) を照会します。

  2. デバイスとその関連デバイスをソフトウェアから削除できるかどうかを決定します。

    PnP マネージャーは、デバイスとその関連デバイスのドライバーに IRP_MN_QUERY_REMOVE_DEVICE IRP を送信します。 PnP マネージャーは、デバイスまたはその関連デバイスのデバイス変更通知に登録されているユーザー モードおよびカーネル モードコンポーネントにも通知を送信します。 ドライバーまたはユーザー モードコンポーネントのいずれかがクエリの削除に失敗した場合、PnP マネージャーはダイアログ ボックスを表示して、取り出しが失敗したことをユーザーに通知します。

  3. ソフトウェアは、デバイスとその関連デバイスを削除します。

    前の手順が成功した場合、PnP マネージャーは、デバイスとその関連デバイスがソフトウェアから削除されていることを登録済みのドライバーとアプリケーションに通知します。 その後、PnP マネージャーは、デバイスとその関連デバイスのドライバーに IRP_MN_REMOVE_DEVICE IRP を送信します。 関数ドライバーとフィルター ドライバーは、デバイス スタックからデタッチし、デバイスのデバイス オブジェクトを削除します。 バス ドライバーは、デバイスが物理的になくなった場合を除き、デバイスの PDO を保持し、バス ドライバーは、デバイスの親バスのIRP_MN_QUERY_DEVICE_RELATIONS/ BusRelations への最新の応答でデバイスを省略します。

  4. デバイスを取り出すようバス ドライバーに指示します (可能な場合)。

    PnP マネージャーは、デバイスの取り出し機能に応じて、さまざまな手順を実行します。

    • ホット イジェクタがサポートされています。

      EjectSupported 機能がデバイスに対して設定されている場合、システムの実行中 (PowerSystemWorking 状態) にデバイスを取り出すことができます。 PnP マネージャーは、デバイスのバス ドライバーに IRP_MN_EJECT 要求を送信します。 以前にスタックからデタッチされた関数ドライバーとフィルター ドライバーは、IRP の削除に応答して、バス ドライバーが取り出し IRP を処理します。 バス ドライバーが IRP を完了すると、PnP マネージャーは、デバイスがシステムから物理的に存在しない必要があります。

    • ホット イジェクタはサポート

      この場合、デバイスはリムーバブル されますが、取り出しはサポートされていません。 PnP マネージャーは、デバイスを正しく存在しない、または正しく動作していないとマークします。 PnP マネージャーは、ユーザーがデバイスを物理的に削除して再挿入するまで、デバイスを再起動しません。 この場合、PnP マネージャーは IRP_MN_EJECTを送信しません。

    デバイスの親バス ドライバーは、IRP_MN_QUERY_CAPABILITIES 要求に応答して、取り出し機能を含むデバイスの機能を設定します。 関数またはフィルター ドライバーは、必要に応じて機能を指定できます。
デバイスが取り出されると、その子デバイスは、デバイスと共にシステムから物理的に削除されます。

ユーザー モード アプリケーションは、デバイスの取り出しを開始できます。 その場合、ドライバーはこのルーチンを呼び出しませんが、オペレーティング システムは PnP マネージャーを呼び出して、上記の手順を開始します。

IoRequestDeviceEject の呼び出し元は、IRQL <= DISPATCH_LEVELで実行されている必要があります。 PnP マネージャーは、IRQL = PASSIVE_LEVELで上記のデバイス取り出しタスクの大部分を実行します。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)

関連項目

IRP_MN_EJECT

IRP_MN_QUERY_DEVICE_RELATIONS

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE