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,例如與 MmProbeAndLockPages 結合的 IoAllocateMdl。
[in] Length
記憶體緩衝區的大小,以位元組為單位。
傳回值
NdisAllocateMdl 會傳回已配置之 MDL 的指標。 如果配置失敗,則傳回值為 NULL。
備註
呼叫 NdisAllocateMdl 所配置的所有 MDL 都必須透過呼叫 NdisFreeMdl 函式來釋放。
NdisAllocateMdl 會配置記憶體,並在一個步驟中建置 MDL。 此程式與 IoAllocateMdl不同,其只會配置 MDL 的記憶體,這表示呼叫端必須藉由呼叫 MmBuildMdlForNonPagedPool 或 MmProbeAndLockPages 來建置 MDL。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | NDIS 6.0 和更新版本支援。 |
目標平台 | Universal |
最低UMDF版本 | 2.33 |
標頭 | ndis/mdlapi.h (包含 ndis.h) |
程式庫 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | Irql_NetBuffer_Function (ndis) 、 NdisAllocateMdl (ndis) |