mirror of
https://github.com/reactos/reactos.git
synced 2024-09-29 05:54:05 +00:00
[NTDLL_APITEST]
- Add tests for NtDeleteKey svn path=/trunk/; revision=63699
This commit is contained in:
parent
d21dde849e
commit
d331e1725b
|
@ -5,6 +5,7 @@ list(APPEND SOURCE
|
|||
NtContinue.c
|
||||
NtCreateFile.c
|
||||
NtCreateThread.c
|
||||
NtDeleteKey.c
|
||||
NtFreeVirtualMemory.c
|
||||
NtMapViewOfSection.c
|
||||
NtMutant.c
|
||||
|
|
96
rostests/apitests/ntdll/NtDeleteKey.c
Normal file
96
rostests/apitests/ntdll/NtDeleteKey.c
Normal file
|
@ -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);
|
||||
}
|
|
@ -8,6 +8,7 @@ extern void func_NtAllocateVirtualMemory(void);
|
|||
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 @@ const struct test winetest_testlist[] =
|
|||
{ "NtContinue", func_NtContinue },
|
||||
{ "NtCreateFile", func_NtCreateFile },
|
||||
{ "NtCreateThread", func_NtCreateThread },
|
||||
{ "NtDeleteKey", func_NtDeleteKey },
|
||||
{ "NtFreeVirtualMemory", func_NtFreeVirtualMemory },
|
||||
{ "NtMapViewOfSection", func_NtMapViewOfSection },
|
||||
{ "NtMutant", func_NtMutant },
|
||||
|
|
Loading…
Reference in a new issue