PFREE_ADAPTER_OBJECT コールバック関数 (wdm.h)
FreeAdapterObject ルーチンは、ドライバーがすべての DMA 操作を完了した後、指定したアダプター オブジェクトを解放します。
構文
PFREE_ADAPTER_OBJECT PfreeAdapterObject;
void PfreeAdapterObject(
[in] PDMA_ADAPTER DmaAdapter,
[in] IO_ALLOCATION_ACTION AllocationAction
)
{...}
パラメーター
[in] DmaAdapter
DMA_ADAPTER構造体へのポインター。 この構造体は、解放されるアダプター オブジェクトです。 このオブジェクトは、ドライバーのバス マスター DMA デバイスまたはシステム DMA チャネルを表します。 呼び出し元は、 IoGetDmaAdapter ルーチンの以前の呼び出しからこのポインターを取得しました。
[in] AllocationAction
呼び出し元のドライバーが要求する割り当て解除の種類。 このパラメーターを IO_ALLOCATION_ACTION 列挙値に設定します。 詳細については、「解説」を参照してください。
戻り値
なし
解説
FreeAdapterObject は、名前で直接呼び出すことができるシステム ルーチンではありません。 このルーチンは、 DMA_OPERATIONS 構造体で返されるアドレスからのポインターによってのみ呼び出すことができます。 ドライバーは、DeviceDescription パラメーターの Version メンバーを DEVICE_DESCRIPTION_VERSION3 に設定して IoGetDmaAdapter を呼び出すことによって、このルーチンのアドレスを取得します。 IoGetDmaAdapter が NULL を返す場合、ルーチンはプラットフォームで使用できません。
AllocationAction = DeallocateObject の場合、FreeAdapterObject 呼び出しによってアダプター オブジェクトが解放され、このオブジェクトに割り当てられるマップ レジスタが解放されます。
AllocationAction = DeallocateObjectKeepRegisters の場合、FreeAdapterObject 呼び出しはアダプター オブジェクトを解放しますが、マップ レジスタは解放しません。 この場合、ドライバーは FreeMapRegisters ルーチンを呼び出して、割り当てられたマップ レジスタを明示的に解放する必要があります。
AllocationAction = KeepObject の場合、FreeAdapterObject 呼び出しは無効です。
FreeAdapterObject を使用すると、 AllocateAdapterChannelEx、 GetScatterGatherListEx、 および BuildScatterGatherListEx ルーチンの呼び出しによって割り当てられた DMA リソースの割り当てを解除できます。 ドライバーがこれらのルーチンのいずれかを同期的に呼び出す場合、 ExecutionRoutine パラメーターは省略可能であり、省略できます。 この場合、ドライバーは、呼び出しによって割り当てられたアダプター オブジェクトとマップ レジスタを使用できます。 ドライバーが DMA 転送を開始した後、ドライバーは FreeAdapterObject を呼び出してアダプター オブジェクトの割り当てを解除し、必要に応じてマップを登録できます。
FreeAdapterChannel ルーチンは、FreeAdapterObject に似ています。 FreeAdapterChannel は 、アダプター オブジェクトと割り当てられたマップ レジスタを常に解放します。 この動作は、AllocationAction = DeallocateObject の場合、FreeAdapterObject の動作と似ています。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8以降で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | <= DISPATCH_LEVEL |