次の方法で共有


PCALCULATE_SCATTER_GATHER_LIST_SIZE コールバック関数 (wdm.h)

CalculateScatterGatherList ルーチンは、特定のバッファーを保持するために必要な散布/収集リストのサイズをバイト単位で計算します。

構文

PCALCULATE_SCATTER_GATHER_LIST_SIZE PcalculateScatterGatherListSize;

NTSTATUS PcalculateScatterGatherListSize(
  [in]            PDMA_ADAPTER DmaAdapter,
  [in, optional]  PMDL Mdl,
  [in]            PVOID CurrentVa,
  [in]            ULONG Length,
  [out]           PULONG ScatterGatherListSize,
  [out, optional] PULONG pNumberOfMapRegisters
)
{...}

パラメーター

[in] DmaAdapter

バス マスター アダプターまたは DMA コントローラーを表す IoGetDmaAdapter によって返されるDMA_ADAPTER構造体へのポインター。

[in, optional] Mdl

NULL またはバッファーを含む MDL へのポインター。

[in] CurrentVa

バッファーの先頭の仮想アドレスへのポインター。

[in] Length

バッファーの長さをバイト単位で指定します。

[out] ScatterGatherListSize

ルーチンが散布/収集リストのサイズをバイト単位で返すために使用する変数へのポインター。

[out, optional] pNumberOfMapRegisters

NULL またはポインターは、バッファーに対する DMA 操作に必要なマップ レジスタの数を返すためにルーチンが使用する変数へのポインターです。

戻り値

CalculateScatterGatherList は、次のいずれかの状態コードを返します。

リターン コード 説明
STATUS_SUCCESS
ScatterGatherListSize および NumberOfMapRegisters で返される値は有効です。
STATUS_INSUFFICIENT_RESOURCES
必要なマップ レジスタの数が、使用可能なマップ レジスタの数を超えています。
STATUS_BUFFER_TOO_SMALL
指定した Length が大きすぎてバッファー内に収まりません。

注釈

CalculateScatterGatherList は、名前で直接呼び出すことができるシステム ルーチンではありません。 このルーチンは、 DMA_OPERATIONS 構造体で返されるアドレスからのポインターによってのみ呼び出すことができます。 ドライバーは、DeviceDescription パラメーターの Version メンバーをDEVICE_DESCRIPTION_VERSION2に設定して IoGetDmaAdapter を呼び出すことによって、このルーチンのアドレスを取得します。 IoGetDmaAdapterNULL を返す場合、このルーチンはプラットフォームでは使用できません。

呼び出し元が Mdl パラメーターに NULL を渡した場合、ルーチンは、指定されたバッファーの散布/収集リストを保持するために必要な最大サイズを計算します。 呼び出し元が Mdl パラメーターにバッファーを含む MDL を指定した場合、ルーチンは散布/収集リストを保持するために必要な実際のサイズを計算します。

ドライバーは CalculateScatterGatherList を使用して、 BuildScatterGatherList に渡す散布図/収集リスト バッファーを割り当てます。

要件

要件
サポートされている最小のクライアント Windows XP 以降のバージョンの Windows で使用できます。
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h を含む)
IRQL 任意のレベル

こちらもご覧ください

BuildScatterGatherList

DEVICE_DESCRIPTION

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

SCATTER_GATHER_LIST