Correct test for MmSizeOfMdl

svn path=/trunk/; revision=9187
This commit is contained in:
Jason Filby 2004-04-20 18:52:04 +00:00
parent 9e797fd74b
commit 87b81bac7c

View file

@ -5,45 +5,65 @@
static int RunTest(char *Buffer) static int RunTest(char *Buffer)
{ {
VOID *pmem1; VOID *pmem1, *MdlPfnArray, *MdlVirtAddr;
PHYSICAL_ADDRESS LowestAcceptableAddress, HighestAcceptableAddress, SkipBytes; ULONG MdlSize, MdlOffset, AllocSize;
SIZE_T TotalBytes;
PMDL Mdl; PMDL Mdl;
/* Allocate memory for use in testing */ /* Allocate memory for use in testing */
AllocSize = 512;
pmem1 = ExAllocatePool(NonPagedPool, pmem1 = ExAllocatePool(NonPagedPool,
512); AllocSize);
/* MDL Testing */ /* MmSizeOfMdl test */
MdlSize = 0;
MdlSize = MmSizeOfMdl(pmem1,
AllocSize);
if (MdlSize <= sizeof(MDL))
{
strcpy(Buffer, "MmSizeOfMdl() failed\n");
return TS_FAILED;
}
/* MmCreateMdl test */
Mdl = NULL; Mdl = NULL;
Mdl = MmCreateMdl(NULL, Mdl = MmCreateMdl(NULL,
pmem1, pmem1,
512); AllocSize);
if (Mdl == NULL) if (Mdl == NULL)
{ {
strcpy(Buffer, "MmCreateMdl() failed for Mdl\n"); strcpy(Buffer, "MmCreateMdl() failed for Mdl\n");
return TS_FAILED; return TS_FAILED;
} }
MmBuildMdlForNonPagedPool(Mdl);
MmProbeAndLockPages(Mdl,
KernelMode,
IoReadAccess);
MmUnlockPages(Mdl);
ExFreePool(Mdl);
SkipBytes.QuadPart = PAGE_SIZE * 4; /* MmGetMdlByteCount test */
TotalBytes = 4096; MdlSize = 0;
Mdl = NULL; MdlSize = MmGetMdlByteCount(Mdl);
Mdl = MmAllocatePagesForMdl(LowestAcceptableAddress, if (MdlSize != AllocSize)
HighestAcceptableAddress,
SkipBytes,
TotalBytes);
if (Mdl == NULL)
{ {
strcpy(Buffer, "MmAllocatePagesForMdl() failed for Mdl\n"); strcpy(Buffer, "MmGetMdlByteCount() failed for Mdl\n");
return TS_FAILED;
}
/* MmGetMdlByteOffset test */
MdlOffset = MmGetMdlByteOffset(Mdl);
/* MmGetMdlPfnArray test */
MdlPfnArray = NULL;
MdlPfnArray = MmGetMdlPfnArray(Mdl);
if (MdlPfnArray == NULL)
{
strcpy(Buffer, "MmGetMdlPfnArray() failed for Mdl\n");
return TS_FAILED;
}
/* MmGetMdlVirtualAddress test */
MdlVirtAddr = NULL;
MdlVirtAddr = MmGetMdlVirtualAddress(Mdl);
if (MdlVirtAddr == NULL)
{
strcpy(Buffer, "MmGetMdlVirtualAddress() failed for Mdl\n");
return TS_FAILED; return TS_FAILED;
} }
MmFreePagesFromMdl(Mdl);
/* Free memory used in test */ /* Free memory used in test */
ExFreePool(pmem1); ExFreePool(pmem1);
@ -59,7 +79,7 @@ Mdl_1Test(int Command, char *Buffer)
case TESTCMD_RUN: case TESTCMD_RUN:
return RunTest(Buffer); return RunTest(Buffer);
case TESTCMD_TESTNAME: case TESTCMD_TESTNAME:
strcpy(Buffer, "Kernel Memory MDL API"); strcpy(Buffer, "Kernel Memory MDL API (1)");
return TS_OK; return TS_OK;
default: default:
break; break;