[KMTESTS:CC] Duplicate tests for CcPinRead

To be extended.
This commit is contained in:
Pierre Schweitzer 2018-09-01 12:20:17 +02:00
parent b0d1522886
commit 6937fa8f41
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B
4 changed files with 37 additions and 16 deletions

View file

@ -137,6 +137,7 @@ list(APPEND KMTEST_SOURCE
kernel32/FindFile_user.c kernel32/FindFile_user.c
ntos_cc/CcCopyRead_user.c ntos_cc/CcCopyRead_user.c
ntos_cc/CcMapData_user.c ntos_cc/CcMapData_user.c
ntos_cc/CcPinRead_user.c
ntos_io/IoCreateFile_user.c ntos_io/IoCreateFile_user.c
ntos_io/IoDeviceObject_user.c ntos_io/IoDeviceObject_user.c
ntos_io/IoReadWrite_user.c ntos_io/IoReadWrite_user.c

View file

@ -8,6 +8,7 @@
KMT_TESTFUNC Test_CcCopyRead; KMT_TESTFUNC Test_CcCopyRead;
KMT_TESTFUNC Test_CcMapData; KMT_TESTFUNC Test_CcMapData;
KMT_TESTFUNC Test_CcPinRead;
KMT_TESTFUNC Test_Example; KMT_TESTFUNC Test_Example;
KMT_TESTFUNC Test_FileAttributes; KMT_TESTFUNC Test_FileAttributes;
KMT_TESTFUNC Test_FindFile; KMT_TESTFUNC Test_FindFile;
@ -37,6 +38,7 @@ const KMT_TEST TestList[] =
{ {
{ "CcCopyRead", Test_CcCopyRead }, { "CcCopyRead", Test_CcCopyRead },
{ "CcMapData", Test_CcMapData }, { "CcMapData", Test_CcMapData },
{ "CcPinRead", Test_CcPinRead },
{ "-Example", Test_Example }, { "-Example", Test_Example },
{ "FileAttributes", Test_FileAttributes }, { "FileAttributes", Test_FileAttributes },
{ "FindFile", Test_FindFile }, { "FindFile", Test_FindFile },

View file

@ -30,3 +30,18 @@ add_importlibs(ccmapdata_drv ntoskrnl hal)
add_target_compile_definitions(ccmapdata_drv KMT_STANDALONE_DRIVER) add_target_compile_definitions(ccmapdata_drv KMT_STANDALONE_DRIVER)
#add_pch(ccmapdata_drv ../include/kmt_test.h) #add_pch(ccmapdata_drv ../include/kmt_test.h)
add_rostests_file(TARGET ccmapdata_drv) add_rostests_file(TARGET ccmapdata_drv)
#
# CcPinRead
#
list(APPEND CCPINREAD_DRV_SOURCE
../kmtest_drv/kmtest_standalone.c
CcPinRead_drv.c)
add_library(ccpinread_drv SHARED ${CCPINREAD_DRV_SOURCE})
set_module_type(ccpinread_drv kernelmodedriver)
target_link_libraries(ccpinread_drv kmtest_printf ${PSEH_LIB})
add_importlibs(ccpinread_drv ntoskrnl hal)
add_target_compile_definitions(ccpinread_drv KMT_STANDALONE_DRIVER)
#add_pch(ccmapdata_drv ../include/kmt_test.h)
add_rostests_file(TARGET ccpinread_drv)

View file

@ -27,7 +27,6 @@ typedef struct _TEST_CONTEXT
ULONG Length; ULONG Length;
} TEST_CONTEXT, *PTEST_CONTEXT; } TEST_CONTEXT, *PTEST_CONTEXT;
static BOOLEAN TestMap = FALSE;
static ULONG TestTestId = -1; static ULONG TestTestId = -1;
static PFILE_OBJECT TestFileObject; static PFILE_OBJECT TestFileObject;
static PDEVICE_OBJECT TestDeviceObject; static PDEVICE_OBJECT TestDeviceObject;
@ -47,7 +46,7 @@ TestEntry(
UNREFERENCED_PARAMETER(RegistryPath); UNREFERENCED_PARAMETER(RegistryPath);
*DeviceName = L"CcMapData"; *DeviceName = L"CcPinRead";
*Flags = TESTENTRY_NO_EXCLUSIVE_DEVICE | *Flags = TESTENTRY_NO_EXCLUSIVE_DEVICE |
TESTENTRY_BUFFERED_IO_DEVICE | TESTENTRY_BUFFERED_IO_DEVICE |
TESTENTRY_NO_READONLY_DEVICE; TESTENTRY_NO_READONLY_DEVICE;
@ -148,7 +147,7 @@ MapAndLockUserBuffer(
static static
VOID VOID
NTAPI NTAPI
MapInAnotherThread(IN PVOID Context) PinInAnotherThread(IN PVOID Context)
{ {
BOOLEAN Ret; BOOLEAN Ret;
PULONG Buffer; PULONG Buffer;
@ -168,12 +167,10 @@ MapInAnotherThread(IN PVOID Context)
Ret = FALSE; Ret = FALSE;
Offset.QuadPart = 0x1000; Offset.QuadPart = 0x1000;
KmtStartSeh(); KmtStartSeh();
TestMap = TRUE; Ret = CcPinRead(TestFileObject, &Offset, TestContext->Length, PIN_WAIT, &Bcb, (PVOID *)&Buffer);
Ret = CcMapData(TestFileObject, &Offset, TestContext->Length, MAP_WAIT, &Bcb, (PVOID *)&Buffer);
TestMap = FALSE;
KmtEndSeh(STATUS_SUCCESS); KmtEndSeh(STATUS_SUCCESS);
if (!skip(Ret == TRUE, "CcMapData failed\n")) if (!skip(Ret == TRUE, "CcPinRead failed\n"))
{ {
ok_eq_pointer(Bcb, TestContext->Bcb); ok_eq_pointer(Bcb, TestContext->Bcb);
ok_eq_pointer(Buffer, TestContext->Buffer); ok_eq_pointer(Buffer, TestContext->Buffer);
@ -216,7 +213,7 @@ PerformTest(
TestFileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; TestFileObject->SectionObjectPointer = &Fcb->SectionObjectPointers;
KmtStartSeh(); KmtStartSeh();
CcInitializeCacheMap(TestFileObject, &FileSizes, FALSE, &Callbacks, NULL); CcInitializeCacheMap(TestFileObject, &FileSizes, TRUE, &Callbacks, NULL);
KmtEndSeh(STATUS_SUCCESS); KmtEndSeh(STATUS_SUCCESS);
if (!skip(CcIsFileCached(TestFileObject) == TRUE, "CcInitializeCacheMap failed\n")) if (!skip(CcIsFileCached(TestFileObject) == TRUE, "CcInitializeCacheMap failed\n"))
@ -226,10 +223,10 @@ PerformTest(
Ret = FALSE; Ret = FALSE;
Offset.QuadPart = TestId * 0x1000; Offset.QuadPart = TestId * 0x1000;
KmtStartSeh(); KmtStartSeh();
Ret = CcMapData(TestFileObject, &Offset, FileSizes.FileSize.QuadPart - Offset.QuadPart, MAP_WAIT, &Bcb, (PVOID *)&Buffer); Ret = CcPinRead(TestFileObject, &Offset, FileSizes.FileSize.QuadPart - Offset.QuadPart, PIN_WAIT, &Bcb, (PVOID *)&Buffer);
KmtEndSeh(STATUS_SUCCESS); KmtEndSeh(STATUS_SUCCESS);
if (!skip(Ret == TRUE, "CcMapData failed\n")) if (!skip(Ret == TRUE, "CcPinRead failed\n"))
{ {
ok_eq_ulong(Buffer[(0x3000 - TestId * 0x1000) / sizeof(ULONG)], 0xDEADBABE); ok_eq_ulong(Buffer[(0x3000 - TestId * 0x1000) / sizeof(ULONG)], 0xDEADBABE);
@ -246,12 +243,10 @@ PerformTest(
Ret = FALSE; Ret = FALSE;
Offset.QuadPart = 0x1000; Offset.QuadPart = 0x1000;
KmtStartSeh(); KmtStartSeh();
TestMap = TRUE; Ret = CcPinRead(TestFileObject, &Offset, FileSizes.FileSize.QuadPart - Offset.QuadPart, PIN_WAIT, &TestContext->Bcb, &TestContext->Buffer);
Ret = CcMapData(TestFileObject, &Offset, FileSizes.FileSize.QuadPart - Offset.QuadPart, MAP_WAIT, &TestContext->Bcb, &TestContext->Buffer);
TestMap = FALSE;
KmtEndSeh(STATUS_SUCCESS); KmtEndSeh(STATUS_SUCCESS);
if (!skip(Ret == TRUE, "CcMapData failed\n")) if (!skip(Ret == TRUE, "CcPinRead failed\n"))
{ {
PKTHREAD ThreadHandle; PKTHREAD ThreadHandle;
@ -269,11 +264,11 @@ PerformTest(
#endif #endif
TestContext->Length = FileSizes.FileSize.QuadPart - Offset.QuadPart; TestContext->Length = FileSizes.FileSize.QuadPart - Offset.QuadPart;
ThreadHandle = KmtStartThread(MapInAnotherThread, TestContext); ThreadHandle = KmtStartThread(PinInAnotherThread, TestContext);
KmtFinishThread(ThreadHandle, NULL); KmtFinishThread(ThreadHandle, NULL);
TestContext->Length = FileSizes.FileSize.QuadPart - 2 * Offset.QuadPart; TestContext->Length = FileSizes.FileSize.QuadPart - 2 * Offset.QuadPart;
ThreadHandle = KmtStartThread(MapInAnotherThread, TestContext); ThreadHandle = KmtStartThread(PinInAnotherThread, TestContext);
KmtFinishThread(ThreadHandle, NULL); KmtFinishThread(ThreadHandle, NULL);
CcUnpinData(TestContext->Bcb); CcUnpinData(TestContext->Bcb);
@ -336,6 +331,8 @@ TestMessageHandler(
{ {
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
FsRtlEnterFileSystem();
switch (ControlCode) switch (ControlCode)
{ {
case IOCTL_START_TEST: case IOCTL_START_TEST:
@ -353,6 +350,8 @@ TestMessageHandler(
break; break;
} }
FsRtlExitFileSystem();
return Status; return Status;
} }
@ -370,6 +369,8 @@ TestIrpHandler(
DPRINT("IRP %x/%x\n", IoStack->MajorFunction, IoStack->MinorFunction); DPRINT("IRP %x/%x\n", IoStack->MajorFunction, IoStack->MinorFunction);
ASSERT(IoStack->MajorFunction == IRP_MJ_READ); ASSERT(IoStack->MajorFunction == IRP_MJ_READ);
FsRtlEnterFileSystem();
Status = STATUS_NOT_SUPPORTED; Status = STATUS_NOT_SUPPORTED;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -425,5 +426,7 @@ TestIrpHandler(
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
} }
FsRtlExitFileSystem();
return Status; return Status;
} }