次の方法で共有


ScsiPortValidateRange 関数 (srb.h)

ScsiPortValidateRange ルーチンは、指定したアクセス範囲の値が既に別のドライバーによってレジストリに要求されているかどうかを示します。

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

構文

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 場合、範囲はメモリ空間内にあります。

戻り値

ScsiPortValidateRange は、HwScsiFindAdapter ルーチンがマップされた範囲を安全にマップし、使用してアダプターにアクセスできる場合、TRUE を返します。 ScsiPortValidateRange は、指定したアクセス範囲の値が別のドライバーによってレジストリに既に要求されている場合、FALSE を返します。

備考

ScsiPortValidateRange は、ミニポート ドライバーの HwScsiFindAdapter ルーチンからのみ呼び出すことができます。 他のミニポート ドライバー ルーチンからの呼び出しは、システムエラーまたは呼び出し元の不適切な操作になります。

オペレーティング システム固有のポート ドライバーがミニポート ドライバーの HwScsiFindAdapter ルーチンを呼び出す前に、PORT_CONFIGURATION_INFORMATION構造体の AccessRanges 要素を初期化する場合、ミニポート ドライバーは、指定された値を ScsiPortGetDeviceBase に渡し、範囲のマップされた論理アドレスを使用して、HBA がサポートされているかどうかを判断する必要があります。

ポート ドライバーは、ACCESS_RANGE型の要素にアダプターのバス相対アドレス範囲の完全な説明を入力するか、ポート ドライバーは要素のすべてのメンバーをゼロにします。

既定 ゼロで設定された AccessRanges 要素の入力の場合、HwScsiFindAdapter ルーチンは、指定された I/O バスでサポートされているアダプターの検索を試みることができます。 このような状況では、ミニポート ドライバーには通常、HBA の種類のドライバーによって決定された既定のアドレスのセットがあります。 ただし、以前に読み込まれたドライバーは、このミニポート ドライバーの既定のアドレス範囲のいずれかで初期化されたアダプターを既に使用している可能性があります。特に、一部のデバイスが x86 実モードで初期化される x86 専用システムでは。 このようなデバイスが誤って再プログラミングされないようにするには、各ミニポート ドライバーの HwScsiFindAdapter ルーチンは、ドライバーが指定したアドレスを ScsiPortGetDeviceBase にマップし、マップされた論理アドレスを使用して I/O バス上のアダプターをインターロゲートする前に、ScsiPortValidateRange 呼び出す必要があります。

ScsiPortValidateRange が FALSE 返す場合、HwScsiFindAdapter は、別のドライバーが既にレジストリ内の範囲を要求しているため、入力範囲のアドレスのマップを試みてはなりません。

ScsiPortValidateRange が TRUE 返す場合は、HwScsiFindAdapter 安全に次の操作を実行できます。

  1. ScsiPortGetDeviceBase を使用して、バス相対範囲アドレスシステム空間論理範囲アドレスにマップします。
  2. マップされた論理アドレスを ScsiPortRead/WriteXxx と共に使用して、アダプターが実際にドライバーがサポートする HBA であるかどうかを判断します。
ミニポート ドライバーがサポートする HBA の ScsiPortValidateRange に正常に渡された範囲を使用する場合、そのドライバーは、PORT_CONFIGURATION_INFORMATIONの AccessRanges 要素の RangeInMemory メンバーを設定するときに、InIoSpace 値を反転する必要があります。

ScsiPortValidateRange は、バスの相対アドレスを表すために SCSI_PHYSICAL_ADDRESS を使用します。

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

SCSI_PHYSICAL_ADDRESS の種類は、物理アドレスまたはバスの相対アドレスを表すために SCSI ミニポート ドライバーが使用するオペレーティング システムに依存しないデータ型です。

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

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー srb.h (ミニポート h、Scsi.h を含む)
ライブラリ Scsiport.lib

関連項目

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetDeviceBase

ScsiPortInitialize