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 傳送至裝置及其相關裝置的驅動程式。 函式和篩選驅動程式會從裝置堆疊中斷連結,並刪除裝置 (裝置) 的裝置物件。 除非裝置實際消失,且總線驅動程式在裝置父總線的最新回應中省略裝置,否則總線驅動程式會保留 PDO () 裝置 (IRP_MN_QUERY_DEVICE_RELATIONS) /。
-
如果) 可能的話,指示總線驅動程式退出裝置 (。
PnP 管理員會根據裝置的退出功能,採取不同的步驟:
-
支援熱退出。
如果已為裝置設定 退出 功能,當系統執行 (處於 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 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (请参阅一节) |