次の方法で共有


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 が記述するバッファーのベース仮想アドレスへのポインター。

重要  

NdisAllocateMdlVirtualAddress パラメーターは、非ページ プールからのメモリのみを受け入れます。 つまり、 ExAllocatePool*(NonPagedNx)、 NdisAllocateMemoryWithTagPriority、または NdisMAllocateSharedMemory からのメモリが必要です。 特に、スタック、ページ プール、ドライバー グローバル データ、またはその他のメモリ領域からのメモリでは使用 しないでください

ドライバーは、これらの非ページ プール領域のいずれかの MDL を構築する必要がある場合は、IoAllocateMdlMmProbeAndLockPages を組み合わせたなど、その種類のメモリに適切なカーネル 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)

こちらもご覧ください

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory