[KMTEST] Handle failure in KmtLoadDriver and KmtOpenDriver
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Mon, 8 Aug 2022 07:50:28 +0000 (10:50 +0300)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 13 Dec 2022 06:18:24 +0000 (07:18 +0100)
19 files changed:
modules/rostests/kmtests/example/Example_user.c
modules/rostests/kmtests/hidparse/HidP_user.c
modules/rostests/kmtests/include/kmt_test.h
modules/rostests/kmtests/kernel32/FileAttributes_user.c
modules/rostests/kmtests/kernel32/FindFile_user.c
modules/rostests/kmtests/kmtest/support.c
modules/rostests/kmtests/ntos_cc/CcCopyRead_user.c
modules/rostests/kmtests/ntos_cc/CcCopyWrite_user.c
modules/rostests/kmtests/ntos_cc/CcMapData_user.c
modules/rostests/kmtests/ntos_cc/CcPinMappedData_user.c
modules/rostests/kmtests/ntos_cc/CcPinRead_user.c
modules/rostests/kmtests/ntos_cc/CcSetFileSizes_user.c
modules/rostests/kmtests/ntos_io/IoCreateFile_user.c
modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c
modules/rostests/kmtests/ntos_io/IoReadWrite_user.c
modules/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_user.c
modules/rostests/kmtests/ntos_mm/NtCreateSection_user.c
modules/rostests/kmtests/ntos_po/PoIrp_user.c
modules/rostests/kmtests/tcpip/TcpIp_user.c

index bd440e0..720a2d0 100644 (file)
@@ -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");
index d1f5a4e..153ef22 100644 (file)
@@ -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
+}
index 509788a..c046ab0 100644 (file)
@@ -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);
index 88d85a8..0815cdf 100644 (file)
@@ -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);
index 34bd99a..4d44251 100644 (file)
@@ -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++)
     {
index 0f0ad64..4cfa4ba 100644 (file)
@@ -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);
 
+    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)
-    {
-        // TODO
-        __debugbreak();
-    }
+        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);
     }
 }
 
index cfaad14..4b8d603 100644 (file)
@@ -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);
index 3626cc1..11c41fc 100644 (file)
@@ -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);
index dee2a93..1964c4a 100644 (file)
@@ -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
index e0fdcfd..7c7eaa9 100644 (file)
@@ -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)
index c087843..9ba9379 100644 (file)
@@ -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
index 67bcc1d..51577c6 100644 (file)
@@ -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
index 86ae2d8..02cfc71 100644 (file)
@@ -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);
index 44707c6..50d66c5 100644 (file)
@@ -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();
 }
index e04119b..b71a47b 100644 (file)
@@ -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,
index 0fe781f..31b0592 100644 (file)
@@ -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);
index 39cdcd6..853d7d4 100644 (file)
@@ -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);
index ee6a1ad..951605f 100644 (file)
@@ -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();
index 80f33b0..60286d2 100644 (file)
 #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);