DMA トランザクション オブジェクトの再利用

[KMDF にのみ適用]

ドライバーが DMA トランザクションに関連付けられているすべての DMA 転送を処理した後、ドライバーはトランザクション オブジェクトを削除または再利用できます。 通常、ドライバーの EvtInterruptDpc コールバック関数は、(WdfObjectDelete を呼び出すことによって) トランザクション オブジェクトを削除します。 その後、ドライバーは新しい DMA トランザクションを作成するときに、WdfDmaTransactionCreate を呼び出して新しいトランザクション オブジェクトを作成します。

ただし、ドライバーがトランザクション オブジェクトを再利用すると便利な場合があります。 このような場合、ドライバーは WdfObjectDelete の代わりに WdfDmaTransactionRelease を呼び出します。

たとえば、コンピューターのメモリ リソースが少ない場合に、ドライバーとデバイスが動作する必要があるとします。 このメモリの問題を処理するには、ドライバーは、次の手順を使用できます。

  1. ドライバーの EvtDriverDeviceAdd コールバック関数は、WdfDmaTransactionCreate を呼び出して、1 つ以上のトランザクション オブジェクトを作成できます。 ドライバーは、これらのトランザクション オブジェクトにハンドルを保存します。

  2. ドライバーは、新しいトランザクションを作成して初期化する準備が整うたびに、WdfDmaTransactionCreate を呼び出します。 このメソッドが STATUS_INSUFFICIENT_RESOURCES を返す場合、ドライバーは、格納されているトランザクション オブジェクトのいずれかを使用できます。

  3. ドライバーは、その格納されているトランザクション オブジェクトのいずれかを使用する場合は、トランザクションが完了したときに、削除するのではなく、トランザクション オブジェクトを再利用する必要があります。 ドライバーは、WdfObjectDelete の代わりに WdfDmaTransactionRelease を呼び出して、再利用するトランザクション オブジェクトを設定します。

PLX9x5x サンプルでは、DMA トランザクション オブジェクトが再利用されます。