[KMTESTS:CC]
authorPierre Schweitzer <pierre@reactos.org>
Fri, 15 Sep 2017 10:37:00 +0000 (10:37 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Fri, 15 Sep 2017 10:37:00 +0000 (10:37 +0000)
Tests for paging IO MDL for read operations. Equivalent to r75833 (and r75840).
They fail in ROS.

svn path=/trunk/; revision=75842

rostests/kmtests/ntos_cc/CMakeLists.txt
rostests/kmtests/ntos_cc/CcCopyRead_drv.c

index 7155dce..6baf8f1 100644 (file)
@@ -2,7 +2,7 @@
 include_directories(../include)
 
 #
-# IoCreateFile
+# CcCopyRead
 #
 list(APPEND CCCOPYREAD_DRV_SOURCE
     ../kmtest_drv/kmtest_standalone.c
@@ -15,3 +15,18 @@ add_importlibs(cccopyread_drv ntoskrnl hal)
 add_target_compile_definitions(cccopyread_drv KMT_STANDALONE_DRIVER)
 #add_pch(cccopyread_drv ../include/kmt_test.h)
 add_rostests_file(TARGET cccopyread_drv)
+
+#
+# CcInitializeCacheMap
+#
+list(APPEND CCINITIALIZECACHEMAP_DRV_SOURCE
+    ../kmtest_drv/kmtest_standalone.c
+    CcInitializeCacheMap_drv.c)
+
+add_library(ccinitializecachemap_drv SHARED ${CCINITIALIZECACHEMAP_DRV_SOURCE})
+set_module_type(ccinitializecachemap_drv kernelmodedriver)
+target_link_libraries(ccinitializecachemap_drv kmtest_printf ${PSEH_LIB})
+add_importlibs(ccinitializecachemap_drv ntoskrnl hal)
+add_target_compile_definitions(ccinitializecachemap_drv KMT_STANDALONE_DRIVER)
+#add_pch(ccinitializecachemap_drv ../include/kmt_test.h)
+add_rostests_file(TARGET ccinitializecachemap_drv)
index 98b4d87..94d7372 100644 (file)
@@ -269,6 +269,8 @@ TestIrpHandler(
         }
         else
         {
+            PMDL Mdl;
+
             ok((Offset.QuadPart % PAGE_SIZE == 0 || Offset.QuadPart == 0), "Offset is not aligned: %I64i\n", Offset.QuadPart);
             ok(Length % PAGE_SIZE == 0, "Length is not aligned: %I64i\n", Length);
 
@@ -282,6 +284,12 @@ TestIrpHandler(
             {
                 *(PUSHORT)((ULONG_PTR)Buffer + (ULONG_PTR)(1000LL - Offset.QuadPart)) = 0xFFFF;
             }
+
+            Mdl = Irp->MdlAddress;
+            ok(Mdl != NULL, "Null pointer for MDL!\n");
+            ok((Mdl->MdlFlags & MDL_PAGES_LOCKED) != 0, "MDL not locked\n");
+            ok((Mdl->MdlFlags & MDL_SOURCE_IS_NONPAGED_POOL) == 0, "MDL from non paged\n");
+            ok((Irp->Flags & IRP_PAGING_IO) != 0, "Non paging IO\n");
         }
 
         if (NT_SUCCESS(Status))