共用方式為


IoAllocateMdl 函式 (wdm.h)

IoAllocateMdl 例程會配置足以對應緩衝區的記憶體描述元清單(MDL),因為緩衝區的起始位址和長度。 或者,此例程會將 MDL 與 IRP 產生關聯。

語法

PMDL IoAllocateMdl(
  [in, optional]      __drv_aliasesMem PVOID VirtualAddress,
  [in]                ULONG                  Length,
  [in]                BOOLEAN                SecondaryBuffer,
  [in]                BOOLEAN                ChargeQuota,
  [in, out, optional] PIRP                   Irp
);

參數

[in, optional] VirtualAddress

MDL 要描述之緩衝區基底虛擬位址的指標。

[in] Length

指定 MDL 要描述之緩衝區的長度,以位元組為單位。 如需詳細資訊,請參閱下列一節。

[in] SecondaryBuffer

指出緩衝區是主要或次要緩衝區。 此參數會決定 MDL 如何連結至 IRP。 除了 IRP 中 MDL 所描述的第一個緩衝區之外,所有緩衝區都會被視為次要緩衝區。 如果沒有與 MDL 相關聯的 IRP,此字段必須 FALSE。 如需詳細資訊,請參閱下列一節。

[in] ChargeQuota

保留供系統使用。 驅動程式必須將此參數設定為 FALSE

[in, out, optional] Irp

要與 MDL 相關聯之 IRP 的指標。 如果 Irp 指標不是NULL,則配置的 MDL 會與指定的 IRP MDL 清單相關聯,根據 secondaryBuffer 的值。

傳回值

IoAllocateMdl 會傳回 MDL 的指標,或如果無法設定 MDL,則會傳回 NULL

言論

IoAllocateMdl 可供需要將緩衝區分成片段的驅動程式使用,每個片段都由個別 MDL 對應,或對應驅動程式配置的緩衝區。 驅動程式應該呼叫 MmBuildMdlForNonPagedPool,並使用此呼叫所配置的 MDL 來設定描述非分頁集區中驅動程式配置的緩衝區的 MDL。

Length 參數會指定要由 MDL 描述的緩衝區大小。 在 Windows Server 2003、Windows XP 和 Windows 2000 中,此例程可以配置的緩衝區大小上限是PAGE_SIZE * (65535 - sizeof(MDL)) / sizeof(ULONG_PTR)。 在 Windows Vista 和 Windows Server 2008 中,緩衝區大小上限為 (2 GB - PAGE_SIZE)。 從 Windows 7 和 Windows Server 2008 R2 開始,緩衝區大小上限為 (4 GB - PAGE_SIZE)。

如果 SecondaryBuffer 參數 FALSE,則例程會更新 Irp->MdlAddress 指向新的 MDL。 如果 SecondaryBuffer 為 TRUE ,例程會將 MDL 新增至 Irp->MdlAddress 指向的 MDL 鏈結結尾。

如需 MDL 的詳細資訊,請參閱使用 MDL

要求

要求 價值
最低支援的用戶端 從 Windows 2000 開始提供。
目標平臺 普遍
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

另請參閱

IoBuildPartialMdl

IoFreeMdl

mmBuildMdlForNonPagedPool