INF ファイルでの WDF ディレクティブの指定
UMDF ドライバーをインストールする INF ファイルには、Microsoft Windows Driver Foundation (WDF) 固有の DDInstall セクションを含める必要があります。複数の WDF ドライバーをインストールする場合は、このセクションを複数含めることができます。**WDF 固有の DDInstall セクションには次のような特徴があります。
特定の WDF ドライバーに関連付けられている DDInstall セクションおよび DDInstall.Services セクションに相当します。
読み込まれているすべての WDF 共同インストーラーによって処理されます。WDF 共同インストーラーは任意の順序で実行されます。
デバイスの WDF インストール ディレクティブが含まれています。UMDF 固有のディレクティブは UMDF プレフィックスで始まり、KMDF 固有のディレクティブは KMDF プレフィックスで始まります。
次のコード例は、WDF 固有の DDInstall セクションの UMDF 固有のディレクティブを示しています。
[Skeleton_Install.Wdf]
UmdfService=UMDFSkeleton,UMDFSkeleton_Install
UmdfServiceOrder=UMDFSkeleton
WDF 固有の DDInstall セクションの UMDF 固有のディレクティブには次のようなものがあります。
UmdfService = <serviceName>, <sectionName>
UMDF ドライバーのインストールに必要な情報が含まれている UMDF-service-install セクションに UMDF ドライバーを関連付けます。serviceName パラメーターで UMDF ドライバーを指定し、sectionName パラメーターで UMDF-service-install セクションを参照します。有効な INF ファイルには、通常、少なくとも 1 つの UmdfService ディレクティブが必要です。ただし、オペレーティング システムの一部である UMDF ドライバーには、UmdfService ディレクティブは必要ありません。したがって、有効な INF ファイルに UmdfService ディレクティブがない場合もありますが、ほとんどの INF ファイルには、各 UMDF ドライバーに 1 つずつ UmdfService ディレクティブがあります。UmdfServiceOrder = <serviceName1> [, <serviceName2> ...]
共同インストーラーが UMDF ドライバーをデバイス スタックにインストールする順序を指定します。このディレクティブは、共同インストーラーがデバイス スタックにインストールする UMDF ドライバーが 1 つの場合でも INF ファイルに含まれている必要があります。serviceNameXx パラメーターは、各 UmdfService ディレクティブの serviceName パラメーターに対応します。UMDF ドライバーはこの順序でデバイス スタックに追加されるため、最初のパラメーターでデバイス スタックの最下位の UMDF ドライバーを指定します。デバイスが UMDF 共同インストーラーによってインストールされるようにするには、すべての WDF 固有の DDInstall セクションに UmdfServiceOrder ディレクティブがそれぞれ 1 つだけ含まれている必要があります。したがって、Include ディレクティブや Needs ディレクティブを使用して UmdfServiceOrder ディレクティブをインポートすることはできません。
UmdfImpersonationLevel = <level>
UMDF ドライバーで許容される最大偽装レベルをフレームワークに通知します。UmdfImpersonationLevel ディレクティブは省略可能です。指定しない場合の既定値は Identification です。アプリケーションがファイル ハンドルを開くときにドライバーにより高い偽装レベルを許可することはできますが、ドライバーが IWDFIoRequest::Impersonate メソッドを呼び出して UmdfImpersonationLevel の指定より高い偽装レベルを要求することはできません。このディレクティブに設定可能な値は次のとおりです。Anonymous
Identification
Impersonation
Delegation
上の値は、SECURITY_IMPERSONATION_LEVEL 列挙型で指定されている値に対応します。
UmdfMethodNeitherAction = <Copy | Reject>
METHOD_NEITHER バッファー アクセス方式を指定する I/O 制御コードが要求オブジェクトに含まれている場合に、フレームワークがデバイスの I/O 要求を受け入れる (Copy) か拒否する (Reject) かを指定します。UmdfMethodNeitherAction ディレクティブは省略可能です。指定しない場合の既定値は Reject です。UMDF ベースのドライバーでの METHOD_NEITHER バッファー アクセス方式のサポートの詳細については、「UMDF ドライバーでのバッファー付きでも直接でもない I/O の使用」を参照してください。
UmdfDispatcher = <FileHandle | WinUsb>
デバイス スタックを出た後の要求の送信先をフレームワークに通知します。UmdfDispatcher ディレクティブは省略可能です。INF ファイルで UmdfDispatcher ディレクティブを指定する必要があるのは、スタック内のドライバーがファイル ハンドル ベースのターゲット (FileHandle) または USB ターゲット (WinUsb) を使用する場合だけです。UMDF ドライバーでファイル ハンドル ベースのターゲットを作成するには IWDFFileHandleTargetFactory::CreateFileHandleTarget メソッドを、USB ターゲットを作成するには IWDFUsbTargetFactory::CreateUsbTargetDevice メソッドを呼び出します。UmdfDispatcher ディレクティブの値を指定しない場合、フレームワークは要求をカーネル スタックに送信します (つまり、要求はリフレクターに送信されます)。UmdfKernelModeClientPolicy = <AllowKernelModeClients | RejectKernelModeClients>
ドライバーがカーネル モード ドライバーから I/O 要求を受信できるようにするかどうかを指定します。UmdfKernelModeClientPolicy が AllowKernelModeClients に設定されている場合は、カーネル モード ドライバーがユーザー モード ドライバーの上位に読み込まれるのがフレームワークで許可され、カーネル モード ドライバーからユーザー モード ドライバーに I/O 要求が送信されます。
UmdfKernelModeClientPolicy が RejectKernelModeClients に設定されている場合は、カーネル モード ドライバーがユーザー モード ドライバーの上位に読み込まれるのがフレームワークで許可されず、カーネル モード ドライバーからユーザー モード ドライバーに I/O 要求が送信されません。ドライバーの INF ファイルにこのディレクティブが含まれていない場合、既定値は RejectKernelModeClients になります。詳細については、「カーネル モードのクライアントのサポート」を参照してください。
UmdfKernelModeClientPolicy ディレクティブは、Version 1.9 以降の UMDF でサポートされています。それより前のバージョンの UMDF でカーネル モード ドライバーがユーザー モード ドライバーの上位に読み込まれるのを許可するには、「以前のバージョンの UMDF でのカーネル モードのクライアントのサポート」を参照してください。
次のコード例は、UMDF-service-install セクションの必須のディレクティブを示しています。
[UMDFSkeleton_Install]
UmdfLibraryVersion=1.0.0
ServiceBinary=%12%\UMDF\UMDFSkeleton.dll
DriverCLSID={d4112073-d09b-458f-a5aa-35ef21eef5de}
UMDF-service-install セクションのディレクティブには次のようなものがあります。
UmdfLibraryVersion = <version>
UMDF ドライバーが使用するフレームワークのバージョン番号を共同インストーラーに通知します。version の文字列の形式は、<major>.<minor>.<service> です。デバイス スタックのドライバーで複数のバージョンのフレームワークが使用されている場合は、ハード ディスク ドライブの同じ場所に複数の共同インストーラー (フレームワークのバージョンごとに 1 つずつ) がコピーされますが、CoInstallers32 レジストリ値には最も高いバージョンの共同インストーラーのみが追加されます。共同インストーラーのコピーの詳細については、「UMDF 共同インストーラーの使用」を参照してください。共同インストーラーは、version の文字列を確認し、それを使用して UMDF ドライバーのバージョン固有の共同インストーラーを見つけます。その後、そのバージョン固有の共同インストーラーからフレームワークを抽出します。
ServiceBinary = <binarypath>
UMDF ドライバーのバイナリをハード ディスク ドライブのどこに配置するかを UMDF に通知します。UMDF ドライバーは、\Windows\System32\Drivers\UMDF ディレクトリにコピーしてそこから実行する必要があります。
DriverCLSID = <{CLSID}>
UMDF ドライバーのクラス識別子 (CLSID) を UMDF に通知します。UMDF が UMDF ドライバーを読み込むと、UMDF ホストが UMDF ドライバーの CLSID を使用して UMDF ドライバーの IDriverEntry インターフェイスのインスタンスを作成します。