次の方法で共有


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 を構築する必要がある場合は、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

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory