diff --git a/modules/rostests/kmtests/example/Example_user.c b/modules/rostests/kmtests/example/Example_user.c index bd440e01264..720a2d02d1a 100644 --- a/modules/rostests/kmtests/example/Example_user.c +++ b/modules/rostests/kmtests/example/Example_user.c @@ -15,6 +15,7 @@ START_TEST(Example) SYSTEM_INFO SystemInfo; MY_STRUCT MyStruct[2] = { { 123, ":D" }, { 0 } }; DWORD Length = sizeof MyStruct; + DWORD Error; trace("Message from user-mode\n"); @@ -26,9 +27,10 @@ START_TEST(Example) KmtRunKernelTest("Example"); /* now start the special-purpose driver */ - KmtLoadDriver(L"Example", FALSE); - trace("After Entry\n"); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"Example", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; trace("After Create\n"); ok(KmtSendToDriver(IOCTL_NOTIFY) == ERROR_SUCCESS, "\n"); diff --git a/modules/rostests/kmtests/hidparse/HidP_user.c b/modules/rostests/kmtests/hidparse/HidP_user.c index d1f5a4e00dd..153ef22db57 100644 --- a/modules/rostests/kmtests/hidparse/HidP_user.c +++ b/modules/rostests/kmtests/hidparse/HidP_user.c @@ -22,12 +22,14 @@ START_TEST(HidPDescription) KmtStartService(L"hidusb", &ServiceHandle); CloseServiceHandle(ServiceHandle); - KmtLoadDriver(L"HidP", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"HidP", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; Error = KmtSendToDriver(IOCTL_TEST_DESCRIPTION); ok(Error == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lx\n", Error); KmtCloseDriver(); KmtUnloadDriver(); -} \ No newline at end of file +} diff --git a/modules/rostests/kmtests/include/kmt_test.h b/modules/rostests/kmtests/include/kmt_test.h index 509788a2e27..c046ab05874 100644 --- a/modules/rostests/kmtests/include/kmt_test.h +++ b/modules/rostests/kmtests/include/kmt_test.h @@ -169,10 +169,11 @@ VOID KmtFinishThread(IN PKTHREAD Thread OPTIONAL, IN PKEVENT Event OPTIONAL); #elif defined KMT_USER_MODE DWORD KmtRunKernelTest(IN PCSTR TestName); -VOID KmtLoadDriver(IN PCWSTR ServiceName, IN BOOLEAN RestartIfRunning); +DWORD KmtLoadDriver(IN PCWSTR ServiceName, IN BOOLEAN RestartIfRunning); VOID KmtUnloadDriver(VOID); -VOID KmtOpenDriver(VOID); +DWORD KmtOpenDriver(VOID); VOID KmtCloseDriver(VOID); +DWORD KmtLoadAndOpenDriver(IN PCWSTR ServiceName, IN BOOLEAN RestartIfRunning); DWORD KmtSendToDriver(IN DWORD ControlCode); DWORD KmtSendStringToDriver(IN DWORD ControlCode, IN PCSTR String); diff --git a/modules/rostests/kmtests/kernel32/FileAttributes_user.c b/modules/rostests/kmtests/kernel32/FileAttributes_user.c index 88d85a81da8..0815cdfbd2a 100644 --- a/modules/rostests/kmtests/kernel32/FileAttributes_user.c +++ b/modules/rostests/kmtests/kernel32/FileAttributes_user.c @@ -15,9 +15,12 @@ START_TEST(FileAttributes) PCWSTR FileName = L"\\\\.\\Global\\GLOBALROOT\\Device\\Kmtest-kernel32\\Somefile"; BOOL Ret; DWORD Attributes; + DWORD Error; - KmtLoadDriver(L"kernel32", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"kernel32", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; /* Set read-only attribute */ KmtSendUlongToDriver(IOCTL_EXPECT_SET_ATTRIBUTES, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_NORMAL); diff --git a/modules/rostests/kmtests/kernel32/FindFile_user.c b/modules/rostests/kmtests/kernel32/FindFile_user.c index 34bd99a92f1..4d4425191f3 100644 --- a/modules/rostests/kmtests/kernel32/FindFile_user.c +++ b/modules/rostests/kmtests/kernel32/FindFile_user.c @@ -97,9 +97,12 @@ START_TEST(FindFile) const INT TestCount = sizeof(Tests) / sizeof(Tests[0]); INT i; WCHAR ExpressionBuffer[MAX_PATH]; + DWORD Error; - KmtLoadDriver(L"kernel32", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"kernel32", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; for (i = 0; i < TestCount; i++) { diff --git a/modules/rostests/kmtests/kmtest/support.c b/modules/rostests/kmtests/kmtest/support.c index 0f0ad64ce45..4cfa4bae9b8 100644 --- a/modules/rostests/kmtests/kmtest/support.c +++ b/modules/rostests/kmtests/kmtest/support.c @@ -124,12 +124,11 @@ static HANDLE TestDeviceHandle; * @param RestartIfRunning * TRUE to stop and restart the service if it is already running */ -VOID +DWORD KmtLoadDriver( IN PCWSTR ServiceName, IN BOOLEAN RestartIfRunning) { - DWORD Error = ERROR_SUCCESS; WCHAR ServicePath[MAX_PATH]; StringCbCopyW(ServicePath, sizeof(ServicePath), ServiceName); @@ -138,13 +137,7 @@ KmtLoadDriver( StringCbCopyW(TestServiceName, sizeof(TestServiceName), L"Kmtest-"); StringCbCatW(TestServiceName, sizeof(TestServiceName), ServiceName); - Error = KmtCreateAndStartService(TestServiceName, ServicePath, NULL, &TestServiceHandle, RestartIfRunning); - - if (Error) - { - // TODO - __debugbreak(); - } + return KmtCreateAndStartService(TestServiceName, ServicePath, NULL, &TestServiceHandle, RestartIfRunning); } /** @@ -177,7 +170,7 @@ KmtUnloadDriver(VOID) * * Open special-purpose driver (acquire a device handle) */ -VOID +DWORD KmtOpenDriver(VOID) { DWORD Error = ERROR_SUCCESS; @@ -190,12 +183,30 @@ KmtOpenDriver(VOID) if (TestDeviceHandle == INVALID_HANDLE_VALUE) error(Error); - if (Error) - { - // TODO - __debugbreak(); - } + return Error; +} +/** + * @name KmtOpenDriver + * + * Load and open special-purpose driver (acquire a device handle) + */ +DWORD +KmtLoadAndOpenDriver( + IN PCWSTR ServiceName, + IN BOOLEAN RestartIfRunning) +{ + DWORD Error; + + Error = KmtLoadDriver(ServiceName, RestartIfRunning); + if (Error) + return Error; + + Error = KmtOpenDriver(); + if (Error) + return Error; + + return ERROR_SUCCESS; } /** @@ -213,8 +224,7 @@ KmtCloseDriver(VOID) if (Error) { - // TODO - __debugbreak(); + DPRINT1("CloseHandle failed: 0x%lx\n", Error); } } diff --git a/modules/rostests/kmtests/ntos_cc/CcCopyRead_user.c b/modules/rostests/kmtests/ntos_cc/CcCopyRead_user.c index cfaad14634c..4b8d6034199 100644 --- a/modules/rostests/kmtests/ntos_cc/CcCopyRead_user.c +++ b/modules/rostests/kmtests/ntos_cc/CcCopyRead_user.c @@ -20,9 +20,12 @@ START_TEST(CcCopyRead) UNICODE_STRING ReallySmallAlignmentTest = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyRead\\ReallySmallAlignmentTest"); UNICODE_STRING FileBig = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyRead\\FileBig"); UNICODE_STRING BehaviourTestFile = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyRead\\BehaviourTestFile"); + DWORD Error; - KmtLoadDriver(L"CcCopyRead", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"CcCopyRead", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; InitializeObjectAttributes(&ObjectAttributes, &SmallAlignmentTest, OBJ_CASE_INSENSITIVE, NULL, NULL); Status = NtOpenFile(&Handle, FILE_ALL_ACCESS, &ObjectAttributes, &IoStatusBlock, 0, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT); diff --git a/modules/rostests/kmtests/ntos_cc/CcCopyWrite_user.c b/modules/rostests/kmtests/ntos_cc/CcCopyWrite_user.c index 3626cc16d0f..11c41fc1533 100644 --- a/modules/rostests/kmtests/ntos_cc/CcCopyWrite_user.c +++ b/modules/rostests/kmtests/ntos_cc/CcCopyWrite_user.c @@ -20,9 +20,12 @@ START_TEST(CcCopyWrite) UNICODE_STRING VerySmallFile = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyWrite\\VerySmallFile"); UNICODE_STRING NormalFile = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyWrite\\NormalFile"); UNICODE_STRING BehaviourTestFile = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-CcCopyWrite\\BehaviourTestFile"); + DWORD Error; - KmtLoadDriver(L"CcCopyWrite", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"CcCopyWrite", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; InitializeObjectAttributes(&ObjectAttributes, &VerySmallFile, OBJ_CASE_INSENSITIVE, NULL, NULL); Status = NtOpenFile(&Handle, FILE_ALL_ACCESS, &ObjectAttributes, &IoStatusBlock, 0, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT); diff --git a/modules/rostests/kmtests/ntos_cc/CcMapData_user.c b/modules/rostests/kmtests/ntos_cc/CcMapData_user.c index dee2a93d5ee..1964c4a9801 100644 --- a/modules/rostests/kmtests/ntos_cc/CcMapData_user.c +++ b/modules/rostests/kmtests/ntos_cc/CcMapData_user.c @@ -15,8 +15,10 @@ START_TEST(CcMapData) DWORD Ret; ULONG TestId; - KmtLoadDriver(L"CcMapData", FALSE); - KmtOpenDriver(); + Ret = KmtLoadAndOpenDriver(L"CcMapData", FALSE); + ok_eq_int(Ret, ERROR_SUCCESS); + if (Ret) + return; /* 3 tests for offset * 1 test for BCB diff --git a/modules/rostests/kmtests/ntos_cc/CcPinMappedData_user.c b/modules/rostests/kmtests/ntos_cc/CcPinMappedData_user.c index e0fdcfda150..7c7eaa9901e 100644 --- a/modules/rostests/kmtests/ntos_cc/CcPinMappedData_user.c +++ b/modules/rostests/kmtests/ntos_cc/CcPinMappedData_user.c @@ -15,8 +15,10 @@ START_TEST(CcPinMappedData) DWORD Ret; ULONG TestId; - KmtLoadDriver(L"CcPinMappedData", FALSE); - KmtOpenDriver(); + Ret = KmtLoadAndOpenDriver(L"CcPinMappedData", FALSE); + ok_eq_int(Ret, ERROR_SUCCESS); + if (Ret) + return; /* 1 basic test */ for (TestId = 0; TestId < 5; ++TestId) diff --git a/modules/rostests/kmtests/ntos_cc/CcPinRead_user.c b/modules/rostests/kmtests/ntos_cc/CcPinRead_user.c index c0878435fe7..9ba93796ca0 100644 --- a/modules/rostests/kmtests/ntos_cc/CcPinRead_user.c +++ b/modules/rostests/kmtests/ntos_cc/CcPinRead_user.c @@ -15,8 +15,10 @@ START_TEST(CcPinRead) DWORD Ret; ULONG TestId; - KmtLoadDriver(L"CcPinRead", FALSE); - KmtOpenDriver(); + Ret = KmtLoadAndOpenDriver(L"CcPinRead", FALSE); + ok_eq_int(Ret, ERROR_SUCCESS); + if (Ret) + return; /* 3 tests for offset * 1 test for BCB diff --git a/modules/rostests/kmtests/ntos_cc/CcSetFileSizes_user.c b/modules/rostests/kmtests/ntos_cc/CcSetFileSizes_user.c index 67bcc1df89e..51577c6f694 100644 --- a/modules/rostests/kmtests/ntos_cc/CcSetFileSizes_user.c +++ b/modules/rostests/kmtests/ntos_cc/CcSetFileSizes_user.c @@ -15,8 +15,10 @@ START_TEST(CcSetFileSizes) DWORD Ret; ULONG TestId; - KmtLoadDriver(L"CcSetFileSizes", FALSE); - KmtOpenDriver(); + Ret = KmtLoadAndOpenDriver(L"CcSetFileSizes", FALSE); + ok_eq_int(Ret, ERROR_SUCCESS); + if (Ret) + return; /* 0: mapped data - only FS * 1: copy read - only FS diff --git a/modules/rostests/kmtests/ntos_io/IoCreateFile_user.c b/modules/rostests/kmtests/ntos_io/IoCreateFile_user.c index 86ae2d8e497..02cfc7183cf 100644 --- a/modules/rostests/kmtests/ntos_io/IoCreateFile_user.c +++ b/modules/rostests/kmtests/ntos_io/IoCreateFile_user.c @@ -18,8 +18,10 @@ START_TEST(IoCreateFile) KmtRunKernelTest("IoCreateFile"); - KmtLoadDriver(L"IoCreateFile", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"IoCreateFile", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; Error = KmtSendStringToDriver(IOCTL_CALL_CREATE, NonSymlinkedFileName); ok(Error == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lx\n", Error); diff --git a/modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c b/modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c index 44707c6db59..50d66c58926 100644 --- a/modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c +++ b/modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c @@ -9,12 +9,20 @@ START_TEST(IoDeviceObject) { + DWORD Error; + /* make sure IoHelper has an existing service key, but is not started */ - KmtLoadDriver(L"IoHelper", FALSE); + Error = KmtLoadDriver(L"IoHelper", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; KmtUnloadDriver(); - KmtLoadDriver(L"IoDeviceObject", TRUE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"IoDeviceObject", TRUE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; + KmtCloseDriver(); KmtUnloadDriver(); } diff --git a/modules/rostests/kmtests/ntos_io/IoReadWrite_user.c b/modules/rostests/kmtests/ntos_io/IoReadWrite_user.c index e04119bf775..b71a47b2399 100644 --- a/modules/rostests/kmtests/ntos_io/IoReadWrite_user.c +++ b/modules/rostests/kmtests/ntos_io/IoReadWrite_user.c @@ -304,9 +304,12 @@ START_TEST(IoReadWrite) OBJECT_ATTRIBUTES ObjectAttributes; IO_STATUS_BLOCK IoStatus; NTSTATUS Status; + DWORD Error; - KmtLoadDriver(L"IoReadWrite", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"IoReadWrite", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; RtlFillMemory(&IoStatus, sizeof(IoStatus), 0x55); InitializeObjectAttributes(&ObjectAttributes, diff --git a/modules/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_user.c b/modules/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_user.c index 0fe781f7d1a..31b0592e464 100644 --- a/modules/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_user.c +++ b/modules/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_user.c @@ -86,9 +86,12 @@ START_TEST(MmMapLockedPagesSpecifyCache) SYSTEM_BASIC_INFORMATION BasicInfo; NTSTATUS Status; ULONG_PTR HighestAddress; + DWORD Error; - KmtLoadDriver(L"MmMapLockedPagesSpecifyCache", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"MmMapLockedPagesSpecifyCache", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; // Less than a page SET_BUFFER_LENGTH(BufferLength, 2048); diff --git a/modules/rostests/kmtests/ntos_mm/NtCreateSection_user.c b/modules/rostests/kmtests/ntos_mm/NtCreateSection_user.c index 39cdcd61498..853d7d4860a 100644 --- a/modules/rostests/kmtests/ntos_mm/NtCreateSection_user.c +++ b/modules/rostests/kmtests/ntos_mm/NtCreateSection_user.c @@ -19,9 +19,12 @@ START_TEST(NtCreateSection) UNICODE_STRING InitOnCreate = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-NtCreateSection\\InitOnCreate"); UNICODE_STRING InitOnRW = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-NtCreateSection\\InitOnRW"); UNICODE_STRING InvalidInit = RTL_CONSTANT_STRING(L"\\Device\\Kmtest-NtCreateSection\\InvalidInit"); + DWORD Error; - KmtLoadDriver(L"NtCreateSection", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"NtCreateSection", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; /* Test 0 */ InitializeObjectAttributes(&ObjectAttributes, &InvalidInit, OBJ_CASE_INSENSITIVE, NULL, NULL); diff --git a/modules/rostests/kmtests/ntos_po/PoIrp_user.c b/modules/rostests/kmtests/ntos_po/PoIrp_user.c index ee6a1ad57bf..951605fb2ad 100644 --- a/modules/rostests/kmtests/ntos_po/PoIrp_user.c +++ b/modules/rostests/kmtests/ntos_po/PoIrp_user.c @@ -10,6 +10,8 @@ START_TEST(PoIrp) { + DWORD Error; + #if defined(_M_AMD64) if (TRUE) { @@ -18,8 +20,11 @@ START_TEST(PoIrp) } #endif - KmtLoadDriver(L"PoIrp", TRUE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"PoIrp", TRUE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return; + KmtSendToDriver(IOCTL_RUN_TEST); KmtCloseDriver(); KmtUnloadDriver(); diff --git a/modules/rostests/kmtests/tcpip/TcpIp_user.c b/modules/rostests/kmtests/tcpip/TcpIp_user.c index 80f33b090f4..60286d2e48a 100644 --- a/modules/rostests/kmtests/tcpip/TcpIp_user.c +++ b/modules/rostests/kmtests/tcpip/TcpIp_user.c @@ -11,12 +11,18 @@ #include "tcpip.h" static -void +DWORD LoadTcpIpTestDriver(void) { + DWORD Error; + /* Start the special-purpose driver */ - KmtLoadDriver(L"TcpIp", FALSE); - KmtOpenDriver(); + Error = KmtLoadAndOpenDriver(L"TcpIp", FALSE); + ok_eq_int(Error, ERROR_SUCCESS); + if (Error) + return Error; + + return ERROR_SUCCESS; } static @@ -32,7 +38,10 @@ START_TEST(TcpIpTdi) { DWORD Error; - LoadTcpIpTestDriver(); + Error = LoadTcpIpTestDriver(); + ok_eq_int(Error, 0); + if (Error) + return; Error = KmtSendToDriver(IOCTL_TEST_TDI); ok_eq_ulong(Error, ERROR_SUCCESS);