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

User-Mode Driver Framework (UMDF) 1.11 和 2.0 版

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

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

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

如果系統重新開機,架構會重新緩衝處理裝置,但不同進程中執行時失敗的裝置除外。

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

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

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

UMDF 1.9 版和更早版本

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

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

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

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

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