共用方式為


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

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

 

[in] Length

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

傳回值

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

言論

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

NdisAllocateMdl 配置記憶體,並在一個步驟中建置 MDL。 此程式與 IoAllocateMdl不同,它只會配置 MDL 的記憶體,這表示呼叫端必須呼叫 MmBuildMdlForNonPagedPoolMmProbeAndLockPages 來建置 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