在 INF 檔案中指定 WDF 指示詞

安裝 WDF 驅動程式的 INF 檔案必須包含兩個 WDF 特定區段:

  • 每個 [DDInstall] 區段的 [DDInstall.wdf] 區段
  • [wdf-service-install] 區段,其區段名稱指定于 [DDInstall.wdf] 中的 KmdfService 或 UmdfService 指示詞中

這些區段包含 WDF 特定的指示詞。 UMDF 特定指示詞以 UMDF 前置詞開頭,而 KMDF 特定指示詞則以 KMDF 前置詞開頭。

下列程式碼範例顯示 UMDF 特定指示詞:

[ECHO_Device.NT.Wdf]
UmdfService = Echo, Echo_service_wdfsect
UmdfServiceOrder = Echo

[Echo_service_wdfsect]
UmdfLibraryVersion = $UMDFVERSION$
ServiceBinary = %13%\echo.dll

下列程式碼範例顯示 KMDF 特定指示詞:

[ECHO_Device.NT.Wdf]
KmdfService = Echo, Echo_service_wdfsect

[Echo_service_wdfsect]
KmdfLibraryVersion = $KMDFVERSION$

[DDInstall.WDF 區段的 UMDF 指示詞]

以下是程式碼範例。 下面說明 DDInstall.WDF 區段中的每個 UMDF 特定指示詞。

[ECHO_Device.NT.Wdf]
UmdfService = Echo, Echo_service_wdfsect
UmdfServiceOrder = Echo

UmdfService

`UmdfService = <serviceName> , <sectionName>

建立 UMDF 驅動程式與 [wdf-service-install] 區段的關聯,其中包含安裝 UMDF 驅動程式所需的資訊。 serviceName參數會指定 UMDF 驅動程式,且長度上限為 31 個字元。 sectionName參數會參考 [wdf-service-install] 區段。 有效的 INF 檔案通常需要至少一個 UmdfService 指示詞。 不過,如果 UMDF 驅動程式是作業系統的一部分,則不需要 UMDF 驅動程式的 UmdfService 指示詞。 因此,有效的 INF 檔案可能沒有任何 UmdfService 指示詞,不過大部分的 INF 檔案對於每個 UMDF 驅動程式都有一個 UmdfService 指示詞。

UmdfHostProcessSharing

UMDF 1.11 版和更新版本支援這個指示詞。

UmdfHostProcessSharing = <ProcessSharingDisabledProcessSharingEnabled | >

判斷裝置堆疊是放在共用進程集區中, (ProcessSharingEnabled) 還是自己的個別進程 (ProcessSharingDisabled) 。 預設值為 ProcessSharingEnabled。 此指示詞是裝置專屬的,而不是驅動程式特定的。

如需裝置共用的詳細資訊,請參閱 在 UMDF 驅動程式中使用裝置共用

UmdfDirectHardwareAccess

UMDF 1.11 版和更新版本支援這個指示詞。

UmdfDirectHardwareAccess = <AllowDirectHardwareAccess | RejectDirectHardwareAccess>

指出架構是否應該允許驅動程式使用任何直接硬體存取功能,例如存取裝置暫存器和埠、掃描指派給裝置的硬體資源、處理硬體中斷或取得連線資源。

如果 UmdfDirectHardwareAccess 設定為 AllowDirectHardwareAccess,架構會允許驅動程式使用執行直接硬體存取的 UMDF 介面。

如果您的 UMDF 驅動程式存取硬體資源,例如暫存器或埠、中斷、一般用途 I/O (GPIO) 針腳,或 I2C、SPI 和序列埠等序列匯流排連線,您必須指定AllowDirectHardwareAccess。 您的驅動程式會透過其 EvtDevicePrepareHardware回呼函式的ResourcesRawResourcesTranslated參數,接收所有這些資源。

注意

從 UMDF 2.15 版開始,UMDF 驅動程式不需要指定 AllowDirectHardwareAccess ,才能在其 EvtDevicePrepareHardware 回呼常式中接收硬體資源清單。 如果未指定,驅動程式就沒有使用這些資源的存取權限, 但有一個例外狀況:如果裝置指派了一或多個連線資源, (CmResourceTypeConnection) 和一或多個中斷資源 (CmResourceTypeInterrupt) ,驅動程式可以從其EvtDevicePrepareHardware回呼常式呼叫 WdfInterruptCreate (,但無法從EvtDriverDeviceAdd) 呼叫WdfInterruptCreate

如需將 UMDF 驅動程式連線到特定資源類型的相關資訊,請參閱:

如果 UmdfDirectHardwareAccess 設定為 RejectDirectHardwareAccess,則架構不允許驅動程式使用任何直接硬體存取功能。 預設值為 RejectDirectHardwareAccess

如需 UMDF 驅動程式如何存取硬體資源的資訊,請參閱 尋找和對應硬體資源

UmdfHostPriority

UMDF 2.15 版和更新版本支援這個指示詞。

UmdfHostPriority = <PriorityHigh>

UMDF HID 用戶端驅動程式可以將 UmdfHostPriority 設定為 PriorityHigh ,以增加其執行緒優先順序。 這個指示詞應該只用于對使用者回應時間敏感的觸控或輸入驅動程式。 當驅動程式指定 PriorityHigh時,系統會將它放入個別的裝置集區,以及其他優先順序類似的驅動程式。 因為額外的裝置集區會使用更多記憶體,所以您應該謹慎使用此設定。 如需裝置共用的詳細資訊,請參閱 在 UMDF 驅動程式中使用裝置共用

UmdfRegisterAccessMode

UMDF 1.11 版和更新版本支援這個指示詞。

UmdfRegisterAccessMode = <RegisterAccessUsingSystemCall | RegisterAccessUsingUserModeMapping>

指出架構是否應該將暫存器對應到使用者模式位址空間 (,讓系統呼叫不涉及存取暫存器) ,或使用系統呼叫來存取暫存器。

如果 UmdfRegisterAccessMode 設定為 RegisterAccessUsingSystemCall,架構會使用系統呼叫來存取暫存器。

如果 UmdfRegisterAccessMode 設定為 RegisterAccessUsingUserModeMapping,架構會將暫存器對應到使用者模式位址空間,因此不需要系統呼叫即可存取暫存器。 預設值為 RegisterAccessUsingSystemCall

UmdfServiceOrder

UmdfServiceOrder = <serviceName1> [, <serviceName2> ...]

列出共同安裝程式在裝置堆疊上安裝 UMDF 驅動程式的順序。 即使共同安裝程式只會在裝置堆疊上安裝一個 UMDF 驅動程式,INF 檔案也必須包含這個指示詞。 serviceNameXx參數對應至每個UmdfService指示詞的serviceName參數。 由於 UMDF 驅動程式會依列出的順序新增至裝置堆疊,因此第一個參數會指定裝置堆疊中的最低 UMDF 驅動程式。

為了確保 UMDF 共同安裝程式會安裝裝置,在任何指定的 WDF 特定DDInstall區段中,都只能有一個UmdfServiceOrder指示詞。 也就是說, UmdfServiceOrder 指示詞無法使用 IncludeNeeds 指示詞彙入。

UmdfImpersonationLevel

UmdfImpersonationLevel = <level>

通知架構 UMDF 驅動程式可以擁有的最大模擬層級。 UmdfImpersonationLevel指示詞是選擇性的;如果未指定模擬層級,則預設值為[識別]。 當應用程式開啟檔案控制碼時,應用程式可以將更大的模擬層級授與驅動程式。 不過,驅動程式無法呼叫 IWDFIoRequest::Impersonate 方法來要求大於 UmdfImpersonationLevel 所指定層級的模擬層級。 這個指示詞的可能值為:

  • 匿名

  • 識別

  • 模擬

  • 委派

這些值會對應至 SECURITY_IMPERSONATION_LEVEL 列舉中指定的值。

UmdfMethodNeitherAction

UmdfMethodNeitherAction = <複製 | 拒絕>

指出如果要求物件包含指定METHOD_NEITHER緩衝區存取方法的要求,架構是否會接受 (複製) 或拒絕 (拒絕) 裝置的 I/O 要求。 UmdfMethodNeitherAction指示詞是選擇性的。 如果未指定 指示詞,預設值為 Reject

如需在 UMDF 型驅動程式中支援METHOD_NEITHER緩衝區存取方法的詳細資訊,請參閱 在 UMDF 驅動程式中使用非緩衝 I/O 或直接 I/O

UmdfDispatcher

UmdfDispatcher = <FileHandle | WinUsb NativeUSB | >

通知架構在 I/O 通過裝置堆疊的使用者模式部分之後傳送 I/O 的位置。 根據預設,I/O 會傳送至反映器 (WUDFRd.sys) 。 將 UmdfDispatcher 設定為 WinUsb,驅動程式會指示 UMDF 將 I/O 傳送至 WinUsb 架構。 從 UMDF 2.15 開始,指定 NativeUSB 會導致反映器處理 USB I/O。

  • 如果堆疊中的任何驅動程式使用以檔案控制碼為基礎的目標,請將此指示詞設定為 FileHandle
  • 如果驅動程式使用 UMDF 2.15 或更新版本,並使用 USB I/O 目標,請將此指示詞設定為 NativeUSB
  • 如果驅動程式是 UMDF 2.15 之前,並使用 USB I/O 目標,請將此指示詞設定為 WinUsb

UmdfDispatcher指示詞是選擇性的。

下列程式碼範例顯示 WDF 特定DDInstall區段中的UmdfDispatcher指示詞。

[Xxx_Install.Wdf]
UmdfDispatcher=NativeUSB

UmdfKernelModeClientPolicy

UMDF 1.9 版和更新版本支援這個指示詞。

UmdfKernelModeClientPolicy = <AllowKernelModeClients | RejectKernelModeClients>

若要允許核心模式驅動程式在舊版 UMDF 中的使用者模式驅動程式上方載入,請參閱 舊版 UMDF 中的核心模式用戶端支援

指出架構是否應該允許驅動程式從核心模式驅動程式接收 I/O 要求。

如果 UmdfKernelModeClientPolicy 設定為 AllowKernelModeClients,架構會允許核心模式驅動程式在使用者模式驅動程式上方載入,並將核心模式驅動程式的 I/O 要求傳遞至使用者模式驅動程式。

如果 UmdfKernelModeClientPolicy 設定為 RejectKernelModeClients,架構不允許核心模式驅動程式在使用者模式驅動程式上方載入,而且不會將 I/O 要求從任何核心模式驅動程式傳遞至使用者模式驅動程式。 如果驅動程式的 INF 檔案未包含此指示詞,預設值為 RejectKernelModeClients。 如需詳細資訊,請參閱 支援核心模式用戶端

UmdfFileObjectPolicy

UMDF 1.11 版和更新版本支援這個指示詞。

UmdfFileObjectPolicy = <RejectNullAndUnknownFileObjects | AllowNullAndUnknownFileObjects>

指出架構是否應該允許在 IWDFIoRequest) (IWDFIoRequest) 處理 IWDFFile (IWDFFile) 或與未知的檔案物件相關聯, (驅動程式先前未看到建立要求) 的檔案物件。

如果 UmdfFileObjectPolicy 設定為 RejectNullAndUnknownFileObjects,則架構不允許處理與 Null 或未知檔案物件相關聯的要求。

如果 UmdfFileObjectPolicy 設定為 AllowNullAndUnknownFileObjects,架構會允許處理與 Null 或未知檔案物件相關聯的要求。

預設值為 RejectNullAndUnknownFileObjects

UmdfFsCoNtextUsePolicy

UMDF 1.11 版和更新版本支援這個指示詞。

UmdfFsCoNtextUsePolicy = <CanUseFsCoNtext | CanUseFsCoNtext2 | CannotUseFsCoNtexts>

指出架構是否可以將內部資訊儲存在 WDM 檔案物件的特定內容成員中。 如果相同堆疊中的核心模式驅動程式使用檔案物件的特定成員,您可以使用這個指示詞來要求架構未使用相同的位置。

如果 UmdfFsCoNtextUsePolicy 設定為 CanUseFsCoNtext,架構會將資訊儲存在 WDM 檔案物件的 FsCoNtext 成員中。

如果 UmdfFsCoNtextUsePolicy 設定為 CanUseFsCoNtext2,架構會將資訊儲存在 WDM 檔案物件的 FsCoNtext2 成員中。

如果 UmdfFsCoNtextUsePolicy 設定為 CannotUseFsCoNtexts,架構就不會使用 FsCoNtextFsCoNtext2

預設值為 CanUseFsCoNtext

[wdf-service-install 區段的 UMDF 指示詞]

以下是程式碼範例。 以下說明 [wdf-service-install] 區段中的每個 UMDF 特定指示詞。 區段名稱是在 [DDInstall.wdf] 區段的 UmdfService 指示詞中指定。

[Echo_service_wdfsect]
UmdfLibraryVersion = $UMDFVERSION$
ServiceBinary = %13%\echo.dll

UmdfLibraryVersion

UmdfLibraryVersion = <version>

通知共同安裝程式 UMDF 驅動程式將使用之架構的版本號碼。 版本字串的格式是 <主要> 。 <次要> 。 <服務> 。 當裝置堆疊上的驅動程式使用一個以上的架構版本時,INF 檔案會複製多個共同安裝程式,一個用於每個架構版本--到硬碟上的相同位置。 不過,INF 檔案只會將最高版本的共同安裝程式新增至 CoInstallers32 登錄值。 如需複製共同安裝程式的詳細資訊,請參閱 使用 UMDF 共同安裝程式

共同安裝程式會驗證版本字串,並使用它來尋找 UMDF 驅動程式的版本特定共同安裝程式。 然後,共同安裝程式會從版本特定的共同安裝程式擷取架構。

ServiceBinary

ServiceBinary = <binarypath>

通知 UMDF 在硬碟上放置 UMDF 驅動程式二進位檔的位置。

UMDF 驅動程式應該複製到目錄,並從中 Windows\System32\Drivers\UMDF 執行。

DriverCLSID

注意 只有在 UMDF 1.x 中才支援這個指示詞,這個指示詞已被取代。 如需詳細資訊,請參閱 UMDF 1.x 設計指南

DriverCLSID = < {CLSID}>

通知 UMDF 有關 UMDF 驅動程式 (CLSID) 類別識別碼。 當 UMDF 載入 UMDF 驅動程式時,UMDF 主機會使用 UMDF 驅動程式的 CLSID 來建立 UMDF 驅動程式 IDriverEntry 介面的實例。

UmdfExtensions

UmdfExtensions = <cxServiceName>

與 Microsoft 所提供的類別擴充驅動程式通訊的驅動程式是必要的。 cxServiceName 參數會對應至與類別擴充驅動程式二進位檔相關聯的服務。

類別擴充驅動程式的服務名稱可以是下列登錄機碼下的子機碼: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services

[DDInstall.WDF 區段的 KMDF 指示詞]

以下是程式碼範例。 下面說明 DDInstall.WDF 一節中的每個 KMDF 特定指示詞。

[ECHO_Device.NT.Wdf]
KmdfService = Echo, Echo_service_wdfsect

KmdfService

KmdfService = <serviceName> , <sectionName>

將 KMDF 驅動程式與 [wdf-service-install] 區段產生關聯,其中包含安裝 KMDF 驅動程式所需的資訊。 serviceName參數會指定 KMDF 驅動程式,且長度上限為 31 個字元。 sectionName參數會參考 [wdf-service-install] 區段。 有效的 INF 檔案通常需要至少一個 KmdfService 指示詞。 不過,如果 KMDF 驅動程式是作業系統的一部分,則不需要 KMDF 驅動程式的 KmdfService 指示詞。 因此,有效的 INF 檔案可能沒有任何 KmdfService 指示詞,不過大部分的 INF 檔案對於每個 KMDF 驅動程式都有一個 KmdfService 指示詞。

[wdf-service-install 區段的 KMDF 指示詞]

以下是程式碼範例。 以下說明 [wdf-service-install] 區段中的每個 KMDF 特定指示詞。 區段名稱來自 DDInstall.wdf 區段中的 KmdfService 指示詞。

[Echo_service_wdfsect]
KmdfLibraryVersion = $KMDFVERSION$

KmdfLibraryVersion

KmdfLibraryVersion = <version>

版本字串的格式為 major.minor 。 通常您應該指定 $KMDFVERSION$ WDK 建置程式,然後將它取代為正確的版本號碼。