共用方式為


防止驅動程式的建立和關閉通知不平衡

警告

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 驅動程式可以使用 IWDFDeviceInitialize::AutoForwardCreateCleanupClose 方法來控制架構何時會自動轉送 create-file、cleanup-file 和 close-file 通知給裝置堆疊中的下一個較低驅動程式。 不過,因為上層驅動程式會將 AutoForwardCreateCleanupClose 設定為只在裝置層級自動轉送,而不是在每一檔案層級上,所以裝置的所有檔案轉送都必須相同。 架構可確保清除檔案和關閉檔案通知的這個轉送行為。 如果上層驅動程式實作 IQueueCallbackCreate::OnCreateFile 回呼函式,則必須確保所有建立檔案要求的轉送行為都相同,而且與清除檔案和關閉檔案通知的轉送行為一致。 無法這麼做可能會導致驅動程式收到其 IQueueCallbackCreate::OnCreateFile 方法和 IFileCallbackCleanup::OnCleanupFileIFileCallbackClose::OnCloseFile 方法的呼叫量不相等。

若要防止較低驅動程式收到不相等的 create-file 和 close-file 通知,上限驅動程式必須在其 IQueueCallbackCreate::OnCreateFile 回 呼函式中確保:

  • 其轉送行為與裝置的所有檔案相同。

  • 其轉送行為與如何設定 IWDFDeviceInitialize::AutoForwardCreateCleanupClose的旗標參數一致。 也就是說:

    • 如果驅動程式將旗標設定為 WdfTrue,驅動程式必須將所有建立檔案要求轉送至裝置堆疊。
    • 如果驅動程式將旗標設定為 WdfFalse,驅動程式不得將任何建立檔案要求轉送至堆疊。
    • 如果驅動程式將旗標設定為 WdfUseDefault 和:
      • 如果驅動程式是函式驅動程式,它不得將任何建立檔案要求轉送至堆疊。
      • 如果驅動程式是篩選驅動程式,則必須將所有建立檔案要求轉送至堆疊。

在驅動程式無法轉送建立檔案要求的情況下,驅動程式仍然可以呼叫 IWDFDevice::CreateWdfFile 方法來建立新的 WDF 檔案,為較低驅動程式產生新的建立檔案要求。 然後,從 CreateWdfFile) 的結果,驅動程式就可以根據新產生的建立檔案要求結果完成原始建立檔案要求 (。