Author: jgardou
Date: Mon Jul  7 14:46:04 2014
New Revision: 63699

URL: http://svn.reactos.org/svn/reactos?rev=63699&view=rev
Log:
[NTDLL_APITEST]
 - Add tests for NtDeleteKey

Added:
    trunk/rostests/apitests/ntdll/NtDeleteKey.c   (with props)
Modified:
    trunk/rostests/apitests/ntdll/CMakeLists.txt
    trunk/rostests/apitests/ntdll/testlist.c

Modified: trunk/rostests/apitests/ntdll/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/CMakeLists.txt?rev=63699&r1=63698&r2=63699&view=diff
==============================================================================
--- trunk/rostests/apitests/ntdll/CMakeLists.txt        [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/CMakeLists.txt        [iso-8859-1] Mon Jul  7 
14:46:04 2014
@@ -5,6 +5,7 @@
     NtContinue.c
     NtCreateFile.c
     NtCreateThread.c
+    NtDeleteKey.c
     NtFreeVirtualMemory.c
     NtMapViewOfSection.c
     NtMutant.c

Added: trunk/rostests/apitests/ntdll/NtDeleteKey.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/NtDeleteKey.c?rev=63699
==============================================================================
--- trunk/rostests/apitests/ntdll/NtDeleteKey.c (added)
+++ trunk/rostests/apitests/ntdll/NtDeleteKey.c [iso-8859-1] Mon Jul  7 
14:46:04 2014
@@ -0,0 +1,96 @@
+/*
+ * PROJECT:         ReactOS API Tests
+ * LICENSE:         GPLv2+ - See COPYING in the top level directory
+ * PURPOSE:         Test for NtDeleteKey
+ */
+
+#include <apitest.h>
+
+#define WIN32_NO_STATUS
+#include <ndk/rtlfuncs.h>
+#include <ndk/cmfuncs.h>
+#include <ndk/obfuncs.h>
+#include <ndk/setypes.h>
+
+static
+NTSTATUS
+CreateRegistryKeyHandle(PHANDLE KeyHandle,
+                      ACCESS_MASK AccessMask,
+                      PWCHAR RegistryPath)
+{
+    UNICODE_STRING KeyName;
+    OBJECT_ATTRIBUTES Attributes;
+
+    RtlInitUnicodeString(&KeyName, RegistryPath);
+    InitializeObjectAttributes(&Attributes,
+                               &KeyName,
+                               OBJ_CASE_INSENSITIVE,
+                               NULL,
+                               NULL);
+
+    return NtCreateKey(KeyHandle, AccessMask, &Attributes, 0, NULL, 
REG_OPTION_VOLATILE, 0);
+}
+
+START_TEST(NtDeleteKey)
+{
+    NTSTATUS Status;
+    HANDLE ParentKey, ChildKey;
+
+    /* Create a registry key */
+    Status = CreateRegistryKeyHandle(&ParentKey, KEY_READ | DELETE, 
L"\\Registry\\Machine\\Software\\RosTests");
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* Create a children registry key */
+    Status = CreateRegistryKeyHandle(&ChildKey, KEY_READ | DELETE, 
L"\\Registry\\Machine\\Software\\RosTests\\Child");
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* Try deleting the parent one */
+    Status = NtDeleteKey(ParentKey);
+    ok_ntstatus(Status, STATUS_CANNOT_DELETE);
+
+    /* See what happens with Child one */
+    Status = NtDeleteKey(ChildKey);
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* Retry with parent one */
+    Status = NtDeleteKey(ParentKey);
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* re-retry */
+    Status = NtDeleteKey(ParentKey);
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* Close everything */
+    NtClose(ChildKey);
+    NtClose(ParentKey);
+
+    /* Same, but this time close the child handle before trying to delete the 
parent */
+    /* Create a registry key */
+    Status = CreateRegistryKeyHandle(&ParentKey, KEY_READ | DELETE, 
L"\\Registry\\Machine\\Software\\RosTests");
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* Create a children registry key */
+    Status = CreateRegistryKeyHandle(&ChildKey, KEY_READ, 
L"\\Registry\\Machine\\Software\\RosTests\\Child");
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* Close the Child */
+    NtClose(ChildKey);
+
+    /* Try deleting the parent one */
+    Status = NtDeleteKey(ParentKey);
+    ok_ntstatus(Status, STATUS_CANNOT_DELETE);
+
+    /* See what happens with Child one */
+    Status = CreateRegistryKeyHandle(&ChildKey, DELETE, 
L"\\Registry\\Machine\\Software\\RosTests\\Child");
+    ok_ntstatus(Status, STATUS_SUCCESS);
+    Status = NtDeleteKey(ChildKey);
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* Retry with parent one */
+    Status = NtDeleteKey(ParentKey);
+    ok_ntstatus(Status, STATUS_SUCCESS);
+
+    /* Close everything */
+    NtClose(ChildKey);
+    NtClose(ParentKey);
+}

Propchange: trunk/rostests/apitests/ntdll/NtDeleteKey.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/rostests/apitests/ntdll/testlist.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/testlist.c?rev=63699&r1=63698&r2=63699&view=diff
==============================================================================
--- trunk/rostests/apitests/ntdll/testlist.c    [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/testlist.c    [iso-8859-1] Mon Jul  7 
14:46:04 2014
@@ -8,6 +8,7 @@
 extern void func_NtContinue(void);
 extern void func_NtCreateFile(void);
 extern void func_NtCreateThread(void);
+extern void func_NtDeleteKey(void);
 extern void func_NtFreeVirtualMemory(void);
 extern void func_NtMapViewOfSection(void);
 extern void func_NtMutant(void);
@@ -38,6 +39,7 @@
     { "NtContinue",                     func_NtContinue },
     { "NtCreateFile",                   func_NtCreateFile },
     { "NtCreateThread",                 func_NtCreateThread },
+    { "NtDeleteKey",                    func_NtDeleteKey },
     { "NtFreeVirtualMemory",            func_NtFreeVirtualMemory },
     { "NtMapViewOfSection",             func_NtMapViewOfSection },
     { "NtMutant",                       func_NtMutant },


Reply via email to