次の方法で共有


StorPortBuildScatterGatherList 関数 (storport.h)

StorPortBuildScatterGatherList ルーチンは、指定されたデータ バッファーの散布/収集リストを作成します。

構文

ULONG StorPortBuildScatterGatherList(
  [in]      PVOID                        HwDeviceExtension,
  [in]      PVOID                        Mdl,
  [in]      PVOID                        CurrentVa,
  [in]      ULONG                        Length,
  [in]      PPOST_SCATTER_GATHER_EXECUTE ExecutionRoutine,
  [in]      PVOID                        Context,
  [in]      BOOLEAN                      WriteToDevice,
  [in, out] PVOID                        ScatterGatherBuffer,
  [in]      ULONG                        ScatterGatherBufferLength
);

パラメーター

[in] HwDeviceExtension

ホスト バス アダプター (HBA) のハードウェア デバイス拡張機能へのポインター。

[in] Mdl

データ バッファーに関連付けられているメモリ ページを記述するメモリ記述子リスト (MDL) へのポインター。

[in] CurrentVa

データ バッファーの仮想アドレス。

[in] Length

データ バッファーの長さ (バイト単位)。

[in] ExecutionRoutine

ミニポート ドライバーが提供する ExecutionRoutine へのポインター。 Storport ドライバーは、散布図/収集リストの作成後にこのルーチンを呼び出します。 ミニポート ドライバーは、 StorPortBuildScatterGatherList ルーチンの呼び出しに続くコードではなく、実行ルーチン内の散布/収集リストを使用するすべての操作を実行する必要があります。

ExecutionRoutine は次のように宣言されます。

VOID
ExecutionRoutine (
    IN PVOID  *DeviceObject,
    IN PVOID  *Irp,
    IN PSTOR_SCATTER_GATHER_LIST  ScatterGather,
    IN PVOID  Context
    );

DeviceObject

ミニポート ドライバーは、このパラメーターを無視する必要があります。

Irp

ミニポート ドライバーは、このパラメーターを無視する必要があります。

ScatterGather

指定したデータ バッファーの散布/収集リストを含む STOR_SCATTER_GATHER_LIST 構造体へのポインター。

Context

StorPortBuildScatterGatherList 関数の Context パラメーターで指定されたコンテキスト値。

Storport ドライバーは、IRQL = DISPATCH_LEVELでミニポート ドライバーの ExecutionRoutine を呼び出します。

[in] Context

ポート ドライバーが ExecutionRoutine パラメーターで指定された実行ルーチンに渡すコンテキスト値。 実行ルーチンでは、この値を使用して要求を一意に識別します。

[in] WriteToDevice

DMA 転送の方向を示す値。 値 TRUE は、データ バッファーからデバイスへの転送を示し、FALSE の値は、デバイスからデータ バッファーへの転送を示します。

[in, out] ScatterGatherBuffer

散布図/収集リストを受け取るミニポート指定のバッファーへのポインター。 ミニポート ドライバーは、 StorPortAllocatePool ルーチンを呼び出すことによって、このバッファーのメモリを割り当てることができます。

[in] ScatterGatherBufferLength

ScatterGatherBuffer パラメーターが指すバッファーのサイズ (バイト単位)。

戻り値

StorPortBuildScatterGatherList は、次のいずれかの値を返します。

リターン コード 説明
STOR_STATUS_NOT_IMPLEMENTED
この関数は、アクティブなオペレーティング システムには実装されません。
STOR_STATUS_SUCCESS
ルーチンが散布図/収集リストを正常に作成したことを示します。
大事な 「解説」を参照してください。
 
STOR_STATUS_INVALID_PARAMETER
渡された HwDeviceExtensionNULL でした。
STOR_STATUS_INVALID_IRQL
呼び出しが無効な IRQL で行われました。
STOR_STATUS_INSUFFICIENT_RESOURCES
転送に使用できるマップ レジスタが不足しています。
STOR_STATUS_BUFFER_TOO_SMALL
Length パラメーターが大きすぎてバッファー内に収まらない。

注釈

ミニポート ドライバーは 、StorPortPutScatterGatherList を呼び出して、散布/収集リストの構築中に StorPortBuildScatterGatherList が割り当てたリソースを解放します。

ミニポート ドライバーは、分散/収集リストに割り当てられたメモリを解放または再利用する前に 、StorPortPutScatterGatherList を呼び出す必要があります。

メモStorPortBuildScatterGatherList がSTOR_STATUS_SUCCESSを返した場合、散布図/収集リストの作成後に ExecutionRoutine のコールバックが正常にキューに入れられ、実行されました。 ミニポートは 、ExecutionRoutine が呼び出されたか、 StorPortBuildScatterGatherList が返されたときに散布/収集リストの準備ができていると想定しないでください。 必要に応じて、ミニポートは StorPortBuildScatterGatherList に続くコードの実行を ExecutionRoutine のコールバックと同期して、散布/収集リストが使用可能であることを確認できます。
 

要件

要件
対象プラットフォーム ユニバーサル
Header storport.h (Storport.h を含む)
IRQL DISPATCH_LEVEL

こちらもご覧ください

STOR_SCATTER_GATHER_LIST

StorPortAllocatePool

StorPortPutScatterGatherList