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 所描述之緩衝區基底虛擬位址的指標。

重要  

VirtualAddress 參數 NdisAllocateMdl 只接受來自非分頁集區的記憶體。 換句話說,它需要來自 ExAllocatePool*(NonPagedNx)、NdisAllocateMemoryWithTagPriority或 NdisMAllocateSharedMemory。 特別是,它應該 不要 與堆疊、分頁集區、驅動程式全域數據或其他記憶體區域的記憶體搭配使用。

如果驅動程式需要為其中一個非分頁集區區域建置 MDL,它應該針對該類型的記憶體使用適當的核心 API,例如 IoAllocateMdl 與 MmProbeAndLockPages 結合。

 

[in] Length

記憶體緩衝區的大小,以位元組為單位。

傳回值

NdisAllocateMdl 會傳回已配置 MDL 的指標。 如果設定失敗,則傳回值會 NULL。

言論

呼叫 NdisAllocateMdl 配置的所有 MDL,都必須藉由呼叫 NdisFreeMdl 函式來釋放。

NdisAllocateMdl 配置記憶體,並在一個步驟中建置 MDL。 此程式與 IoAllocateMdl 不同,後者只會配置 MDL 的記憶體,這表示呼叫端必須呼叫 MmBuildMdlForNonPagedPool 或 MmProbeAndLockPages 來建置 MDL。

要求

要求 價值
最低支援的用戶端 NDIS 6.0 和更新版本支援。
目標平臺 普遍
最低 UMDF 版本 2.33
標頭 ndis/mdlapi.h (include ndis.h)
連結庫 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 Irql_NetBuffer_Function(ndis), NdisAllocateMdl(ndis)

另請參閱

ExAllocatePool

IoAllocateMdl

mmBuildMdlForNonPagedPool

mmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory