共用方式為


在 UMDF 驅動程式中使用裝置共用

User-Mode 驅動程式框架(UMDF)1.11 版和 2.0 版

如果您的 User-Mode Driver Framework (UMDF) 驅動程式是以 1.11 或 2.0 版建置,且是在 Windows 8 或更新版本上執行,架構會建立可裝載多個裝置堆疊的 Wudfhost 單一實例。 這項技術稱為 裝置共用。 裝置共用的主要優點是減少環境中具有多個 UMDF 裝置的記憶體耗用量。

如果集區裝置失敗,架構會終止 Wudfhost 的實例,並嘗試重新啟動先前在集區中的所有裝置。 如果裝置在集區時再次失敗,架構會為裝置建立個別的 Wudfhost 程式,並嘗試再次啟動裝置。

如果裝置在個別主機進程中失敗,架構會嘗試重新啟動最多五次。 架構會在自上次故障經過 30 分鐘後,將裝置錯誤計數重設為一。

如果系統重新啟動,框架會重新集結裝置,但在其他進程中執行時失敗的裝置除外。

若要停用特定裝置的裝置共用,請在 INF 中有關 WDF 的 DDInstall 區段中使用 UmdfHostProcessSharing 指令。 如需 UmdfHostProcessSharing的詳細資訊,請參閱 如何在 INF 檔案中指定 WDF 指示詞

如果您的驅動程式使用 直接 I/O,您必須將 UmdfHostProcessSharing 設定為 ProcessSharingDisabled。 否則您的驅動程式可能無法啟動。 如果已選取 WdfDeviceIoBufferedOrDirect 且裝置已集區,架構會將緩衝區存取方法變更為 緩衝的 I/O。 如果選取 WdfDeviceIoBufferedOrDirect 且裝置未集區,架構會將緩衝區存取方法變更為直接 I/O。

若要選取緩衝區存取方法,您的驅動程式必須從其 IDriverEntry::OnDeviceAdd 回呼函式呼叫 IWDFDeviceInitialize2::SetIoTypePreference 方法。 如需存取方法的相關信息,請參閱 UMDF-Based Drivers中存取數據緩衝區。

UMDF 1.9 版和更早版本

如果您的驅動程式是以 UMDF 1.9 版或更早版本建置,架構會為每個裝置堆疊建立個別的主機進程實例(Wudfhost)。

如果裝置無法啟動,架構會嘗試重新啟動最多五次。 架構在自上次失敗後已過 30 分鐘時,將裝置錯誤計數重設為一。

在非集區環境中,如果多個裝置堆疊共用相同的 UMDF 驅動程式:

在集區環境中,如果多個裝置堆疊共用相同的使用者模式驅動程式:

因為集區組態中只有一個驅動程序物件,因此驅動程式不得將任何個別裝置內容儲存在全域變數或跨裝置共享的物件中,例如驅動程式回呼物件。 相反地,驅動程式必須將每個裝置內容儲存在裝置堆疊之間未共享的物件中,例如驅動程式的裝置回呼物件。