在 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 目標已開啟,但 UMDF 驅動程式無法將 I/O 要求傳送至 I/O 目標,除非驅動程式在呼叫IWDFIoRequest::Send方法時將 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE 旗標傳遞至Flags參數。

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

已關閉查詢-移除
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 目標狀態

驅動程式必須呼叫 IWDFRemoteTarget::OpenFileByNameIWDFRemoteTarget::OpenRemoteInterface 以開啟遠端 I/O 目標。 當驅動程式開啟遠端 I/O 目標時,架構會自動啟動 I/O 目標。

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

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

IRemoteTargetCallbackRemoval::OnRemoteTargetQueryRemove
通知驅動程式,遠端 I/O 目標的裝置可能會遭到移除。 如果您希望驅動程式允許移除裝置,驅動程式必須呼叫 IWDFRemoteTarget::CloseForQueryRemove

IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveComplete
通知驅動程式遠端 I/O 目標的裝置已移除。 此回呼函式必須呼叫 IWDFRemoteTarget::Close

IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveCanceled
通知驅動程式,嘗試移除遠端 I/O 目標的裝置已取消。 如果您想要讓驅動程式繼續使用目標,驅動程式必須呼叫 IWDFRemoteTarget::Reopen。 一般而言,驅動程式會從OnRemoteTargetRemoveCanceled回呼函式內呼叫重新開啟,但在OnRemoteTargetRemoveCanceled傳回之後,可以改為呼叫重新開啟。

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