PMDL Mdls[32];
PVOID SystemVas[32];
ULONG i;
+ PPFN_NUMBER MdlPages;
+ ULONG MdlPageCount;
LowAddress.QuadPart = 0;
HighAddress.QuadPart = -1;
ok(MmGetMdlByteCount(Mdl) == 2 * 1024 * 1024, "Byte count: %lu\n", MmGetMdlByteCount(Mdl));
ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", MmGetMdlVirtualAddress(Mdl));
ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags);
+ MdlPages = MmGetMdlPfnArray(Mdl);
+ MdlPageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(MmGetMdlVirtualAddress(Mdl), MmGetMdlByteCount(Mdl));
+ ok(MdlPageCount == 2 * 1024 * 1024 / PAGE_SIZE, "MdlPageCount = %lu\n", MdlPageCount);
+ for (i = 0; i < MdlPageCount; i++)
+ {
+ ok(MdlPages[i] != 0 && MdlPages[i] != (PFN_NUMBER)-1,
+ "MdlPages[%lu] = 0x%I64x\n", i, (ULONGLONG)MdlPages[i]);
+ }
MmFreePagesFromMdl(Mdl);
+ ExFreePoolWithTag(Mdl, 0);
/* Now map/unmap it */
Mdl = MmAllocatePagesForMdl(LowAddress,
ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", MmGetMdlVirtualAddress(Mdl));
ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags);
MmFreePagesFromMdl(Mdl);
+ ExFreePoolWithTag(Mdl, 0);
/* Now map it, and free without unmapping */
Mdl = MmAllocatePagesForMdl(LowAddress,
ok(Mdl->MappedSystemVa == SystemVa, "MappedSystemVa: %p, System VA: %p\n", Mdl->MappedSystemVa, SystemVa);
ok((Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags);
MmFreePagesFromMdl(Mdl);
+ ExFreePoolWithTag(Mdl, 0);
/* try to allocate 2 GB -- should succeed but not map */
Mdl = MmAllocatePagesForMdl(LowAddress,
ok(MmGetMdlByteCount(Mdl) != 2UL * 1024 * 1024 * 1024, "Byte count: %lu\n", MmGetMdlByteCount(Mdl));
ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", MmGetMdlVirtualAddress(Mdl));
ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags);
+ MdlPages = MmGetMdlPfnArray(Mdl);
+ MdlPageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(MmGetMdlVirtualAddress(Mdl), MmGetMdlByteCount(Mdl));
+ ok(MdlPageCount < 2UL * 1024 * 1024 * 1024 / PAGE_SIZE, "MdlPageCount = %lu\n", MdlPageCount);
+ for (i = 0; i < MdlPageCount; i++)
+ {
+ ok(MdlPages[i] != 0 && MdlPages[i] != (PFN_NUMBER)-1,
+ "MdlPages[%lu] = 0x%I64x\n", i, (ULONGLONG)MdlPages[i]);
+ }
SystemVa = MmMapLockedPagesSpecifyCache(Mdl,
KernelMode,
MmCached,
ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", MmGetMdlVirtualAddress(Mdl));
ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", Mdl->MdlFlags);
MmFreePagesFromMdl(Mdl);
+ ExFreePoolWithTag(Mdl, 0);
}
/* now allocate and map 32 MB Mdls until we fail */
if (SystemVas[i] != NULL)
MmUnmapLockedPages(SystemVas[i], Mdls[i]);
MmFreePagesFromMdl(Mdls[i]);
+ ExFreePoolWithTag(Mdls[i], 0);
if (SystemVas[i] == NULL)
break;
}