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 |
ヘッダー | ndis/mdlapi.h (ndis.h を含む) |
ライブラリ | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 を する | Irql_NetBuffer_Function(ndis)、NdisAllocateMdl(ndis) |
関連項目
ExAllocatePool の
IoAllocateMdl の
NdisAllocateMemoryWithTagPriority の
NdisFreeMdl の
NdisMAllocateSharedMemory の