リフレクターの追加

UMDF ドライバーの INF ファイルでは、リフレクター (WUDFRd.sys) をカーネル モード スタックの最上位ドライバーとしてインストールする必要があります。リフレクターを追加するには、UMDF ドライバーの INF ファイルで、DDInstall.Services セクションAddService ディレクティブを含める必要があります。リフレクターは、ユーザー モード スタックの構成に応じて、上位フィルター、下位フィルター、またはデバイスのサービスになります。いずれの場合も、カーネル モード ドライバーをリフレクターより上に読み込むことはできません。

UMDF ドライバーが関数ドライバーである場合、または複数の UMDF ドライバーが存在するときにユーザー モード スタックに関数ドライバーが含まれる場合は、AddService ディレクティブで、リフレクターをデバイスの関連サービスとして割り当てる必要があります。リフレクターを関連サービスとして割り当てるには、AddService ディレクティブで SPSVCINST_ASSOCSERVICE フラグ (0x00000002) を指定します。

UMDF ドライバーがフィルター ドライバーである場合、またはユーザー モード スタックにフィルター ドライバーのみが含まれる場合は、AddService ディレクティブで、リフレクターをカーネル モード スタックの最上位の上位フィルター ドライバーにする必要があります。

デバイスがサービスに関連付けられていない (デバイスがアクセス可能な未加工デバイスである) 場合は、AddService ディレクティブで、リフレクターを最上位の下位デバイス フィルターにする必要があります。

AddService ディレクティブでは、0x000001f8 フラグを設定して、サービスの既存の構成が上書きされないようにする必要があります。このフラグの詳細については、「AddService ディレクティブ」(英語の可能性あり) の flags パラメーターを参照してください。

次のコード例は、UMDF ドライバーの INF ファイルでリフレクターを追加する方法を示しています。

  [Skeleton_Install.Services]
AddService=WUDFRd,0x000001fa,WUDFRD_ServiceInstall

AddService ディレクティブは、次のコード例のようなサービスの追加セクションを参照します。ServiceType エントリでは、INF が 1 つ以上のデバイスのサポートをインストールすることを示す 1 または 0x00000001 を指定しています。StartType エントリでは、ドライバーを起動するタイミングを指定しています。ErrorControl エントリでは、ドライバーが提供するエラー制御レベルを指定しています。ServiceBinary エントリでは、サービスのバイナリ (リフレクター) のパスを指定しています。

  [WUDFRD_ServiceInstall]
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\WUDFRd.sys

リフレクターが追加されていない場合、UMDF は読み込まれません。デバイスは起動する可能性がありますが、ホスト プロセスが存在しないので正しく動作しません。