共用方式為


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

警告

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 檔案。 然後,驅動程式可以根據新產生的 create-file 要求的結果來完成原始的建立檔案要求(也就是從 CreateWdfFile 的結果)。