共用方式為


控制 UMDF 中一般 I/O 目標之狀態

警告

UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的UMDF驅動程式都應該使用UMDF 2撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上對 UMDF 1 的支援有限。 通用 Windows 驅動程式必須使用 UMDF 2。

封存的 UMDF 1 範例可在 Windows 11 版本 22H2 - 2022 年 5 月驅動程式範例更新中找到

如需詳細資訊,請參閱 開始使用UMDF

架構會針對一般 I/O 目標定義下列狀態:

開始
I/O 目標已開啟(也就是 UMDF 驅動程式可以使用),而驅動程式可以傳送 I/O 要求給它。 架構會將要求傳遞給適當的驅動程式。

已停止
I/O 目標已開啟,但除非驅動程式在呼叫 IWDFIoRequest::Send 方法時,將 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE 旗標傳遞至 Flags 參數,否則 UMDF 驅動程式無法將 I/O 要求傳送至 I/O 目標。

架構會停止將要求傳遞給適當的驅動程式。

因查詢移除已關閉
I/O 目標暫時關閉,因為它的裝置可能即將被移除。

關閉
I/O 目標已關閉,無法啟動或停止。

已刪除
I/O 目標的裝置已被移除。

WDF_IO_TARGET_STATE 列舉會定義代表這些狀態的值。

本地 I/O 目標狀態

架構會自動開啟並啟動本機 I/O(輸入/輸出)目標。

如有必要,驅動程式可以呼叫IWDFIoTargetStateManagement::Stop以暫時停止本機 I/O 目標,並呼叫IWDFIoTargetStateManagement::Start以重新啟動它。 例如,如果驅動程式偵測到暫時性錯誤狀況,則驅動程式可能會停止本機 I/O 目標,然後在更正錯誤條件時重新啟動 I/O 目標。

如果移除本機 I/O 目標的裝置,架構會自動停止並關閉 I/O 目標,取消 目標佇列中的所有 I/O 請求。 架構會透過呼叫裝置物件事件回呼函式,通知驅動程式裝置已無法使用。 如需這些回呼函式的詳細資訊,請參閱 UMDF 中的 PnP 和電源管理案例

驅動程式可以呼叫 IWDFIoTargetStateManagement::GetState 以取得本機 I/O 目標的目前狀態。

遠端 I/O 目標狀態

驅動程式必須呼叫 #B0 #A1 IWDFRemoteTarget::OpenFileByName #A2 #C3 或 #B4 #A5 IWDFRemoteTarget::OpenRemoteInterface #A6 #C7 來開啟遠端 I/O 目標。 當驅動程式開啟遠端 I/O 目標時,架構會自動啟動 I/O 目標。

如有必要,驅動程式可以呼叫 IWDFRemoteTarget::Stop 來暫時停止遠端 I/O 目標,並呼叫 IWDFRemoteTarget::Start 重新啟動它。

如果移除遠端 I/O 目標的裝置,架構會自動停止並關閉 I/O 目標,並取消目標佇列中的所有 I/O 要求,除非驅動程式註冊下列事件回呼函式:

#B0 #A1 #A2 IRemoteTargetCallbackRemoval::OnRemoteTargetQueryRemove #A3 #C4
通知驅動程式遠端 I/O 目標的裝置可能會遭到移除。 如果您想要讓驅動程式允許移除裝置,您的驅動程式必須呼叫 IWDFRemoteTarget::CloseForQueryRemove

#B0 #A1 #A2 IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveComplete #A3 #C4
通知駕駛員遠端 I/O 目標的裝置已被移除。 此回呼函式必須呼叫 IWDFRemoteTarget::Close。

#B0 #A1 #A2 IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveCanceled #A3 #C4
通知駕駛者已取消移除遠端 I/O 目標裝置的嘗試。 如果您要讓驅動程式繼續使用該目標,驅動程式必須呼叫 IWDFRemoteTarget::Reopen。 一般而言,驅動程式會在OnRemoteTargetRemoveCanceled回呼函式中呼叫Reopen,但也可以選擇在OnRemoteTargetRemoveCanceled傳回之後再呼叫Reopen

驅動程式可以呼叫 IWDFRemoteTarget::GetState 以取得遠端 I/O 目標的目前狀態。