次の方法で共有


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

DmaCompletionRoutine コールバック ルーチンは、この転送が完了したことを以前にシステム DMA 転送を要求したことをドライバーに通知します。

構文

DMA_COMPLETION_ROUTINE DmaCompletionRoutine;

void DmaCompletionRoutine(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PVOID CompletionContext,
  [in] DMA_COMPLETION_STATUS Status
)
{...}

パラメーター

[in] DmaAdapter

DMA_ADAPTER構造体へのポインター。 この構造体は、ドライバーのシステム DMA チャネルを表すアダプター オブジェクトです。

[in] DeviceObject

DEVICE_OBJECT構造体へのポインター。 この構造体は、要求された DMA 操作のターゲット デバイスを表す物理デバイス オブジェクト (PDO) です。

[in] CompletionContext

DmaCompletionRoutine ルーチンのドライバーによって決定されたコンテキストへのポインター。 このコンテキストは、システム DMA 転送を開始した MapTransferEx 呼び出しにドライバーが以前に渡した CompletionContext パラメーター値です。

[in] Status

DMA 転送の完了状態。 このパラメーターは、DMA 転送が正常に完了したかどうかを示す DMA_COMPLETION_STATUS 列挙値です。

戻り値

なし

解説

オプションとして、ドライバーは DmaCompletionRoutine ルーチンを実装できます。 ドライバーがシステム DMA 転送を要求すると、ドライバーは要求でこのルーチンへのポインターを指定できます。 DMA 転送が完了すると、 DmaCompletionRoutine ルーチンがドライバーに通知するために自動的に呼び出されます。

ドライバーの DmaCompletionRoutine ルーチンは、ドライバーによって要求された DMA 転送が DMA 転送の完了後に割り込みを生成できるシステム DMA コントローラーを使用する場合にのみ呼び出されます。 バス マスター DMA デバイスを使用するドライバー、または割り込みを生成しないシステム DMA コントローラーを使用するドライバーは、DMA 転送がいつ完了するかを判断するために他の手段を使用する必要があります。 たとえば、このドライバーは、タイマー割り込みを使用して、DMA 転送の状態を定期的にポーリングする場合があります。

ドライバーは、MapTransferEx ルーチンの省略可能なパラメーターとして DmaCompletionRoutine ルーチンへのポインターを指定できます。

DmaCompletionRoutine コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。

たとえば、 という名前MyDmaCompletionRoutineDmaCompletionRoutine コールバック ルーチンを定義するには、次のコード例に示すように、DMA_COMPLETION_ROUTINE型を使用します。

DMA_COMPLETION_ROUTINE MyDmaCompletionRoutine;

次に、コールバック ルーチンを次のように実装します。

_Use_decl_annotations_
VOID
  MyDmaCompletionRoutine(
    PDMA_ADAPTER DmaAdapter,
    PDEVICE_OBJECT DeviceObject,
    PVOID CompletionContext,
    DMA_COMPLETION_STATUS Status
    )
  {
      // Function body
  }

DMA_COMPLETION_ROUTINE関数の種類は、Wdm.h ヘッダー ファイルで定義されます。 コード分析ツールを実行するときにエラーをより正確に識別するには、必ず注釈を _Use_decl_annotations_ 関数定義に追加してください。 注釈を _Use_decl_annotations_ 使用すると、ヘッダー ファイル内のDMA_COMPLETION_ROUTINE関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 WDM ドライバーの関数ロール型を使用して関数を宣言する」を参照してください。 _Use_decl_annotations_の詳細については、「 関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 8以降で使用できます。
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
IRQL DISPATCH_LEVELで呼び出されます。

こちらもご覧ください

BuildScatterGatherListEx

DEVICE_OBJECT

DMA_ADAPTER

DMA_COMPLETION_STATUS

DMA_OPERATIONS

GetScatterGatherListEx

MapTransferEx