次の方法で共有


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 の値は、マップされたバイト数を示します。 それ以外の場合、 Length の入力値と出力値は同じです。

[in] WriteToDevice

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

戻り値

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

注釈

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

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

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

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

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

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム デスクトップ
Header 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