次の方法で共有


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

GetDmaTransferInfo ルーチンは、分散/収集 DMA 転送の割り当て要件を計算します。

構文

PGET_DMA_TRANSFER_INFO PgetDmaTransferInfo;

NTSTATUS PgetDmaTransferInfo(
  [in]      PDMA_ADAPTER DmaAdapter,
  [in]      PMDL Mdl,
  [in]      ULONGLONG Offset,
  [in]      ULONG Length,
  [in]      BOOLEAN WriteOnly,
  [in, out] PDMA_TRANSFER_INFO TransferInfo
)
{...}

パラメーター

[in] DmaAdapter

DMA_ADAPTER 構造体へのポインター。 この構造体は、ドライバーのバス マスター DMA デバイスまたはシステム DMA チャネルを表すアダプター オブジェクトです。 呼び出し元は、IoGetDmaAdapter ルーチンへの以前の呼び出しからこのポインターを取得しました。

[in] Mdl

転送されるメモリのページを記述する MDL チェーンへのポインター。 詳細については、「解説」セクションを参照してください。

[in] Offset

散布図/収集 DMA 転送の開始オフセット。 このパラメーターは、MDL チェーン内の最初の MDL 内のバッファーの先頭からのバイト オフセットです。 MDL チェーン内の MDL でバッファー領域の合計 N バイトが指定されている場合、Offset の有効な値は 0 から N から 1 の範囲になります。

[in] Length

DMA 転送の長さ (バイト単位)。 MDL チェーンがバッファー領域の N バイトの合計を指定する場合、 の有効な値は、1 ~ N –オフセットの範囲です。

[in] WriteOnly

転送が書き込み専用操作 (つまり、メモリからのデバイスへの転送) であるかどうかを示します。 WriteOnly が TRUE の場合、転送に関して返される情報が読み取りトランザクションに対して有効でない可能性があります。 このパラメーターは、キャッシュの一貫性を強制するために、バッファー境界で追加のキャッシュ制御操作が必要であることを示している場合があります。

[in, out] TransferInfo

呼び出し元によって割り当てられた DMA_TRANSFER_INFO 構造体へのポインター。 呼び出し元は、getDmaTransferInfo を呼び出す前に、構造体の Version メンバーDMA_TRANSFER_INFO_VERSION1に設定する必要があります。

戻り値

GetDmaTransferInfo 呼び出しが成功した場合、STATUS_SUCCESSが返されます。 考えられるエラー戻り値には、次の状態コードが含まれます。

リターン コード 形容
STATUS_NOT_SUPPORTED
ルーチンは、指定されたバージョンの DMA_TRANSFER_INFO_XXX 構造体をサポートしていません。

備考

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

GetDmaTransferInfo を使用して、BuildScatterGatherListEx および mapTransferEx ルーチンに割り当てる散布図/収集バッファーのサイズ 計算します。

GetDmaTransferInfo は、CalculateScatterGatherList ルーチン 置き換え、BuildScatterGatherListEx で使用する方が便利です。

MdlOffset、および Length パラメーターは、分散/収集 DMA 転送のバッファーとして使用する物理メモリ領域のコレクションを指定します。 通常、各物理メモリ領域はページまたはページの一部です。 GetDmaTransferInfo は、この転送の割り当て要件を決定します。 これらの要件には、次のものが含まれます。

  • 散布図/収集リスト内の要素の数。 各要素は、物理的に連続したメモリ ブロックを記述する SCATTER_GATHER_ELEMENT 構造体です。
  • 指定した散布図/収集リストを保持するために割り当てるメモリの量。 (このメモリ割り当てには、I/O バッファーを記述するが、I/O バッファー自体については説明しない、散布図/収集リストに必要な領域が含まれます)。
  • 散布図/収集リストの物理アドレスを論理アドレスに変換するために必要なマップ レジスタの数。
DMA_TRANSFER_INFO_XXX 構造体のバージョン 1 で提供される DMA 転送情報については、DMA_TRANSFER_INFO_V1を参照してください。

MDL は、ロックダウンされた連続した仮想メモリ ブロックの基になる物理メモリ ページを記述します。 通常、これらの物理メモリ ページは連続しません。 MDL チェーンは、I/O データのバッファーに使用できるメモリを記述する MDL の順序付けられたコレクションです。 通常、チェーン内の MDL によって記述される仮想メモリ領域は非連続です。 MDL および MDL チェーンの詳細については、「MDLの使用」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 8 以降で使用できます。
ターゲット プラットフォーム デスクトップ
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
IRQL <= DISPATCH_LEVEL

関連項目

BuildScatterGatherListEx

CalculateScatterGatherList

DMA_OPERATIONS

DMA_TRANSFER_INFO

DMA_TRANSFER_INFO_V1

IoGetDmaAdapter

MapTransferEx