次の方法で共有


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 要求を受信できるようにするかどうかを指定します。

    UmdfKernelModeClientPolicyAllowKernelModeClients に設定されている場合は、カーネル モード ドライバーがユーザー モード ドライバーの上位に読み込まれるのがフレームワークで許可され、カーネル モード ドライバーからユーザー モード ドライバーに I/O 要求が送信されます。

    UmdfKernelModeClientPolicyRejectKernelModeClients に設定されている場合は、カーネル モード ドライバーがユーザー モード ドライバーの上位に読み込まれるのがフレームワークで許可されず、カーネル モード ドライバーからユーザー モード ドライバーに 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 インターフェイスのインスタンスを作成します。