WdfDmaTransactionDmaCompletedFinal 関数 (wdfdmatransaction.h)
[KMDF にのみ適用]
WdfDmaTransactionDmaCompletedFinal メソッドは、デバイスの DMA 転送操作がアンダーラン条件で完了したことをフレームワークに通知し、完了した転送の長さを提供します。
構文
BOOLEAN WdfDmaTransactionDmaCompletedFinal(
[in] WDFDMATRANSACTION DmaTransaction,
[in] size_t FinalTransferredLength,
[out] NTSTATUS *Status
);
パラメーター
[in] DmaTransaction
ドライバーが WdfDmaTransactionCreate の以前の呼び出しから取得した DMA トランザクション オブジェクトへのハンドル。
[in] FinalTransferredLength
デバイスが転送したバイト数。
[out] Status
DMA 転送の状態を受け取る場所へのポインター。 詳細については、「 WdfDmaTransactionDmaCompleted」の「解説」セクションを参照してください。
戻り値
WdfDmaTransactionDmaCompletedFinal は、ドライバーが無効な入力パラメーターを指定した場合に FALSE を 返します。 それ以外の場合、 WdfDmaTransactionDmaCompletedFinal は常に TRUE を返します。これは、 DmaTransaction パラメーターが指定した DMA トランザクションのバイト転送をフレームワークが試行しないことを示します。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
注釈
ドライバーは通常、EvtInterruptDpc コールバック内から WdfDmaTransactionDmaCompletedFinal を呼び出します。 システム モード DMA デバイスのドライバーは、 EvtDmaTransactionDmaTransferComplete イベント コールバック関数内から WdfDmaTransactionDmaCompletedFinal を呼び出す場合があります。
PLX9x5x サンプルでは、ドライバーは EvtProgramDma コールバック関数から WdfDmaTransactionDmaCompletedFinal を呼び出します。
WdfDmaTransactionDmaCompletedFinal メソッドは WdfDmaTransactionDmaCompleted と同じように動作しますが、ハードウェアがアンダーラン条件を報告する場合、ドライバーは通常 WdfDmaTransactionDmaCompletedFinal を呼び出します。 アンダーラン条件は、ハードウェアが最後の DMA 転送に指定されたすべてのバイトを転送できなかったことを意味します。 WdfDmaTransactionDmaCompletedFinal を呼び出すと、指定した DMA トランザクションに対して、フレームワークがそれ以上 DMA 転送を開始できなくなります。
ドライバーが WdfDmaTransactionDmaCompletedFinal を呼び出すと、ドライバーは転送されたバイト数を提供します。 フレームワークは指定されたトランザクションに対してそれ以上のバイト転送を試みないため、戻り値は常に TRUE です。
DMA 転送の完了の詳細については、「DMA 転送 の完了」を参照してください。
例
次のコード例では、デバイスの DMA 転送操作がアンダーラン条件で完了したことをフレームワークに通知します。
BOOLEAN success;
NTSTATUS status;
success = WdfDmaTransactionDmaCompletedFinal(
DmaTransaction,
transferLength,
&status
);
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
Header | wdfdmatransaction.h (Wdf.h を含む) |
Library | Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。 |
IRQL | <=DISPATCH_LEVEL |
DDI コンプライアンス規則 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |