ScsiPortValidateRange 関数 (srb.h)
ScsiPortValidateRange ルーチンは、指定したアクセス範囲の値が別のドライバーによってレジストリに既に要求されているかどうかを示します。
構文
SCSIPORT_API BOOLEAN ScsiPortValidateRange(
[in] PVOID HwDeviceExtension,
[in] INTERFACE_TYPE BusType,
[in] ULONG SystemIoBusNumber,
[in] SCSI_PHYSICAL_ADDRESS IoAddress,
[in] ULONG NumberOfBytes,
[in] BOOLEAN InIoSpace
);
パラメーター
[in] HwDeviceExtension
ハードウェア デバイス拡張機能へのポインター。 これは、ポート ドライバーが割り当て、ミニポート ドライバーの代わりに初期化する HBA ごとの記憶域です。 ミニポート ドライバーは通常、HBA の状態や HBA のマップされたアクセス範囲など、この拡張機能に HBA 固有の情報を格納します。 この領域は、ミニポート ドライバーが ScsiPortInitialize を呼び出した直後に、HBA のデバイス オブジェクトの DeviceExtension-HwDeviceExtension> メンバーのミニポート ドライバーで使用できます。 ポート ドライバーは、デバイスを削除すると、このメモリを解放します。
[in] BusType
HwScsiFindAdapter が呼び出されたときに、PORT_CONFIGURATION_INFORMATION構造体の AdapterInterfaceType メンバーの値を指定します。
[in] SystemIoBusNumber
HwScsiFindAdapter が呼び出されたときの構成情報の SystemIoBusNumber メンバーの値を指定します。
[in] IoAddress
ミニポート ドライバーの HwScsiFindAdapter ルーチンがそのアドレスでアダプターのアクセス範囲をマップする前に検証するポートまたはデバイス メモリの範囲のバス相対ベース アドレスを指定します。
[in] NumberOfBytes
範囲内の要素のサイズをバイト単位または数で指定します。
[in] InIoSpace
範囲がメモリ内ではなく I/O 領域にあることを TRUE にするタイミングを示します。 FALSE の場合、範囲はメモリ空間内にあります。
戻り値
HwScsiFindAdapter ルーチンがマップされた範囲を安全にマップして使用してアダプターにアクセスできる場合、ScsiPortValidateRange は TRUE を返します。 指定したアクセス範囲の値が別のドライバーによってレジストリに既に要求されている場合、ScsiPortValidateRange は FALSE を返します。
注釈
ScsiPortValidateRange は、ミニポート ドライバーの HwScsiFindAdapter ルーチンからのみ呼び出すことができます。 他のミニポート ドライバー ルーチンからの呼び出しでは、呼び出し元のシステムエラーまたは正しくない操作が発生します。
オペレーティング システム固有のポート ドライバーがミニポート ドライバーの HwScsiFindAdapter ルーチンを呼び出す前に、PORT_CONFIGURATION_INFORMATION構造体の AccessRanges 要素を初期化する場合、ミニポート ドライバーは指定された値を ScsiPortGetDeviceBase に渡し、範囲のマップされた論理アドレスを使用して HBA がサポートされているかどうかを判断する必要があります。
ポート ドライバーは、アダプターのバス相対アドレス範囲の完全な説明をACCESS_RANGE型の要素に入力するか、ポート ドライバーは要素のすべてのメンバーをゼロにします。
既定のゼロで設定された入力 AccessRanges 要素の場合、 HwScsiFindAdapter ルーチンは、指定された I/O バスでサポートされているアダプターの検索を試みることができます。 このような状況では、ミニポート ドライバーには通常、HBA の種類のドライバーによって決定された既定のアドレスのセットがあります。 ただし、以前に読み込まれたドライバーは、特に一部のデバイスが x86 実モードで初期化されている x86 専用システムでは、このミニポート ドライバーの既定のアドレス範囲のいずれかで初期化されたアダプターを既に使用している可能性があります。 このようなデバイスが誤って再プログラミングされるのを防ぐために、各ミニポート ドライバーの HwScsiFindAdapter ルーチンは 、ScsiPortValidateRange を呼び出してから、ドライバーが指定したアドレスを ScsiPortGetDeviceBase にマップしてから、マップされた論理アドレスを使用して I/O バス上のアダプターをインターロゲートする必要があります。
ScsiPortValidateRange が FALSE を返す場合、別のドライバーが既にレジストリ内の範囲を要求しているため、HwScsiFindAdapter は入力範囲アドレスのマップを試みてはいけません。
ScsiPortValidateRange が TRUE を返した場合、HwScsiFindAdapter は次の操作を安全に実行できます。
- ScsiPortGetDeviceBase を使用して、バス相対範囲アドレスをシステム空間の論理範囲アドレスにマップします。
- マップされた論理アドレスと ScsiPortRead/WriteXxx を 使用して、アダプターが実際にドライバーがサポートする HBA であるかどうかを判断します。
ScsiPortValidateRange は 、バス 相対アドレスを表すためにSCSI_PHYSICAL_ADDRESSを使用します。
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
SCSI_PHYSICAL_ADDRESSの種類は、物理アドレスまたはバス相対アドレスを表すために SCSI ミニポート ドライバーが使用するオペレーティング システムに依存しないデータ型です。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | srb.h (Miniport.h、Scsi.h を含む) |
Library | Scsiport.lib |