次の方法で共有


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

MapTransfer ルーチンは、ロックダウン バッファーからの DMA 転送をマップするアダプター オブジェクトのマップ レジスタを設定します。

構文

PMAP_TRANSFER PmapTransfer;

PHYSICAL_ADDRESS PmapTransfer(
  [in]      PDMA_ADAPTER DmaAdapter,
  [in]      PMDL Mdl,
  [in]      PVOID MapRegisterBase,
  [in]      PVOID CurrentVa,
  [in, out] PULONG Length,
  [in]      BOOLEAN WriteToDevice
)
{...}

パラメーター

[in] DmaAdapter

IoGetDmaAdapter によって返され、以前に現在の IRP の転送要求に対して AllocateAdapterChannel に渡された DMA アダプター オブジェクトへのポインター。

[in] Mdl

次のいずれかを指すポインター: 現在の IRP MdlAddress にあるバッファーを記述する MDL、または下位デバイスのドライバーによって設定された共通バッファーを記述する MDL (自動初期化モード)。

[in] MapRegisterBase

DMA 操作に割り当てられたマップ レジスタを指定します。 システムは、ドライバーの AdapterControl ルーチンにこの値を渡します。

[in] CurrentVa

DMA 転送操作のために転送されるデータの現在の仮想アドレスへのポインター。

[in, out] Length

マップする長さをバイト単位で指定します。 ドライバーが IoGetDmaAdapter を呼び出したときに、デバイスがスキャッター/ギャザー サポートを持つバス マスターであることを示した場合、MapTransfer から返された 長さ の値は、マップされたバイト数 示します。 それ以外の場合、Length の入力値と出力値は同じです。

[in] WriteToDevice

転送操作の方向を示します。ロックダウン バッファーからデバイスへの転送に対して TRUE します。

戻り値

MapTransfer は、バス マスター アダプターのドライバーが使用できるマップされた領域の論理アドレスを返します。 システム DMA コントローラーを使用するデバイスのドライバーは、この値を使用できないため、無視する必要があります。

備考

MapTransfer は、名前で直接呼び出すことができるシステム ルーチンではありません。このルーチンは、DMA_OPERATIONS 構造体で返されたアドレスからのポインターによってのみ呼び出されます。 ドライバーは、IoGetDmaAdapterを呼び出すことによって、このルーチンのアドレスを取得します。

DmaAdapter は、AllocateAdapterChannelへのドライバーの前の呼び出しの結果として既に割り当てられている必要があります。

設定できるマップ レジスタの数は、ドライバーが IoGetDmaAdapter 呼び出されたときに返される最大値を超えることはできません。

ドライバーは、MmGetMdlVirtualAddressを呼び出すことによって、パケット ベースの DMA 転送の開始に対する初期 CurrentVa を取得できます。 ただし、返される値は、有効な仮想アドレスではなく、Mdlへのインデックスです。 ドライバーが複数の DMA 操作に大きな転送要求を分割する必要がある場合は、各 DMA 操作の CurrentVa 長さ 更新する必要があります。

散布図/収集のサポートを持つバス マスター デバイスのドライバーは、返された論理アドレスと更新された Length 値を使用して散布図/収集リストを作成し、mapTransfer 呼び出して、転送操作に使用可能なすべてのマップ レジスタを使用するまで繰り返し呼び出すことができます。 ただし、このようなドライバーは、GetScatterGatherList ルーチンをより単純に使用できます。

必要条件

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

関連項目

ADDRESS_AND_SIZE_TO_SPAN_PAGES

AllocateAdapterChannel

AllocateCommonBuffer

DMA_ADAPTER

FlushAdapterBuffers

FreeAdapterChannel

FreeMapRegisters

IoGetDmaAdapter

KeFlushIoBuffers

MmGetMdlVirtualAddress