次の方法で共有


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

CancelMappedTransfer ルーチンは、現在アダプターにマップされているシステム DMA 転送を取り消します。

構文

PCANCEL_MAPPED_TRANSFER PcancelMappedTransfer;

NTSTATUS PcancelMappedTransfer(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PVOID DmaTransferContext
)
{...}

パラメーター

[in] DmaAdapter

DMA_ADAPTER 構造体へのポインター。 この構造体は、保留中の DMA 転送の完了を待機しているアダプター オブジェクトです。 呼び出し元は、IoGetDmaAdapter ルーチンへの以前の呼び出しからこのポインターを取得し、呼び出し元は DMA 転送のマップ レジスタを設定する MapTransferEx 呼び出しにこのポインターを渡しました。

[in] DmaTransferContext

DMA 転送コンテキストへのポインター。 このパラメーター値は、アダプター チャネルの割り当てを要求した AllocateAdapterChannelEx 呼び出しに渡されたのと同じ DMA 転送コンテキストである必要があります。

戻り値

CancelMappedTransfer は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合は、適切なエラー コードが返されます。

備考

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

このルーチンは、関連付けられている転送コンテキストを取り消し済みとしてマークします。これにより、このコンテキストの下でそれ以上の転送ができなくなります。 転送が取り消されると、その完了ルーチンが呼び出されますが、転送の状態が DmaCancelled に設定される場合があります。

システム DMA 転送が取り消されるか完了したかに関係なく、FlushAdapterBuffers または FlushAdapterBuffersEx ルーチンを常に呼び出して、DMA 転送操作の終了時にシステム DMA コントローラーの内部キャッシュに残っているデータをフラッシュする必要があります。 転送が取り消されるか完了した後、DMA チャネルが解放されるか、MapTransferEx ルーチンが呼び出されて新しい DMA 転送のマップ レジスタを設定する前に、FlushAdapterBuffersXxx 呼び出しが行われる必要があります。

必要条件

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

関連項目

AllocateAdapterChannelEx

DMA_ADAPTER

DMA_OPERATIONS

FlushAdapterBuffers

FlushAdapterBuffersEx

InitializeDmaTransferContext

IoGetDmaAdapter

MapTransferEx