[KMTESTS:MM]
authorpschweitzer <pschweitzer@97493ccd-5924-5043-b1f5-66cb403b36ce>
Wed, 13 Sep 2017 16:38:32 +0000 (16:38 +0000)
committerpschweitzer <pschweitzer@97493ccd-5924-5043-b1f5-66cb403b36ce>
Wed, 13 Sep 2017 16:38:32 +0000 (16:38 +0000)
Few tests for MmBuildMdlForNonPagedPool() I wrote earlier.
They all pass fine on ROS.

git-svn-id: file:///srv/svn/reactos/trunk@75835 97493ccd-5924-5043-b1f5-66cb403b36ce

rostests/kmtests/ntos_mm/MmMdl.c

index b3e8a81..3ee201f 100644 (file)
@@ -188,7 +188,56 @@ TestMmAllocatePagesForMdl(VOID)
     }
 }
 
+static
+VOID
+TestMmBuildMdlForNonPagedPool(VOID)
+{
+    PVOID Page;
+    PMDL Mdl;
+
+    Page = ExAllocatePoolWithTag(PagedPool, PAGE_SIZE, 'Test');
+    ok(Page != NULL, "ExAllocatePoolWithTag failed\n");
+    if (skip(Page != NULL, "No buffer\n"))
+        return;
+
+    Mdl = IoAllocateMdl(Page, PAGE_SIZE, FALSE, FALSE, NULL);
+    ok(Mdl != NULL, "IoAllocateMdl failed\n");
+    if (skip(Mdl != NULL, "No MDL\n"))
+        return;
+
+    ok((Mdl->MdlFlags & MDL_PAGES_LOCKED) == 0, "MDL locked\n");
+    ok((Mdl->MdlFlags & MDL_SOURCE_IS_NONPAGED_POOL) == 0, "MDL from non paged\n");
+
+    MmBuildMdlForNonPagedPool(Mdl);
+    ok((Mdl->MdlFlags & MDL_PAGES_LOCKED) == 0, "MDL locked\n");
+    ok((Mdl->MdlFlags & MDL_SOURCE_IS_NONPAGED_POOL) != 0, "MDL from paged\n");
+
+    IoFreeMdl(Mdl);
+    ExFreePoolWithTag(Page, 'Test');
+
+    Page = ExAllocatePoolWithTag(NonPagedPool, PAGE_SIZE, 'Test');
+    ok(Page != NULL, "ExAllocatePoolWithTag failed\n");
+    if (skip(Page != NULL, "No buffer\n"))
+        return;
+
+    Mdl = IoAllocateMdl(Page, PAGE_SIZE, FALSE, FALSE, NULL);
+    ok(Mdl != NULL, "IoAllocateMdl failed\n");
+    if (skip(Mdl != NULL, "No MDL\n"))
+        return;
+
+    ok((Mdl->MdlFlags & MDL_PAGES_LOCKED) == 0, "MDL locked\n");
+    ok((Mdl->MdlFlags & MDL_SOURCE_IS_NONPAGED_POOL) == 0, "MDL from non paged\n");
+
+    MmBuildMdlForNonPagedPool(Mdl);
+    ok((Mdl->MdlFlags & MDL_PAGES_LOCKED) == 0, "MDL locked\n");
+    ok((Mdl->MdlFlags & MDL_SOURCE_IS_NONPAGED_POOL) != 0, "MDL from paged\n");
+
+    IoFreeMdl(Mdl);
+    ExFreePoolWithTag(Page, 'Test');
+}
+
 START_TEST(MmMdl)
 {
     TestMmAllocatePagesForMdl();
+    TestMmBuildMdlForNonPagedPool();
 }