次の方法で共有


HW_INITIALIZATION_DATA構造体 (storport.h)

HW_INITIALIZATION_DATA (Storport) 構造体には、各ミニポート ドライバーとミニポート ドライバーが管理するハードウェアに特定の情報が含まれています。

構文

typedef struct _HW_INITIALIZATION_DATA {
  ULONG                       HwInitializationDataSize;
  INTERFACE_TYPE              AdapterInterfaceType;
  PHW_INITIALIZE              HwInitialize;
  PHW_STARTIO                 HwStartIo;
  PHW_INTERRUPT               HwInterrupt;
  PVOID                       HwFindAdapter;
  PHW_RESET_BUS               HwResetBus;
  PHW_DMA_STARTED             HwDmaStarted;
  PHW_ADAPTER_STATE           HwAdapterState;
  ULONG                       DeviceExtensionSize;
  ULONG                       SpecificLuExtensionSize;
  ULONG                       SrbExtensionSize;
  ULONG                       NumberOfAccessRanges;
  PVOID                       Reserved;
  UCHAR                       MapBuffers;
  BOOLEAN                     NeedPhysicalAddresses;
  BOOLEAN                     TaggedQueuing;
  BOOLEAN                     AutoRequestSense;
  BOOLEAN                     MultipleRequestPerLu;
  BOOLEAN                     ReceiveEvent;
  USHORT                      VendorIdLength;
  PVOID                       VendorId;
  union {
    USHORT ReservedUshort;
    USHORT PortVersionFlags;
  };
  USHORT                      DeviceIdLength;
  PVOID                       DeviceId;
  PHW_ADAPTER_CONTROL         HwAdapterControl;
  PHW_BUILDIO                 HwBuildIo;
  PHW_FREE_ADAPTER_RESOURCES  HwFreeAdapterResources;
  PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
  PHW_COMPLETE_SERVICE_IRP    HwCompleteServiceIrp;
  PHW_INITIALIZE_TRACING      HwInitializeTracing;
  PHW_CLEANUP_TRACING         HwCleanupTracing;
  PHW_TRACING_ENABLED         HwTracingEnabled;
  ULONG                       FeatureSupport;
  ULONG                       SrbTypeFlags;
  ULONG                       AddressTypeFlags;
  ULONG                       Reserved1;
  PHW_UNIT_CONTROL            HwUnitControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

メンバーズ

HwInitializationDataSize

sizeof(HW_INITIALIZATION_DATA) によって返されるこの構造体のサイズ バイト単位で指定します。 実際には、このメンバーは、ミニポート ドライバーによって使用されているこの構造体のバージョンを示します。 ミニポート ドライバーの DriverEntry ルーチンは、ポート ドライバーのこのメンバーの値を設定する必要があります。

AdapterInterfaceType

Storport ドライバーは、レガシ バスをサポートしていません。 したがって、SCSI ポート ドライバーで使用されるアダプター インターフェイスの種類のほとんどは、Storport では無効です。 特に、IsaEisaMicroChannelTurboChannel はサポートされていません。 さらに、SCSI ポートの場合とは異なり、Storport ドライバーで動作するミニポート ドライバーは、VendorIdLengthVendorIdDeviceIdLength、および deviceId メンバー 値を指定する必要はありません。

HwInitialize

ミニポート ドライバーの HwStorInitialize ルーチンへのポインター。これは、すべてのミニポート ドライバーに必要なエントリ ポイントです。

HwStartIo

ミニポート ドライバーの HwStorStartIo ルーチンへのポインター。これは、すべてのミニポート ドライバーに必要なエントリ ポイントです。

HwInterrupt

ミニポート ドライバーの HwStorInterrupt ルーチンへのポインター。これは、すべてのミニポート ドライバーに必要なエントリ ポイントです。

HwFindAdapter

ミニポート ドライバーの HwStorFindAdapter ルーチンへのポインター。これは、すべてのミニポート ドライバーに必要なエントリ ポイントです。

HwResetBus

ミニポート ドライバーの HwStorResetBus ルーチンへのポインター。これは、すべてのミニポート ドライバーに必要なエントリ ポイントです。

HwDmaStarted

Storport ドライバーは、下位モード DMA をサポートしていません。 したがって、このメンバーは NULLする必要があります。

HwAdapterState

Storport ドライバーは、レガシ ドライバーをサポートしていません。 したがって、このメンバーは NULLする必要があります。

DeviceExtensionSize

アダプターごとのデバイス拡張機能のミニポート ドライバーで必要なサイズ (バイト単位) を指定します。 ミニポート ドライバーは、ドライバーによって決定されたホスト バス アダプター (HBA) 情報の記憶域として、そのデバイス拡張機能を使用します。 オペレーティング システム固有のポート ドライバーは、各デバイス拡張機能を 1 回初期化します。最初に拡張機能が割り当てられ、0 が設定されます。 ミニポート ドライバーへのすべての呼び出しで HBA 固有のデバイス拡張機能へのポインターを渡します。 指定されたサイズには、ミニポート ドライバーが要求した論理ユニットごとの記憶域は含まれません。 論理ユニットごとのストレージのサイズは、このトピックで後述 SpecificLuExtensionSize フィールドを使用して指定します。

SCSIPort は、アダプターが停止するたびにデバイス拡張機能を再初期化し、その後の HwScsiFindAdapter 呼び出し ゼロアウト デバイス拡張機能を受け取りますが、Storport はそのモデルに従いません。 代わりに、Storport は最初に割り当てられたときにのみデバイス拡張機能を 0 にリセットするため、特定のアダプターに対する HwStorFindAdapter を する最初の呼び出しのみがゼロアウト デバイス拡張機能を受け取ります。 HwStorFindAdapter およびその他のミニポート関数 後続の呼び出しは、ミニポートによって最後に変更されたデバイス拡張機能を受け取ります。 これにより、ミニポート ドライバーは、プラグ アンド プレイ (PnP) の停止と再起動の間のアダプターの状態に関する知識を維持することができます。場合によっては、ミニポート ドライバーが初期化手順を最適化できるようにします。

SpecificLuExtensionSize

ミニポート ドライバーが論理ユニットごとの記憶域に必要なサイズ (存在する場合) をバイト単位で指定します。 ミニポート ドライバーは、バス上の周辺機器に関するドライバーによって決定された論理ユニット情報の記憶域として、その LU 拡張機能を使用できます。 Storport ドライバーは、割り当てる各 LU 拡張機能をゼロで初期化します。 ミニポート ドライバーが記憶域を必要とする LU ごとの情報を保持しない場合は、このメンバーを 0 のままにします。 この値は、コントローラーが実際にサポートできる内容に関係なく、HBA が 32 ビット アドレスを受け取ることができるという前提に基づいています。 64 ビット アドレスを処理するために LUN または SRB 拡張機能に追加の領域が必要な場合は、StorPortGetUncachedExtension などのルーチンで使用する前に、この値に適切な調整を行う必要があります。

SrbExtensionSize

ミニポート ドライバーが要求ごとの記憶域に必要なサイズ (バイト単位) を指定します (存在する場合)。 ミニポート ドライバーは、特定の要求を処理するために必要なデータなど、ドライバーによって決定された、要求固有の情報の記憶域として SRB 拡張機能を使用できます。 Storport ドライバーは SRB 拡張機能を初期化しませんが、ミニポート ドライバーに送信する各 SRB 内のこの記憶域へのポインターを設定します。 SRB 拡張機能には、HBA ハードウェアから安全にアクセスできます。 Storport ドライバーで動作するミニポート ドライバーは、散布図/収集リストをサポートする必要があり、SRB ごとの散布図/収集リストは通常、SRB 拡張機能で割り当てられるため、このメンバーはほとんど 0 ではありません。 ミニポート ドライバーが記憶域を必要とする SRB ごとの情報を維持しない場合は、このメンバーを 0 のままにします。

この値は、コントローラーが実際にサポートできる内容に関係なく、HBA が 32 ビット アドレスを受け取ることができるという前提に基づいています。 64 ビット アドレスを処理するために LUN または SRB 拡張機能に追加の領域が必要な場合は、StorPortGetUncachedExtension などのルーチンで使用する前に、この値に適切な調整を行う必要があります。

NumberOfAccessRanges

アダプターが使用するアクセス範囲の数を指定します。 各アドレスは、メモリ アドレスまたは I/O ポート アドレスの範囲です。

Reserved

システム用に予約されており、ミニポート ドライバーでは使用できません。

MapBuffers

Storport ドライバーが SRB データ バッファー アドレスをシステム仮想アドレスにマップするかどうかを示します。 MapBuffers メンバーは、次のいずれかの値を持つことができます。

価値 意味
STOR_MAP_NO_BUFFERS (0) SRB_FUNCTION_IO_CONTROLとSRB_FUNCTION_WMIを除き、SRB にマップしないでください。
STOR_MAP_ALL_BUFFERS (1) 廃れた。 この値は、STOR_MAP_NON_READ_WRITE_BUFFERSと同じ効果を持ちます。
STOR_MAP_NON_READ_WRITE_BUFFERS (2) 読み取りまたは書き込み要求を除くすべての I/O のバッファーをマップします。
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE (3) 読み取り要求と書き込み要求を含むすべての I/O のバッファーをマップします。 この値は、Windows 8 以降で有効です。

NeedPhysicalAddresses

TRUEを に設定する必要があります。 TRUE の値は、ミニポート ドライバーが特定の種類のアドレスを物理アドレスに変換する必要があることを示します。 Storport ドライバーで動作するミニポート ドライバーは、常にアドレス変換を行う必要があるため、バス マスター DMA をサポートする必要があります。

TaggedQueuing

TRUEを に設定する必要があります。 TRUE の値は、ミニポート ドライバーが SCSI タグ付きキューをサポートしていることを示します。 Storport ドライバーで動作するすべてのミニポート ドライバーは、タグ付けされたキューをサポートする必要があります。

AutoRequestSense

TRUEする必要があります。 TRUE の値は、HBA が明示的な要求を必要とせずに要求センス操作を実行できることを示します。 Storport ドライバーで動作するすべてのミニポート ドライバーは、SCSI 自動要求センサーをサポートする必要があります。

MultipleRequestPerLu

TRUEを に設定する必要があります。 TRUE の値は、ミニポート ドライバーが論理ユニットごとに複数の要求をキューに登録できることを示します。 Storport ドライバーで動作するミニポート ドライバーは、論理ユニットごとに複数の要求をサポートする必要があります。

ReceiveEvent

Storport ドライバーは、このメンバーを無視します。

VendorIdLength

Storport ドライバーで動作するミニポート ドライバーは PnP をサポートする必要があるため、Storport ドライバーは、このメンバーを無視します。

VendorId

Storport ドライバーで動作するミニポート ドライバーは PnP をサポートする必要があるため、Storport ドライバーは、このメンバーを無視します。

ReservedUshort

PortVersionFlags

サポートされている機能を示すフラグ。

DeviceIdLength

Storport ドライバーで動作するミニポート ドライバーは PnP をサポートする必要があるため、Storport ドライバーは、このメンバーを無視します。

DeviceId

Storport ドライバーで動作するミニポート ドライバーは PnP をサポートする必要があるため、Storport ドライバーは、このメンバーを無視します。

HwAdapterControl

ミニポート ドライバーの HwStorAdapterControl ルーチンへのポインター。 Storport ドライバーで動作するミニポート ドライバーには PnP サポートが必要であるため、これは必須のルーチンです。

HwBuildIo

ミニポート ドライバーの HwStorStartIo ルーチンを呼び出す前に、ポート ドライバーが非同期処理を実行するために呼び出すオプションの HwStorBuildIo ルーチンへのポインター。 このコールバックは物理ミニポートに固有であり、仮想ミニポートによって NULL に設定する必要があります。

HwFreeAdapterResources

仮想ミニポート ドライバーの HwStorFreeAdapterResources ルーチンへのポインター。これは、すべての仮想ミニポート ドライバーに必要なエントリ ポイントです。 このコールバックは仮想ミニポートに固有であり、物理ミニポートの null に設定されます。

このコールバックは、Windows 8 で追加されます。 以前のバージョンの Windows の仮想ミニポートでは、この構造体の代わりに VIRTUAL_HW_INITIALIZATION_DATA を使用する必要があります。

HwProcessServiceRequest

仮想ミニポート ドライバーの HwStorProcessServiceRequest ルーチンへのポインター。 このコールバックは仮想ミニポートに固有であり、物理ミニポートの null に設定されます。

このコールバックは、Windows 8 で追加されます。 以前のバージョンの Windows の仮想ミニポートでは、この構造体の代わりに VIRTUAL_HW_INITIALIZATION_DATA を使用する必要があります。

HwCompleteServiceIrp

仮想ミニポート ドライバーの HwStorCompleteServiceIrp ルーチンへのポインター。 このコールバックは仮想ミニポートに固有であり、物理ミニポートの null に設定されます。

このコールバックは、Windows 8 で追加されます。 以前のバージョンの Windows の仮想ミニポートでは、この構造体の代わりに VIRTUAL_HW_INITIALIZATION_DATA を使用する必要があります。

HwInitializeTracing

仮想ミニポート ドライバーの HwStorInitializeTracing ルーチンへのポインター。 このコールバックは仮想ミニポートに固有であり、物理ミニポートの null に設定されます。

このコールバックは、Windows 8 で追加されます。 以前のバージョンの Windows の仮想ミニポートでは、この構造体の代わりに VIRTUAL_HW_INITIALIZATION_DATA を使用する必要があります。

HwCleanupTracing

仮想ミニポート ドライバーの HwStorCleanupTracing ルーチンへのポインター。 このコールバックは仮想ミニポートに固有であり、物理ミニポートの null に設定されます。

このコールバックは、Windows 8 で追加されます。 以前のバージョンの Windows の仮想ミニポートでは、この構造体の代わりに VIRTUAL_HW_INITIALIZATION_DATA を使用する必要があります。

HwTracingEnabled

省略可能な HwStorTracingEnabled へのポインター トレースが有効になっているかどうかをミニポートに通知するためにポート ドライバーが呼び出すルーチンです。

FeatureSupport

ミニポートでサポートされている機能を示すフラグ。 FeatureSupport は、次の値の組み合わせに設定されます。

価値 意味
STOR_FEATURE_VIRTUAL_MINIPORT (0x00000001) これは仮想ミニポート ドライバーです。
STOR_FEATURE_ATA_PASS_THROUGH (0x00000002) ミニポートは、ATA パススルーをサポートしています。
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES (0x00000004) ミニポートは、その STOR_DEVICE_CAPABILITIES_EX 構造で完全な設定を提供します。
STOR_FEATURE_DUMP_POINTERS (0x00000008) ミニポートは、ダンプ ポインターの SRB をサポートしています。
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX (0x00000010) ミニポート ドライバーは、デバイスのフレンドリ名の一部としてサフィックス "SCSI の種類 デバイス" を必要としません。
STOR_FEATURE_DUMP_RESUME_CAPABLE (0x00000020) ミニポートのダンプ機能は、休止状態からの再開に機能します。
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD (0x00000040) Storport ドライバーは、照会データからではなく、ATA 情報 VPD ページから STORAGE_DEVICE_DESCRIPTOR を初期化します。
STOR_FEATURE_EXTRA_IO_INFORMATION (0x00000080) ミニポート ドライバーは、使用可能な場合は、SRBEX でSRBEX_DATA_IO_INFOを必要とします。
STOR_FEATURE_ADAPTER_CONTROL_PRE_FINDADAPTER (0x00000100) ミニポート ドライバーは、HwFindAdapter を受信する前に、Storport からの AdapterControl 呼び出しを安全に処理できます。
STOR_FEATURE_ADAPTER_NOT_REQUIRE_IO_PORT (0x00000200) ミニポート ドライバーは、そのアダプターの IO ポート リソースを必要としません。
STOR_FEATURE_DUMP_16_BYTE_ALIGNMENT (0x00000400) ミニポート ドライバーは、その HwDeviceExtension をダンプ モードで 16 バイト配置する必要があります。
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE (0x00000800) ミニポートは、Storport でアダプター インターフェイスの種類を設定する必要があります。
STOR_FEATURE_DUMP_INFO (0x00001000) ミニポート ドライバーは、ダンプ情報の SRB をサポートしています。
STOR_FEATURE_DMA_ALLOCATION_NO_BOUNDARY (0x00002000) ミニポート ドライバーは、境界のない物理メモリに DMA を割り当てることをサポートしています。
STOR_FEATURE_SUPPORTS_NVME_ADAPTER (0x00004000) ミニポート ドライバーは、NVMe ベースの記憶域アダプターをサポートしています。
STOR_FEATURE_REPORT_INTERNAL_DATA (0x00008000) ミニポート ドライバーは、内部データのレポートをサポートしています。
STOR_FEATURE_EARLY_DUMP (0x00010000) ミニポート ドライバーは、早期クラッシュ ダンプの生成をサポートしています。
STOR_FEATURE_NVME_ICE (0x00020000) ミニポート ドライバーは、NVMe ICE をサポートしています。

SrbTypeFlags

ミニポートでサポートされている SRB 型を示すフラグ。 SrbTypeFlags が 0 または次の値の組み合わせに設定されています。

価値 意味
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK (0x1) ミニポートは、標準の SRB を使用します。
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK (0x2) ミニポートは、拡張された SRB をサポートしています。

AddressTypeFlags

ミニポートでサポートされているアドレススキーム。 現時点では、1 つのアドレス構成のみがサポートされており、ミニポートは、このメンバーをADDRESS_TYPE_FLAG_BTL8に設定する必要があります。

価値 意味
ADDRESS_TYPE_FLAG_BTL8 (0x1) バス、ターゲット、LUN (BTL) の 8 ビット アドレス指定。

Reserved1

予約済み、0 に設定します。

HwUnitControl

ミニポート ドライバーの HwStorUnitControl ルーチンへのポインター。 ポート ドライバーは、記憶域ユニット デバイスの制御要求でこのルーチンを呼び出します。

備考

すべての Storport ミニポート ドライバーの DriverEntry ルーチンは、ミニポート ドライバーが最初にゼロになった後、StorPortInitialize を呼び出してから、HW_INITIALIZATION_DATAのメンバーを設定する必要があります。

必要条件

要件 価値
ヘッダー storport.h (Storport.h を含む)