共用方式為


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 管理員:

  1. 建立其他受此裝置退出影響的裝置清單。

    PnP 管理員會查詢裝置的移除關係、退出關係和總線關係(子裝置)。

  2. 判斷裝置及其相關裝置是否可以移除軟體。

    PnP 管理員會將 IRP_MN_QUERY_REMOVE_DEVICE IRP 傳送給裝置及其相關裝置的驅動程式。 PnP 管理員也會將通知傳送給在裝置或任何相關裝置上註冊裝置變更通知的使用者模式和內核模式元件。 如果任一驅動程式或使用者模式元件無法移除查詢,PnP 管理員就會彈出對話框,通知使用者退出失敗。

  3. 軟體會移除裝置及其相關裝置。

    如果先前的步驟成功,PnP 管理員會通知已註冊的驅動程式和應用程式裝置及其相關裝置正在移除軟體。 然後,PnP 管理員會將 IRP_MN_REMOVE_DEVICE IRP 傳送給裝置及其相關裝置的驅動程式。 函式和篩選驅動程式會與裝置堆疊中斷連結,並刪除裝置的裝置物件。 除非裝置實際消失,否則總線驅動程式會保留裝置的 PDO(s),而總線驅動程式在裝置父總線的最新回應中省略裝置 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