共用方式為


建立和使用Driver-Created檔案物件

警告

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 目標) ,驅動程式必須建立並關閉自己的檔案物件。

建立檔案物件

您的驅動程式必須呼叫 IWDFDevice::CreateWdfFile 方法來建立檔案物件以供驅動程式使用。 當驅動程式呼叫 IWDFDevice::CreateWdfFile時,架構會將建立要求傳送至堆疊中的下一個驅動程式。 堆疊中的下一個驅動程式可以是核心模式或使用者模式。

此建立檔案要求處理在 Windows 驅動程式模型 (WDM) 中不同。 在 WDM 中,對 ZwCreateFile 函式的呼叫會導致建立 IRP 移至核心模式堆疊頂端。 下圖顯示 UMDF 與 WDM 中的建立檔案要求處理:

umdf 與 wdm 中的 create-file 要求處理。

藉由呼叫 IWDFDevice::CreateWdfFile,驅動程式就可以建立檔案物件,然後在裝置啟動期間傳送 I/O 要求,再開始整個堆疊。

堆疊中的下一個驅動程式必須判斷它是否可以處理 create-file 要求,或者它是否必須進一步將要求轉送至堆疊。

呼叫 IWDFDevice::CreateWdfFile之後,驅動程式就無法取消建立作業。

使用 File 物件

若要將非同步讀取要求傳送至其下方堆疊的下一個驅動程式,您的驅動程式可以使用下列模式。

  1. 呼叫 IWDFDevice::CreateWdfFile 以建立檔案物件。
  2. 呼叫 IWDFDevice::GetDefaultIoTarget 以擷取代表較低層級驅動程式的介面。
  3. 呼叫 IWDFDevice::CreateRequest 來建立未格式化的 IWDFIoRequest 物件。
  4. 呼叫IWDFIoRequest::SetCompletionCallback,為架構在 I/O 要求完成時呼叫的OnCompletion方法註冊IRequestCallbackRequestCompletion介面。
  5. 呼叫IWDFIoTarget::FormatRequestForRead,提供pFile參數中IWDFDriverCreatedFile介面的指標。
  6. 呼叫 IWDFIoRequest::Send 以傳送要求。

關閉 File 物件

呼叫 IWDFDevice::CreateWdfFile 的驅動程式稍後必須呼叫 IWDFDriverCreatedFile::Close

一般而言,您的驅動程式會從其IPnpCallbackHardware::OnReleaseHardware 或IPnpCallbackSelfManagedIo::OnSelfManagedIoCleanup回呼方法呼叫IWDFDriverCreatedFile::Close。

當驅動程式呼叫 IWDFDriverCreatedFile::Close時,架構會呼叫下一個驅動程式的 IFileCallbackCleanup::OnCleanupFile 方法。 在此方法中,下一個驅動程式必須取消或完成與檔案物件相關聯的所有擱置 I/O 要求。 架構接著會取消驅動程式所建立的任何 I/O 要求,該驅動程式稱為 IWDFDevice::CreateWdfFile。 架構不會取消堆疊中較低驅動程式的任何 I/O 要求可能與檔案物件相關聯。 驅動程式必須負責取消任何這類要求。 檔案物件只會在與其相關聯的所有 I/O 要求完成之後關閉。

接下來,架構會呼叫下一個驅動程式的 IFileCallbackClose::OnCloseFile 方法。 此時,架構會保證下一個驅動程式不會收到此檔案物件的額外 I/O 要求。

在架構呼叫 OnCloseFile之後,它會終結代表檔案物件的 IWDFFile 介面。

如果驅動程式建立的檔案物件保留在驅動程式的裝置移除方法之後, (例如 IPnpCallbackHardware::OnReleaseHardwareIPnpCallbackSelfManagedIo::OnSelfManagedIoCleanup) 傳回,架構會產生驅動程式停止。 如需針對此問題進行疑難排解的詳細資訊,請參閱 判斷為何 UMDF 指出裝置移除時未處理的檔案