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) 、 NdisAllocateMemoryWithTagPriorityNdisMAllocateSharedMemory 的記憶體。 特別是, 它不應該 與堆疊、分頁集區、驅動程式全域數據或其他記憶體區域的記憶體搭配使用。

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

 

[in] Length

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

傳回值

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

備註

呼叫 NdisAllocateMdl 所配置的所有 MDL 都必須透過呼叫 NdisFreeMdl 函式來釋放。

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

規格需求

需求
最低支援的用戶端 NDIS 6.0 和更新版本支援。
目標平台 Universal
標頭 ndis/mdlapi.h (包含 ndis.h)
程式庫 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 Irql_NetBuffer_Function (ndis) NdisAllocateMdl (ndis)

另請參閱

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory