システム提供の多機能バス ドライバーの使用
デバイスの基になるバスが PC カードなどの多機能バス標準をサポートしている場合、NT ベースのプラットフォーム上の多機能デバイスのベンダーは、システム提供の多機能バス ドライバー (mf.sys) を使用してデバイスをサポートできます。
mf.sys バス ドライバーは、デバイス関数の PnP 列挙を処理し、I/O ポートや IRQ などのリソースを関数間で調整します。 mf.sys ドライバーは、親多機能デバイスの電源管理によって、子関数の電源管理を処理します。
mf.sysを使用するには、多機能デバイスが次の要件を満たしている必要があります。
デバイスの基になるバスには多機能標準が必要です。
子関数の DEVICE_CAPABILITIES は同じである必要があり、親デバイスのものと一致する必要があります。 子関数 (IRP_MN_QUERY_CAPABILITIES) のデバイス機能を照会すると、mf.sys ドライバーは親デバイスのデバイス機能を報告します。
pcmcia.sysなど、多機能デバイスが存在するバスのドライバーは、 IRP_MN_READ_CONFIG および IRP_MN_WRITE_CONFIG の要求を処理する必要があります。 mf.sys ドライバーは、これらの IRP を親バス ドライバーに渡すだけです。
関数は独立している必要があります。開始順序の依存関係を持つことはできません。ある関数のリソース要件を、別の関数のリソースの観点から表すことはできません (たとえば、function1 は I/O ポート X を使用し、function2 は portX + 200 を使用します)。および各関数は、別の関数と同じドライバーによって処理されている場合でも、個別のデバイスとして動作できる必要があります。
mf.sysを使用するために、ベンダーは、デバイスのドライバーとしてmf.sysを指定する多機能デバイスの INF を提供します。 デバイスが基になるバスの多機能標準に完全かつ正確に準拠している場合、そのようなデバイスのベンダーは、システム提供の mf.inf を使用できます。 デバイスが標準に完全に準拠していない場合、ベンダーはカスタム INF を提供する必要があります。
どちらの場合も、ベンダーは、デバイス上の個々の関数のドライバーと INF ファイルも提供します。
カスタム多機能 INF の次のスケルトンは、多機能デバイスのドライバーとしてmf.sysを指定するために必要な構文を示しています。
[Version]
; ...
Class = Multifunction ; the system-defined class for MF devices
ClassGUID = {4d36e971-e325-11ce-bfc1-08002be10318} ; GUID for MF
; ...
; ...
[ControlFlags]
ExcludeFromSelect = * ; don't include PnP devices in a displayed list of
; devices available for manual installation
[Manufacturer]
; ...
; ...
[ModelsSection.NTamd64] ; models section
; ...
; ...
[DDInstall.NT] ; install section
Include = mf.inf ; specify that this device requires mf.sys
Needs = MFINSTALL.mf
; ...
[DDinstall.NT.Services]
Include = mf.inf
Needs = MFINSTALL.mf.Services
[DDInstall.NT.HW]
AddReg=DDInstall.RegHW
[DDInstall.RegHW]
; put entries with child function hardware IDs here
; ...
; put override sections here...
; ...
[Strings]
; ...
LAN/モデム PC カード デバイスの組み合わせを考えてみましょう。 特別な多機能サポートがなければ、このようなデバイスは PCMCIA バス ドライバーによって単一のモデム デバイスとして報告される可能性があります。 多機能 INF と mf.sys バス ドライバーの追加サポートにより、デバイスの両方の関数が列挙されます。 次の図は、必要な多機能サポートを備えたこのようなコンボ PC カード用に作成される可能性があるサンプル デバイス スタックを示しています。
前の図に示すように、多機能デバイスが存在するバスのドライバーは、1 つのデバイスを列挙します。 多機能 INF ファイルのハードウェア ID により、PnP マネージャーは、デバイスのファンクション ドライバーとしてmf.sys バス ドライバーを読み込みます。 mf.sys バス ドライバーは、LAN デバイスとモデムの 2 つの子デバイスを列挙します。
PnP マネージャーは、一般的なデバイス、INF ファイルの検索、適切なドライバーの読み込み、AddDevice ルーチンの呼び出しなど、各デバイスのデバイス スタックが作成されるまで、各子デバイスを扱います。 mf.sysバス ドライバーは、子デバイスのリソースを調整し、デバイスのその他の多機能な側面を管理します。 多機能カードのベンダーは、別のデバイスであるかのように、複数の機能 (LAN とモデム) 用の機能ドライバーと INF を提供します。
この図では、ファンクション ドライバーと親バス ドライバー、および関連する FDO と PDO に焦点を当てています。 わかりやすくするために、フィルター ドライバー (およびフィルター DO) は省略されます。