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.... ============================================================================== --- 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... ============================================================================== --- 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?... ============================================================================== --- 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 },