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) |