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 を構築する必要がある場合は、その種類のメモリに適切なカーネル API を使用する必要があります ( IoAllocateMdl と MmProbeAndLockPages の組み合わせなど)。

 

[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 の

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority の

NdisFreeMdl の

NdisMAllocateSharedMemory の