The MmGetMdlVirtualAddress routine returns the base virtual address of a buffer described by an MDL.
PVOID
MmGetMdlVirtualAddress(
IN PMDL Mdl
);
MmGetMdlVirtualAddress returns the starting virtual address of the MDL.
Declared in wdm.h and ntddk.h. Include wdm.h or ntddk.h.
MmGetMdlVirtualAddress returns a virtual address that is not necessarily valid in the current thread context. Lower-level drivers should not attempt to use the returned virtual address to access memory, particularly user-space memory.
The returned address, used as an index to a physical address entry in the MDL, can be input to MapTransfer.
Callers of MmGetMdlVirtualAddress can be running at any IRQL. Usually, the caller is running at IRQL = DISPATCH_LEVEL because this routine is commonly called to obtain the CurrentVa parameter to MapTransfer.
MapTransfer, MmGetMdlByteOffset, MmIsAddressValid, MmIsNonPagedSystemAddressValid