次の方法で共有


PORT_CONFIGURATION_INFORMATION 構造体 (srb.h)

PORT_CONFIGURATION_INFORMATION (SCSI) には、HBA の構成情報が含まれています。 OS 固有のポート ドライバーは、この構造体を割り当てて初期化し、できるだけ多くの HBA 固有の構成情報を提供し、ミニポート ドライバーの HwScsiFindAdapter ルーチンに構造体を渡します。 ポート ドライバーは、ミニポート ドライバーのHW_INITIALIZATION_DATA構造体からこの構造体の情報の一部を取得します。 ミニポート ドライバーの HwScsiFindAdapter ルーチンは、ミニポート ドライバーが HBA をサポートできるかどうかを判断し、その場合は、PORT_CONFIGURATION_INFORMATION構造体の関連する残りの情報を入力します。

注意

SCSI ポート ドライバーと SCSI ミニポート ドライバー モデルは、今後変更または使用できない可能性があります。 代わりに 、Storport ドライバー モデルと Storport ミニポート ドライバー モデルを使用してください。

構文

typedef struct _PORT_CONFIGURATION_INFORMATION {
  ULONG           Length;
  ULONG           SystemIoBusNumber;
  INTERFACE_TYPE  AdapterInterfaceType;
  ULONG           BusInterruptLevel;
  ULONG           BusInterruptVector;
  KINTERRUPT_MODE InterruptMode;
  ULONG           MaximumTransferLength;
  ULONG           NumberOfPhysicalBreaks;
  ULONG           DmaChannel;
  ULONG           DmaPort;
  DMA_WIDTH       DmaWidth;
  DMA_SPEED       DmaSpeed;
  ULONG           AlignmentMask;
  ULONG           NumberOfAccessRanges;
  ACCESS_RANGE( )   *AccessRanges[];
  PVOID           Reserved;
  UCHAR           NumberOfBuses;
  UCHAR           InitiatorBusId[8];
  BOOLEAN         ScatterGather;
  BOOLEAN         Master;
  BOOLEAN         CachesData;
  BOOLEAN         AdapterScansDown;
  BOOLEAN         AtdiskPrimaryClaimed;
  BOOLEAN         AtdiskSecondaryClaimed;
  BOOLEAN         Dma32BitAddresses;
  BOOLEAN         DemandMode;
  BOOLEAN         MapBuffers;
  BOOLEAN         NeedPhysicalAddresses;
  BOOLEAN         TaggedQueuing;
  BOOLEAN         AutoRequestSense;
  BOOLEAN         MultipleRequestPerLu;
  BOOLEAN         ReceiveEvent;
  BOOLEAN         RealModeInitialized;
  BOOLEAN         BufferAccessScsiPortControlled;
  UCHAR           MaximumNumberOfTargets;
  UCHAR           ReservedUchars[2];
  ULONG           SlotNumber;
  ULONG           BusInterruptLevel2;
  ULONG           BusInterruptVector2;
  KINTERRUPT_MODE InterruptMode2;
  ULONG           DmaChannel2;
  ULONG           DmaPort2;
  DMA_WIDTH       DmaWidth2;
  DMA_SPEED       DmaSpeed2;
  ULONG           DeviceExtensionSize;
  ULONG           SpecificLuExtensionSize;
  ULONG           SrbExtensionSize;
  UCHAR           Dma64BitAddresses;
  BOOLEAN         ResetTargetSupported;
  UCHAR           MaximumNumberOfLogicalUnits;
  BOOLEAN         WmiDataProvider;
} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;

メンバー

Length

この構造体のサイズをバイト単位で指定します。 実際には、OS 固有のポート ドライバーによって常に初期化されるこのメンバーは、ポート ドライバーによって使用されるこの構造体のバージョンを示します。

SystemIoBusNumber

HBA が接続されている I/O バスのシステム割り当て番号を指定します。 OS 固有のポート ドライバーは、常にこのメンバーを初期化します。 プラットフォームには、指定された AdapterInterfaceType の I/O バスが複数ある可能性があるため、その値はシステム割り当てです。

AdapterInterfaceType

I/O バス インターフェイスを識別します。 OS 固有のポート ドライバーは常に、このメンバーを HW_INITIALIZATION_DATA (SCSI) 構造体でミニポート ドライバーによって指定された値に設定します。

BusInterruptLevel

バス相対割り込み要求レベルを指定します。 OS 固有のポート ドライバーは、HBA の割り込みの使用に関する想定を行わないので、既定値は 0 です。 指定された AdapterInterfaceType と HBA に応じて、このメンバーに設定された値は、 Isa および MicroChannel 型バスなどのバスの IRQL に対応できます。 アダプターがレベルに依存する割り込みに対して構成されている場合、 Eisa HBA のドライバーは、HBA のバス相対 IRQL にこの値を設定する必要があります。

BusInterruptVector

HBA によって返されるバス相対ベクトルを指定します。 OS 固有のポート ドライバーは、HBA の割り込みの使用に関する想定を行わないので、既定値は 0 です。 このメンバーは、HBA の BusInterruptLevel メンバーを設定するドライバーとは無関係です。 これは、 PCIBus などの割り込みベクトルを使用する I/O バスの種類の HBA に関連します。

InterruptMode

HBA で LevelSensitive または Latched ("エッジ トリガー" と呼ばれることもあります) 割り込みを使用するかどうかを指定します。 OS 固有のポート ドライバーは、バスとデバイスの適切な値 (PCIBusLevelSensitive など) にこのメンバーを初期化します。 Eisa HBA のドライバーは、アダプターがレベル依存の割り込み用に構成されている場合に、この値をリセットする必要があります。同様に、MicroChannel 型バスなど、レベルに依存する割り込みを使用する I/O バス上の HBA のドライバーが必要です。

MaximumTransferLength

HBA が 1 回の転送操作で転送できる最大バイト数を指定します。 既定では、このメンバーの値はSP_UNINITIALIZED_VALUEです。これは、無制限の最大転送サイズを示します。 HBA の転送サポートが制限されている場合、ミニポート ドライバーは HBA の転送容量に従ってこのメンバーをリセットする必要があります。 ミニポート ドライバーの HwScsiInterrupt ルーチンで HBA の割り込みを無効にできない場合は、ドライバーの開発中にこのメンバーを調整して、そのミニポート ドライバーの ISR に費やされた時間によってマウスが "ジャンプ" したり、シリアル/並列スループットがユーザーに目立つレベルに低下したりしないようにすることができます。

NumberOfPhysicalBreaks

HBA がスキャッター/ギャザーをサポートしている場合にデータ バッファーが持つ可能性があるアドレス範囲間の区切りの最大数を指定します。 つまり、散布図/収集リストの数から 1 を引いた数です。 既定では、このメンバーの値は SP_UNINITIALIZED_VALUE です。これは、HBA が無制限の数の物理的な不連続をサポートできることを示します。 ポート ドライバーがこのメンバーの値を設定する場合、ミニポート ドライバーは値を小さくしても、それ以上は調整できません。 このメンバーがSP_UNINITIALIZED_VALUE場合、ミニポート ドライバーは、HBA の散布/収集容量に従ってこのメンバーをリセットする必要があります。ゼロは、スキャッター/ギャザーのサポートを表しません。

DmaChannel

下位 HBA によって使用される DMA チャネルを指定します。 既定では、このメンバーの値はSP_UNINITIALIZED_VALUE。 HBA がシステム DMA コントローラーを使用し、指定された AdapterInterfaceTypeMicroChannel を除く任意の値である場合、ミニポート ドライバーはこのメンバーをリセットする必要があります。

DmaPort

下位 HBA によって使用される DMA ポートを指定します。 既定では、このメンバーの値はSP_UNINITIALIZED_VALUE。 HBA でシステム DMA コントローラーが使用され、指定された AdapterInterfaceTypeMicroChannel の場合、ミニポート ドライバーはこのメンバーを設定する必要があります。

DmaWidth

HBA で DMA が使用される場合の DMA 転送の幅を指定します。 既定では、このメンバーの値は 0 です。 HBA が DMA を行う場合、ミニポート ドライバーは、Width8Bits、Width16Bits、または Width32Bits のいずれかにこのメンバーをリセットする必要があります。

DmaSpeed

Eisa HBA の DMA データ転送速度を指定します。 既定では、このメンバーの値は互換性のタイミングを指定します。 このメンバーに使用できる値は、 CompatibleTypeATypeB、または TypeC のいずれかです。

AlignmentMask

転送操作に HBA で必要なバッファーのアラインメント制限を示すマスクが含まれています。 有効なマスク値は、Windows のさまざまなバージョンのメモリ マネージャーの特性によっても制限されます。 Windows 95 または Windows 98 で許可されるマスク値は、0 (バイトアライン)、1 (単語アライン) または 3 (DWORD アライン) です。 Windows NT と Windows 2000 では、有効なマスク値は 0 (バイトアライン)、1 (ワードアライン)、3 (DWORD アライン)、7 (二重 DWORD アラインメント) です。 ミニポート ドライバーは、HBA が散布/収集をサポートしている場合、このマスクを設定する必要があります。

NumberOfAccessRanges

次に説明する、配列内の AccessRanges 要素の数を指定します。 OS 固有のポート ドライバーは、 ミニポート ドライバーが ScsiPortInitialize と呼ばれるときに、常にHW_INITIALIZATION_DATA構造体で渡される値にこのメンバーを設定します。

AccessRanges

Reserved

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

NumberOfBuses

HBA によって制御される SCSI バスの数を指定します。 既定では、このメンバーの値は 0 です。

InitiatorBusId[8]

イニシエーター バス ID を示します。 入力 InitiatorBusId[0] の値が 0 の場合、ミニポート ドライバーは、HBA が HBA のクエリによって決定された特定の値の使用を必要としない場合に既定値を割り当てることができます。 それ以外の場合、ミニポート ドライバーは、可能であれば、ポート ドライバーによって割り当てられた 0 以外の値を使用する必要があります。 すべてのミニポート ドライバーは、必要に応じて HBA に対してクエリを実行して適切な値を決定するために、その HBA が使用しているものと一致するように InitiatorBusId 仕様を更新する必要があります。

ミニポート ドライバーは、 NumberOfBuses の値で示されているように、HBA でサポートされている各 SCSI バスのエントリを設定する必要があります。

ScatterGather

HBA で散布/収集がサポートされている 場合に TRUE を 示します。 FALSE の場合、HBA は散布/収集をサポートしません。 既定では、このメンバーの値は FALSE です

Master

HBA がバス マスターであることを TRUE にする タイミングを示します。 FALSE の場合、HBA はバス マスターではありません。 既定では、このメンバーの値は FALSE です

CachesData

HBA がデータをキャッシュするか、周辺機器のキャッシュ状態を維持することを TRUE にするかどうかを示します。 FALSE の場合、HBA はデータをキャッシュしたり、周辺機器のキャッシュ状態を維持したりしません。 既定では、このメンバーの値は FALSE です。 これが TRUE にリセットされた場合、OS 固有のポート ドライバーは、ファイル システム キャッシュのフラッシュやシステムのシャットダウンなど、特定のシステム イベントが発生したときにミニポート ドライバーに通知します。 たとえば、バス上のコントローラーが 2 つのディスクをミラー化する場合、ミニポート ドライバーは通常、このメンバーを TRUE に設定します。

AdapterScansDown

HBA の BIOS が SCSI バス ターゲットを 7 から 0 にスキャンする場合に TRUE を示します。 FALSE の場合、HBA の BIOS は SCSI バス ターゲットを検索します。最初は ID が 0 で、MaximumTargetIds まで上方向にスキャンされます (ただし含まれません)。 既定では、 AdapterScansDown の値は FALSE です

AtdiskPrimaryClaimed

プライマリ "AT" (WD1003 互換) のディスク アドレス範囲 (0x1FFに0x1F0) が、そのデバイスの別のドライバーによってレジストリに要求された場合に TRUE を 示します。 OS 固有のポート ドライバーは、常にこのメンバーを初期化します。 このメンバーの入力値が TRUE の場合、ミニポート ドライバーは、既に読み込まれたドライバーがデバイスの範囲を要求したと想定する必要があります。 入力値が FALSE の場合、ミニポート ドライバーは、"AT" ディスク コントローラーをエミュレートし、このメンバーを TRUE にリセットする HBA のアドレス範囲を要求できるため、"AT" ディスク ドライバーまたはその後読み込まれたミニポート ドライバーによるこの範囲へのアクセスを防止できます。

AtdiskSecondaryClaimed

セカンダリ AT ディスク アドレス範囲が、0x17Fに0x170が、そのデバイスの別のドライバーによってレジストリに要求されたことを TRUE に するかどうかを示します。 FALSE の場合、セカンダリ AT ディスク アドレスの範囲が別のドライバーによってレジストリに要求されていません。 OS 固有のポート ドライバーは、常にこのメンバーを初期化します。 ミニポート ドライバーは、このメンバーを AtdiskPrimaryClaimed として扱う必要があります。

Dma32BitAddresses

HBA に 32 個のアドレス行があり、0x00FFFFFFより大きい物理アドレスを持つメモリにアクセスできることを TRUE にする タイミングを示します。 FALSE の場合、HBA には 32 以外の数の DMA アドレス行があります。 既定では、このメンバーの値は FALSE です。 ミニポート ドライバーが Dma64BitAddresses を設定する場合、このメンバーは FALSE である必要があります。

DemandMode

システム DMA コントローラーを単一サイクル操作ではなく需要モード用にプログラムする必要があることを TRUE にする タイミングを示します。 HBA が下位デバイスではない場合、このメンバーは FALSE である必要があります。

MapBuffers

データ バッファーをシステム仮想アドレス範囲にマップする必要がある 場合に TRUE を 示します。 FALSE の場合、データ バッファーをシステム仮想アドレスにマップする必要はありません。 OS 固有のポート ドライバーは、ミニポート ドライバーが ScsiPortInitialize と呼ばれるときに、常にHW_INITIALIZATION_DATA (SCSI) 構造体で渡された値にこのメンバーを設定します。 ミニポート ドライバーは、制御する特定の HBA のこの値をリセットできます。 FALSE の場合、ミニポート ドライバーは Srb.DataBuffer に直接アクセスできません。

NeedPhysicalAddresses

ミニポート ドライバーが仮想アドレスを物理アドレスに変換する必要があります、HBA で必要に応じて TRUE を 示します。 FALSE の場合、ミニポート ドライバーは仮想アドレスを物理アドレスに変換する必要はありません。 OS 固有のポート ドライバーは、ミニポート ドライバーが ScsiPortInitialize と呼ばれるときに、常にHW_INITIALIZATION_DATA (SCSI) 構造体で渡された値にこのメンバーを設定します。 ミニポート ドライバーは、制御する特定の HBA のこの値をリセットできます。

TaggedQueuing

HBA が SCSI タグを使用した複数の要求のキューをサポートすることを TRUE に するかどうかを示します。 FALSE の場合、HBA は SCSI タグ付きキューをサポートしません。 OS 固有のポート ドライバーは、ミニポート ドライバーが ScsiPortInitialize と呼ばれるときに、常にHW_INITIALIZATION_DATA (SCSI) 構造体で渡された値にこのメンバーを設定します。 ミニポート ドライバーは、制御する特定の HBA のこの値をリセットできます。

AutoRequestSense

HBA が自動要求センスをサポートする 場合に TRUE を 示します。 FALSE の場合、HBA は自動要求センスをサポートしません。 OS 固有のポート ドライバーは、ミニポート ドライバーが ScsiPortInitialize と呼ばれるときに、常にHW_INITIALIZATION_DATA (SCSI) 構造体で渡された値にこのメンバーを設定します。 ミニポート ドライバーは、制御する特定の HBA のこの値をリセットできます。 バス マスター HBA のドライバーが ScsiPortGetUncachedExtension を呼び出す前に、このメンバーを TRUE に設定する必要があります。

MultipleRequestPerLu

HBA が論理ユニットごとに複数の要求をサポートすることを TRUE にする タイミングを示します。 FALSE の場合、HBA は論理ユニットごとに複数の要求をサポートしません。 アダプターが要求をキャッシュするメカニズムは、アダプター定義です。 OS 固有のポート ドライバーは、ミニポート ドライバーが ScsiPortInitialize と呼ばれるときに、常にHW_INITIALIZATION_DATA (SCSI) 構造体で渡された値にこのメンバーを設定します。 ミニポート ドライバーは、制御する特定の HBA のこの値をリセットできます。

ReceiveEvent

HBA が SCSI 受信イベント操作をサポートすることを TRUE にする タイミングを示します。 FALSE の場合、HBA は SCSI 受信イベント操作をサポートしません。 OS 固有のポート ドライバーは、ミニポート ドライバーが ScsiPortInitialize と呼ばれるときに、常にHW_INITIALIZATION_DATA (SCSI) 構造体で渡された値にこのメンバーを設定します。 ミニポート ドライバーは、制御する特定の HBA のこの値をリセットできます。

RealModeInitialized

(x86 専用) の実モード ドライバーが既に HBA を初期化したことを TRUE に することを示します。 FALSE の場合、HBA は以前に実モード ドライバーによって初期化されていません。 OS に依存するポート ドライバーは、常にこのメンバーを初期化します。 TRUE に設定されている場合、ミニポート ドライバーは、ドライバーの初期化シーケンスが実モード HBA の初期化と同じ場合、その HBA を初期化する必要があります。このような状況では HBA を再初期化しないと、ミニポート ドライバーの読み込みがはるかに高速になります。 このメンバーの値は、x86 ベースのプラットフォームで保護モードで実行中に常に HBA を初期化するミニポート ドライバーと、CISC ベースまたは RISC ベースのプラットフォームで実行されているかどうかにかかわらず、重要でないすべてのミニポート ドライバーとは無関係です。

BufferAccessScsiPortControlled

ミニポート ドライバーが常に ScsiPortXxx を呼び出して SRB のデータ バッファーや要求センス情報にアクセスし、OS 固有のポート ドライバーが I/O 要求処理を最適化できるようにする場合に TRUE を示します。 FALSE の場合、ミニポート ドライバーは、データ バッファーまたは要求センス情報にアクセスするために ScsiPortXxx ルーチンを呼び出す必要はありません。 このメンバーを FALSE に設定すると、HBA の I/O パフォーマンスが低下する可能性があります。 ScsiPortXxx 以外のルーチンを呼び出すと、Microsoft オペレーティング システム全体でミニポート ドライバーを移植できなくなります。

MaximumNumberOfTargets

HBA が制御できるターゲット周辺機器の数を指定します。 既定では、このメンバーの値は SCSI 標準に従ってSCSI_MAXIMUM_TARGETSされます。 ミニポート ドライバーは、HBA の機能が制限されている場合、または HBA にワイド SCSI またはファイバー チャネル機能があることを示すより大きな値に、より小さい値にこのメンバーをリセットできます。 この値はSCSI_MAXIMUM_TARGETS_PER_BUSに制限されます。

ReservedUchars[2]

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

SlotNumber

ミニポート ドライバーが ScsiPortInitialize と呼ばれるときに、HW_INITIALIZATION_DATA (SCSI) 構造体で指定された VendorIdDeviceId に一致する値を持つ HBA のスロット番号を指定します。

BusInterruptLevel2

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

BusInterruptVector2

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

InterruptMode2

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

DmaChannel2

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

DmaPort2

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

DmaWidth2

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

DmaSpeed2

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

DeviceExtensionSize

64K を超えるデータ転送を処理するために、ミニポート ドライバーに必要なサイズ (バイト単位) を指定します。これには、このドライバーのレジストリで定義されているサイズよりも大きな散布/収集リストが必要になる場合があります。

SpecificLuExtensionSize

64K を超えるデータ転送を処理するために、ミニポート ドライバーが論理ユニットごとの記憶域 (存在する場合) に必要なサイズをバイト単位で指定します。 ミニポート ドライバーがストレージを必要とする LU ごとの情報を維持しない場合は、このメンバーを 0 に設定したままにします。 この値は、コントローラーが実際にサポートできる内容に関係なく、HBA が 32 ビット アドレスを受け取ることができるという前提に基づいています。 64 ビット アドレスを処理するために LUN または SRB 拡張機能に追加の領域が必要な場合は、 ScsiPortGetUncachedExtension などのルーチンで使用する前に、この値に対して適切な調整を行う必要があります。

SrbExtensionSize

64,000 を超えるデータ転送を処理するために、要求ごとの記憶域 (存在する場合) のミニポート ドライバーに必要なサイズをバイト単位で指定します。 ScsiPortGetUncachedExtension を呼び出す前にこのメンバーを設定して、NumberOfPhysicalBreaks に基づいて要求ごとのストレージのサイズを変更します。 ミニポート ドライバーが記憶域を必要とする SRB ごとの情報を維持しない場合は、このメンバーをゼロのままにします。 この値は、コントローラーが実際にサポートできる内容に関係なく、HBA が 32 ビット アドレスを受け取ることができるという前提に基づいています。 64 ビット アドレスを処理するために LUN または SRB 拡張機能に追加の領域が必要な場合は、 ScsiPortGetUncachedExtension などのルーチンで使用する前に、この値に対して適切な調整を行う必要があります。

Dma64BitAddresses

HBA が 4 GB を超えるアドレスにアクセスできることを示します。 Dma64BitAddresses に SCSI_DMA64_MINIPORT_SUPPORTED の値が含まれている場合は0x0FFFFFFFF。 Windows 2000 より前の ScsiPort は、 HW_INITIALIZATION_DATA (SCSI) の内容に基づいてこの値を設定します。 この点は変更されました。 Windows 2000 では、 Dma64BitAddresses の値は、ミニポート ドライバー コールバック HwScsiFindAdapter のみで決定されます。 オペレーティング システムが 64 ビットアドレス空間をサポートしている場合、ポート ドライバーは、このメンバーのミニポート ドライバーにSCSI_DMA64_SYSTEM_SUPPORTEDの値を渡します。 PORT_CONFIGURATION_INFORMATION によって記述された HBA で 32 ビットを超えるアドレス空間もサポートされている場合、ポート/ミニポート ドライバーは完全な 64 ビット アドレス指定をサポートするために必要です。ミニポート ドライバーのコールバック HwScsiFindAdapter は、 Dma64BitAddresses に SCSI_DMA64_MINIPORT_SUPPORTED の値を割り当てて、ポート ドライバーによって割り当てられた以前の値を書き込むことでこれを示します。 ミニポート ドライバーが ScsiPortGetUncachedExtension を呼び出す前に、Dma64BitAddresses メンバーに正しい値を割り当てる必要があります。

ResetTargetSupported

互換性のために残されています。 ScsiPort ドライバーは、ミニポート ドライバーにSRB_FUNCTION_RESET_DEVICE要求を送信しなくなりました。 このメンバーは使用しないでください。

MaximumNumberOfLogicalUnits

HBA が制御できるターゲットあたりの論理ユニットの最大数を指定します。 既定では、このメンバーの値はSCSI_MAXIMUM_LOGICAL_UNITS。 ミニポート ドライバーは、HBA の機能が制限されている場合、または HBA に SCSI-3 機能があることを示すより大きな値に、より小さい値にこのメンバーをリセットできます。

WmiDataProvider

ミニポート ドライバーが Windows 管理インストルメンテーション (WMI) 要求に応答する 場合に TRUE を 示します。 FALSE の場合、ミニポート ドライバーは Windows Management Instrumentation (WMI) 要求に応答しません。 既定では、このメンバーの値は FALSE です

注釈

初期化される特定のメンバーは、HBA ミニポート ドライバーと、OS 固有のポート ドライバーで使用できる構成情報によって異なります。 OS 固有のポート ドライバーは、ミニポート ドライバーの HwScsiFindAdapter ルーチンに構成情報を提供できないすべてのメンバーの既定値を設定します。

OS 固有のポート ドライバーが初期化されたすべての値を渡さない場合、すべての HBA ミニポート ドライバーには、関連するメンバーに使用する既定値のセットが少なくとも 1 つ必要です。

HwScsiFindAdapter ルーチンは、ドライバーがサポートする HBA に関連するすべてのメンバーを更新する必要があります。

ミニポート ドライバーより後で読み込まれるWindows NT記憶域クラス ドライバーは、後続の I/O 要求を設定するために各ミニポート ドライバーの HwScsiFindAdapter ルーチンによって提供される情報に依存します。 たとえば、各ミニポート ドライバーによって提供される MaximumTransferLength 値と NumberOfPhysicalBreaks 値は、クラス ドライバーが大きな転送要求を HBA の制限に合わせて一連の部分転送に分割する必要があるかどうかを制御します。

PORT_CONFIGURATION_INFORMATION の Dma64BitAddresses メンバーは、ブール値とは見なされなくなりました。 SCSI_DMA64_SYSTEM_SUPPORTED の値は、ポート/ミニポート ドライバーが 64 ビットアドレス指定をサポートするために必要であることを示しますが、 ScsiPortGetUncachedExtension ルーチンは、64 ビットサポートが必要であることを示す Dma64BitAddresses の 0 以外の値を解釈します。 つまり、Dma64BitAddresses にブール値を割り当てるレガシ ドライバーによって呼び出された場合でも、ScsiPortGetUncachedExtension は正常に機能します。

Dma64BitAddresses に加えて、PORT_CONFIGURATION_INFORMATIONとHW_INITIALIZATION_DATAの両方に SpecificLuExtensionSizeSrbExtensionSize という名前のメンバーのペアがあり、その値を異なる方法で処理する必要があります。 ミニポート ドライバーは、コントローラーが実際にサポートできる内容に関係なく、HBA が 32 ビット アドレスを受け取ることができるという前提に基づいて、HW_INITIALIZATION_DATAの SpecificLuExtensionSizeSrbExtensionSize の初期値を計算する必要があります。 PORT_CONFIGURATION_INFORMATIONの SpecificLuExtensionSizeSrbExtensionSize の既定値は、PORT_CONFIGURATION_INFORMATION の値が HW_INITIALIZATION_DATA の値から派生するため、32 ビット アドレス指定の前提にも基づいています。

つまり、ミニポート ドライバーが 64 ビットの物理アドレスを処理するために LUN 拡張機能または SRB 拡張機能に追加の領域が必要な場合は、ScsiPortGetUncachedExtension にPORT_CONFIGURATION_INFORMATIONを渡す前に、これを考慮するために、PORT_CONFIGURATION_INFORMATIONの SpecificLuExtensionSizeSrbExtensionSize の値を変更する必要があります。

要件

要件
Header srb.h (Srb.h、Storport.h、Strmini.h を含む)

こちらもご覧ください

ACCESS_RANGE

HW_INITIALIZATION_DATA (SCSI)

HwScsiFindAdapter

ScsiPortGetDeviceBase

ScsiPortGetUncachedExtension

ScsiPortInitialize

ScsiPortValidateRange