[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 |
| ヘッダー | wdfdmatransaction.h (Wdf.h を含む) |
| 図書館 | Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。 |
| IRQL | <=DISPATCH_LEVEL |
| DDI コンプライアンス規則 を する | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |