NdisAllocateMdl 関数 (ndis/mdlapi.h)
NdisAllocateMdl 関数は、指定された仮想アドレスにメモリ バッファーを記述する MDL を割り当てます。
構文
NDIS_EXPORTED_ROUTINE MDL * NdisAllocateMdl(
[in] NDIS_HANDLE NdisHandle,
[in] PVOID VirtualAddress,
[in] ULONG Length
);
パラメーター
[in] NdisHandle
呼び出し元の初期化中に取得された NDIS ハンドル。 詳細については、「 プール ハンドルの取得」を参照してください。
[in] VirtualAddress
MDL が記述するバッファーのベース仮想アドレスへのポインター。
NdisAllocateMdl の VirtualAddress パラメーターは、非ページ プールからのメモリのみを受け入れます。 つまり、 ExAllocatePool*(NonPagedNx)、 NdisAllocateMemoryWithTagPriority、または NdisMAllocateSharedMemory からのメモリが必要です。 特に、スタック、ページ プール、ドライバー グローバル データ、またはその他のメモリ領域からのメモリでは使用 しないでください 。
ドライバーは、これらの非ページ プール領域のいずれかの MDL を構築する必要がある場合は、IoAllocateMdl と MmProbeAndLockPages を組み合わせたなど、その種類のメモリに適切なカーネル API を使用する必要があります。
[in] Length
メモリ バッファーのサイズ (バイト単位)。
戻り値
NdisAllocateMdl は 、割り当てられた MDL へのポインターを返します。 割り当てが失敗した場合、戻り値は NULL です。
注釈
NdisAllocateMdl を呼び出すことによって割り当てられるすべての MDL は、NdisFreeMdl 関数を呼び出すことによって解放する必要があります。
NdisAllocateMdl はメモリを割り当て、1 つの手順で MDL をビルドします。 このプロセスは、MDL のメモリのみを割り当てる IoAllocateMdl とは異なります。つまり、呼び出し元は MmBuildMdlForNonPagedPool または MmProbeAndLockPages を呼び出して MDL をビルドする必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
対象プラットフォーム | ユニバーサル |
最小 UMDF バージョン | 2.33 |
Header | ndis/mdlapi.h (ndis.h を含む) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | Irql_NetBuffer_Function(ndis)、 NdisAllocateMdl(ndis) |