Storport 仮想ミニポート ドライバーの実装
このページでは、Storport 仮想ミニポート ドライバー (VMiniport) の実装に関する概要情報を提供します。 VMiniport インターフェイスは storport.h で定義されています。
設計上の考慮事項はさまざまな VMiniport に固有であるため、実装の詳細はここに含まれません。
VMiniport インターフェイス
このセクションでは、VMiniport が実装/使用する、より目立つ関数、コールバック、および構造体の一覧を示します。 一部の関数とコールバックが必要です。オプションのコールバックは、VMiniport の設計に固有です。
DriverEntry。これは、VMiniport の読み込み後にオペレーティング システムが呼び出す最初のルーチンです。 このルーチンは必須です。
HW_INITIALIZATION_DATA。これは、初期化中に VMiniport が Storport に渡す Vminiport によって割り当てられ、初期化された構造体です。 VMiniport は、この構造体のコールバック関数へのポインターを提供します。
次のコールバック ルーチンが必要です。
HwResetBus。 "bus" の意味は、VMiniport 開発者が定義できます。
HwFreeAdapterResources。 このルーチンは、VMiniport が初期化中に割り当てられているリソースを解放できるように、仮想アダプターが削除されるときに呼び出されます。
次のコールバック ルーチンは省略可能ですが、VMiniport では固有のアーキテクチャに応じてその一部を実装する必要がある場合があります。
HwCleanupTracing。 このルーチンは、HwInitializeTracing がコールバック ルーチンを指している場合に必要です。それ以外の場合、このルーチンは省略可能であり、VMiniport に固有です。
HwProcessServiceRequest。 このルーチンは、"リバース コールバック" IRP を受け取ります。これは、VMiniport が呼び出し元 (ユーザー モード アプリケーションやカーネル モード ドライバーなど) を更新するとき、または呼び出し元が VMiniport に代わって何かを行う必要がある場合に完了します。
HwCompleteServiceIrp。 このルーチンは、HwProcessServiceRequest がコールバック ルーチンを指している場合に必要です。それ以外の場合、このルーチンは省略可能であり、VMiniport に固有です。HwCompleteServiceIrp は、仮想アダプターが削除されるときに呼び出され、VMiniport が保留中の可能性があるリバース コールバック IRP を完了できるようにします。
VMiniport では、HW_INITIALIZATION_DATA 構造体の次のメンバーも設定する必要があります。
HwInitializationDataSize を sizeof (HW_INITIALIZATION_DATA) に設定します。
AdapterInterfaceType を Internal に設定します。これは、これが仮想アダプターであることを Storport に示します。
HwBuildIo を NULL に設定します。
Vminiport ドライバーは、必要に応じて他のフィールドを設定します。 使用されていないフィールドは 0 に設定する必要があります。
PORT_CONFIGURATION_INFORMATION。これは Storport によって割り当てられた構造体です。 Storport は、いくつかの PORT_CONFIGURATION_INFORMATION メンバーを初期化し、VMiniportの HwFindAdapter コールバックに渡し、VMiniport が初期化を完了します。 この構造体は Storport によって事前に初期化されるため、HWFindAdapter は構造体を 0 にすることはできません。 VMiniport で VirtualDevice を TRUE に設定する必要があります。
VMiniport の初期化
VMiniport には、初期化の 3 つの段階があります。
最初のステージでは、VMiniport の DriverEntry ルーチンは、初期化された HW_INITIALIZATION_DATA 構造体へのポインターを使用して StorPortInitialize を呼び出します。
Storport は、Storport によって割り当てられ、部分的に初期化されたPORT_CONFIGURATION_INFORMATION 構造体を使用して、VMiniport の HwFindAdapter コールバックを呼び出します。 HwFindAdapter の主な機能は、VirtualDevice メンバーを TRUE に設定するなど、PORT_CONFIGURATION_INFORMATION の初期化を完了することです。
HwFindAdapter が正常に戻った後、Storport は VMiniport の HwInitialize コールバックを呼び出して、VMiniport の初期化を完了します。
VMiniport I/O
Storport は、VMiniport の HwStartIo コールバックを呼び出して I/O 要求を開始します。 Storport では、I/O 要求は、SCSI_REQUEST_BLOCK または STORAGE_REQUEST_BLOCK (それぞれ標準または拡張 SRB) を使用して記述されます。
物理ミニポート ドライバーとは異なり、Storport は HwStartIo を呼び出す前に Vminiport で HwBuildIo を呼び出しません。
HwStartIo を呼び出す前にロックは保持されません。 仮想ミニポート インターフェイスを介して公開される各論理ユニットの既定のキューの深さは 250 です。