共通バッファーの使用
DMA デバイスのドライバーでは、デバイスとドライバーの両方がアクセスできるバッファーの割り当てが必要になることがあります。たとえば、デバイスはバイト数などの転送情報をこのバッファー領域に書き込み、ドライバーはそれを読み取って転送されたバイト数を確認できます。このようなバッファー領域は "共通バッファー" と呼ばれます。**
共通バッファーを割り当てるために、ドライバーの EvtDriverDeviceAdd コールバック関数は次の処理を行います。
WdfDmaEnablerCreate を呼び出して DMA イネーブラー オブジェクトを作成します。
WdfCommonBufferCreate または WdfCommonBufferCreateWithConfig を呼び出してバッファーを作成します。
WdfCommonBufferGetAlignedLogicalAddress を呼び出して、デバイスがアクセスできるバッファーの論理アドレスを取得します。
WdfCommonBufferGetAlignedVirtualAddress を呼び出して、ドライバーがアクセスできるバッファーの仮想アドレスを取得します。
ドライバーが WdfDmaEnablerCreate を呼び出す前に WdfDeviceSetAlignmentRequirement を呼び出すと、WdfDmaEnablerCreate が作成するバッファーは、ドライバーが WdfDeviceSetAlignmentRequirement に指定したメモリ アドレス境界に配置されます。それ以外の場合、共通バッファーはワード アドレス境界に配置されます。また、ドライバーは WdfCommonBufferCreateWithConfig を呼び出して、1 つのバッファーの配置を指定することもできます。
ドライバーが割り当てた共通バッファーの長さを取得するために、ドライバーは WdfCommonBufferGetLength を呼び出すことができます。
ドライバーは共通バッファーの使用を完了すると、WdfObjectDelete を呼び出します。