[NTDLL_APITEST] Add test for NtDuplicateObject with OBJ_PROTECT_CLOSE.
authorThomas Faber <thomas.faber@reactos.org>
Sat, 2 Feb 2019 21:48:51 +0000 (22:48 +0100)
committerThomas Faber <thomas.faber@reactos.org>
Sat, 2 Feb 2019 22:02:53 +0000 (23:02 +0100)
modules/rostests/apitests/ntdll/CMakeLists.txt
modules/rostests/apitests/ntdll/NtDuplicateObject.c [new file with mode: 0644]
modules/rostests/apitests/ntdll/testlist.c

index 4860cd2..e3a2725 100644 (file)
@@ -15,6 +15,7 @@ list(APPEND SOURCE
     NtCreateKey.c
     NtCreateThread.c
     NtDeleteKey.c
     NtCreateKey.c
     NtCreateThread.c
     NtDeleteKey.c
+    NtDuplicateObject.c
     NtFreeVirtualMemory.c
     NtLoadUnloadKey.c
     NtMapViewOfSection.c
     NtFreeVirtualMemory.c
     NtLoadUnloadKey.c
     NtMapViewOfSection.c
diff --git a/modules/rostests/apitests/ntdll/NtDuplicateObject.c b/modules/rostests/apitests/ntdll/NtDuplicateObject.c
new file mode 100644 (file)
index 0000000..7944c32
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * PROJECT:     ReactOS Kernel
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     Test for NtDuplicateObject
+ * COPYRIGHT:   Copyright 2019 Thomas Faber (thomas.faber@reactos.org)
+ */
+
+#include "precomp.h"
+
+#define OBJ_PROTECT_CLOSE 0x01
+
+START_TEST(NtDuplicateObject)
+{
+    NTSTATUS Status;
+    HANDLE Handle;
+
+    Handle = NULL;
+    Status = NtDuplicateObject(NtCurrentProcess(),
+                               NtCurrentProcess(),
+                               NtCurrentProcess(),
+                               &Handle,
+                               GENERIC_ALL,
+                               OBJ_PROTECT_CLOSE,
+                               0);
+    ok_hex(Status, STATUS_SUCCESS);
+    ok(Handle != NULL && Handle != NtCurrentProcess(),
+        "Handle = %p\n", Handle);
+    Status = NtClose(Handle);
+    ok_hex(Status, STATUS_HANDLE_NOT_CLOSABLE);
+}
index e627634..a828865 100644 (file)
@@ -13,6 +13,7 @@ extern void func_NtCreateFile(void);
 extern void func_NtCreateKey(void);
 extern void func_NtCreateThread(void);
 extern void func_NtDeleteKey(void);
 extern void func_NtCreateKey(void);
 extern void func_NtCreateThread(void);
 extern void func_NtDeleteKey(void);
+extern void func_NtDuplicateObject(void);
 extern void func_NtFreeVirtualMemory(void);
 extern void func_NtLoadUnloadKey(void);
 extern void func_NtMapViewOfSection(void);
 extern void func_NtFreeVirtualMemory(void);
 extern void func_NtLoadUnloadKey(void);
 extern void func_NtMapViewOfSection(void);
@@ -77,6 +78,7 @@ const struct test winetest_testlist[] =
     { "NtCreateKey",                    func_NtCreateKey },
     { "NtCreateThread",                 func_NtCreateThread },
     { "NtDeleteKey",                    func_NtDeleteKey },
     { "NtCreateKey",                    func_NtCreateKey },
     { "NtCreateThread",                 func_NtCreateThread },
     { "NtDeleteKey",                    func_NtDeleteKey },
+    { "NtDuplicateObject",              func_NtDuplicateObject },
     { "NtFreeVirtualMemory",            func_NtFreeVirtualMemory },
     { "NtLoadUnloadKey",                func_NtLoadUnloadKey },
     { "NtMapViewOfSection",             func_NtMapViewOfSection },
     { "NtFreeVirtualMemory",            func_NtFreeVirtualMemory },
     { "NtLoadUnloadKey",                func_NtLoadUnloadKey },
     { "NtMapViewOfSection",             func_NtMapViewOfSection },