INF ファイルでの WDF ディレクティブの指定
WDF ドライバーをインストールする INF ファイルには、2 つの WDF 固有のセクションが含まれている必要があります。
- 各 [DDInstall] セクションの [DDInstall.wdf] セクション
- [DDInstall.wdf] の KmdfService ディレクティブまたは UmdfService ディレクティブで指定されたセクション名を持つ [wdf-service-install] セクション
これらのセクションには、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 ファイルには、通常、少なくとも 1 つの UmdfService ディレクティブが必要です。 ただし、UMDF ドライバーがオペレーティング システムの一部である場合、UMDF ドライバーの UmdfService ディレクティブは必要ありません。 そのため、有効な INF ファイルには UmdfService ディレクティブがない可能性がありますが、ほとんどの INF ファイルには、UMDF ドライバーごとに 1 つの UmdfService ディレクティブがあります。
UmdfHostProcessSharing
このディレクティブは、UMDF バージョン 1.11 以降でサポートされています。
UmdfHostProcessSharing = <ProcessSharingDisabled | ProcessSharingEnabled>
デバイス スタックを共有プロセス プール (ProcessSharingEnabled) に配置するか、独自の個々のプロセス (ProcessSharingDisabled) に配置するかを決定します。 既定値は ProcessSharingEnabled です。 このディレクティブは、ドライバー固有ではなく、デバイス固有です。
デバイス プールの詳細については、「UMDF ドライバーでのデバイス プールの使用」を参照してください。
UmdfDirectHardwareAccess
このディレクティブは、UMDF バージョン 1.11 以降でサポートされています。
UmdfDirectHardwareAccess = <AllowDirectHardwareAccess | RejectDirectHardwareAccess>
デバイス レジスタとポートへのアクセス、デバイスに割り当てられたハードウェア リソースのスキャン、ハードウェア割り込みの処理、接続リソースの取得など、ドライバーが直接ハードウェア アクセス機能を使用できるようにする必要があるかどうかを示します。
UmdfDirectHardwareAccess が AllowDirectHardwareAccess に設定されている場合、フレームワークはドライバーが直接ハードウェア アクセスを実行する UMDF インターフェイスを使用できるようにします。
UMDF ドライバーがレジスタやポート、割り込み、汎用 I/O (GPIO) ピン、I2C、SPI、シリアル ポートなどのシリアル バス接続などのハードウェア リソースにアクセスする場合は、AllowDirectHardwareAccess を指定する必要があります。 ドライバーは、EvtDevicePrepareHardware コールバック関数の ResourcesRaw パラメーターと ResourcesTranslated パラメーターを介して、これらすべてのリソースを受け取ります。
Note
UMDF バージョン 2.15 以降では、UMDF ドライバーは、その EvtDevicePrepareHardware コールバック ルーチンでハードウェア リソース リストを受信するために AllowDirectHardwareAccess を指定する必要はありません。 指定しない場合、ドライバーにはこれらのリソースを使用するためのアクセス権がありません。ただし、1 つの例外があります。デバイスに 1 つ以上の接続リソース (CmResourceTypeConnection) と 1 つ以上の割り込みリソース (CmResourceTypeInterrupt) が割り当てられている場合、ドライバーは EvtDevicePrepareHardware コールバック ルーチンから WdfInterruptCreate を呼び出すことができます (EvtDriverDeviceAdd から呼び出すことはできません)。
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 ドライバーが 1 つだけの場合でも、INF ファイルにはこのディレクティブを含める必要があります。 serviceNameXx パラメーターは、各 UmdfService ディレクティブの serviceName パラメーターに対応します。 UMDF ドライバーは、一覧表示されている順序でデバイス スタックに追加されるため、最初のパラメーターは、デバイス スタック内の最も低い UMDF ドライバーを指定します。
UMDF 共同インストーラーがデバイスを確実にインストールするには、特定の WDF 固有の DDInstall セクションに UmdfServiceOrder ディレクティブを 1 つだけ指定する必要があります。 つまり、Include ディレクティブと Needs ディレクティブを使用して UmdfServiceOrder ディレクティブをインポートすることはできません。
UmdfImpersonationLevel
UmdfImpersonationLevel = <level>
UMDF ドライバーで使用できる最大偽装レベルについてフレームワークに通知します。 UmdfImpersonationLevel ディレクティブは省略可能です。偽装レベルが指定されていない場合、既定値は Identification です。 アプリケーションがファイル ハンドルを開くと、アプリケーションはドライバーにより大きな偽装レベルを付与できます。 ただし、ドライバーは IWDFIoRequest::Impersonate メソッドを呼び出して、UmdfImpersonationLevel が指定するレベルより大きい偽装レベルを要求することはできません。 このディレクティブに指定できる値は、以下のとおりです。
匿名
[識別]
偽装
委任
これらの値は、SECURITY_IMPERSONATION_LEVEL 列挙体で指定された値に対応します。
UmdfMethodNeitherAction
UmdfMethodNeitherAction = <Copy | Reject>
要求オブジェクトに、METHOD_NEITHER バッファー アクセス メソッドを指定する I/O 制御コードが含まれている場合に、フレームワークがデバイスの I/O 要求を受け入れる (Copy) か拒否 (Reject) かを示します。 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 に設定すると、ドライバーは、WinUsb アーキテクチャに I/O を送信するように UMDF に指示します。 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>
フレームワークが、ファイル オブジェクト (IWDFFile) に関連付けられていない I/O 要求 (IWDFIoRequest) の処理を許可するか、不明なファイル オブジェクト (ドライバーが作成要求を見たことがないファイル オブジェクト) に関連付けられているかを示します。
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 に設定されている場合、フレームワークでは FsContext または FsContext2 は使用されません。
既定値は 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 ドライバーが使用するフレームワークのバージョン番号について共同インストーラーに通知します。 バージョン文字列の形式は、<major><、minor>、<service> です。 デバイス スタック上のドライバーが複数のバージョンのフレームワークを使用する場合、INF ファイルは、ハード ディスク ドライブ上の同じ場所に、フレームワークのバージョンごとに 1 つずつ、複数の共同インストーラーをコピーします。 ただし、INF ファイルは、CoInstallers32 レジストリ値に最高バージョンの共同インストーラーのみを追加します。 共同インストーラーのコピーの詳細については、「UMDF 共同インストーラーの使用」を参照してください。
共同インストーラーはバージョン文字列を検証し、それを使用して UMDF ドライバーのバージョン固有の共同インストーラーを検索します。 次に、共同インストーラーによって、バージョン固有の共同インストーラーからフレームワークが抽出されます。
ServiceBinary
ServiceBinary = <binarypath>
UMDF ドライバー バイナリをハード ディスク ドライブに配置する場所について UMDF に通知します。
UMDF ドライバーを、Windows\System32\Drivers\UMDF
ディレクトリにコピーし、そこから実行する必要があります。
DriverCLSID
注: このディレクティブは、UMDF 1.x でのみサポートされています。これは非推奨です。 詳細については、「UMDF 1.x デザイン ガイド」を参照してください。
DriverCLSID = <{CLSID}>
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 ファイルには、通常、少なくとも 1 つの KmdfService ディレクティブが必要です。 ただし、UMDF ドライバーがオペレーティング システムの一部である場合、UMDF ドライバーの KmdfService ディレクティブは必要ありません。 そのため、有効な INF ファイルには KmdfService ディレクティブがない可能性がありますが、ほとんどの INF ファイルには、UMDF ドライバーごとに 1 つの KmdfService ディレクティブがあります。
[wdf-service-install の KMDF ディレクティブ セクション]
次にコード例を示します。 [wdf-service-install] セクションの KMDF 固有の各ディレクティブについて、以下で説明します。 セクション名は、DDInstall.wdf セクションの KmdfService ディレクティブに由来します。
[Echo_service_wdfsect]
KmdfLibraryVersion = $KMDFVERSION$
KmdfLibraryVersion
KmdfLibraryVersion = <version>
バージョン文字列の形式は major.minor
です。 通常は、$KMDFVERSION$
を指定する必要があり、WDK ビルド プロセスがそれを正しいバージョン番号に置き換えます。