UMDF DDI 程式設計模型
警告
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 消費者入門。
架構和 UMDF 驅動程式會透過 UMDF DDI 進行通訊。 UMDF DDI 類似于 KMDF DDI,不同之處在于 UMDF DDI 是以 COM 為基礎。 因此,熟悉 KMDF 的驅動程式寫入器將會瞭解 UMDF。
針對每種架構物件類型,UMDF 會定義用來操作物件實例的介面。 每個介面都支援方法和屬性。 方法會定義可代表物件和屬性設定並擷取物件特性的動作。 有些介面是由架構實作,而其他介面則由驅動程式實作。 架構物件所公開的介面屬於 IWDF < 物件 > 形式,而驅動程式公開的事件回呼介面則屬於表單 I < 物件 >< 動作 > ,其中 < 物件 > 代表佇列、要求等等,而 < 動作 > 則表示介面的功能。 回呼介面的方法開頭為 「On」。
UMDF 驅動程式會透過架構的 方法和屬性與架構的物件通訊。 架構會透過事件通知與驅動程式通訊,這是架構可以呼叫的回呼函式,以通知驅動程式有關特定事件。 若要註冊回呼函式,驅動程式可以呼叫下列架構物件方法,而且可以將指標傳遞給與驅動程式所支援之回呼函式的所有介面相關聯的 IUnknown 介面。
作為架構通訊驅動程式的範例,請考慮裝置的預設 I/O 佇列物件。 驅動程式可以呼叫 IWDFIoQueue::GetState等方法,以擷取 I/O 佇列的狀態資訊,或 IWDFIoQueue::RetrieveNextRequest 以從 I/O 佇列擷取要求。 驅動程式也可以藉由呼叫 IWDFDevice::CreateIoQueue 方法來註冊回呼介面,例如 IQueueCallbackRead 和 IQueueCallbackWrite,來要求通知。 當應用程式傳送讀取和寫入要求時,架構後續會呼叫這些介面的方法。
架構提供驅動程式回呼方法之間所需的任何同步處理。 根據預設,架構會在裝置物件層級同步處理;也就是說,架構不會在裝置物件層級或下方同時呼叫事件回呼方法。 驅動程式可以藉由要求不同步處理來覆寫此預設值。 如需詳細資訊,請參閱 指定回呼同步處理模式。