From 1f02ead2cc5e8ea68cb667df397f28aa548a3ada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Mon, 22 Sep 2014 14:46:08 +0000 Subject: [PATCH] [NTDLL_APITEST] - Add a test stressing the registry a lot. By "V". ROSTESTS-141 #resolve #comment Committed, Thanks! svn path=/trunk/; revision=64227 --- rostests/apitests/ntdll/NtDeleteKey.c | 54 ++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/rostests/apitests/ntdll/NtDeleteKey.c b/rostests/apitests/ntdll/NtDeleteKey.c index 2e2a327783c..fc49cf37fee 100644 --- a/rostests/apitests/ntdll/NtDeleteKey.c +++ b/rostests/apitests/ntdll/NtDeleteKey.c @@ -7,6 +7,7 @@ #include #define WIN32_NO_STATUS +#include #include #include #include @@ -34,7 +35,9 @@ CreateRegistryKeyHandle(PHANDLE KeyHandle, START_TEST(NtDeleteKey) { NTSTATUS Status; - HANDLE ParentKey, ChildKey; + HANDLE ParentKey, ChildKey, PetKey; + WCHAR Buffer[sizeof("\\Registry\\Machine\\Software\\RosTests\\Child\\Pet") + 5]; + ULONG i; /* Create a registry key */ Status = CreateRegistryKeyHandle(&ParentKey, KEY_READ | DELETE, L"\\Registry\\Machine\\Software\\RosTests"); @@ -93,4 +96,53 @@ START_TEST(NtDeleteKey) /* Close everything */ NtClose(ChildKey); NtClose(ParentKey); + + /* Stress test key creation */ + Status = CreateRegistryKeyHandle(&ParentKey, KEY_READ | DELETE, L"\\Registry\\Machine\\Software\\RosTests"); + + for (i = 0; i <= 9999; i++) { + swprintf(Buffer, L"\\Registry\\Machine\\Software\\RosTests\\Child%04d", i); + Status = CreateRegistryKeyHandle(&ChildKey, KEY_READ, Buffer); + NtClose(ChildKey); + + swprintf(Buffer, L"\\Registry\\Machine\\Software\\RosTests\\Child%04d\\Pet", i); + Status = CreateRegistryKeyHandle(&PetKey, KEY_READ, Buffer); + NtClose(PetKey); + } + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Test hive rerooting */ + Status = CreateRegistryKeyHandle(&PetKey, DELETE, L"\\Registry\\Machine\\Software\\RosTests\\Child5000\\Pet"); + ok_ntstatus(Status, STATUS_SUCCESS); + Status = NtDeleteKey(PetKey); + ok_ntstatus(Status, STATUS_SUCCESS); + + NtClose(PetKey); + + Status = CreateRegistryKeyHandle(&ChildKey, DELETE, L"\\Registry\\Machine\\Software\\RosTests\\Child5000"); + ok_ntstatus(Status, STATUS_SUCCESS); + Status = NtDeleteKey(ChildKey); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Test mass key deletion */ + for (i = 0; i <= 9999; i++) { + if (i != 5000) { + swprintf(Buffer, L"\\Registry\\Machine\\Software\\RosTests\\Child%04d\\Pet", i); + CreateRegistryKeyHandle(&PetKey, DELETE, Buffer); + Status = NtDeleteKey(PetKey); + NtClose(PetKey); + + swprintf(Buffer, L"\\Registry\\Machine\\Software\\RosTests\\Child%04d", i); + CreateRegistryKeyHandle(&ChildKey, DELETE, Buffer); + Status = NtDeleteKey(ChildKey); + NtClose(ChildKey); + } + } + ok_ntstatus(Status, STATUS_SUCCESS); + + Status = NtDeleteKey(ParentKey); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Close ParentKey */ + NtClose(ParentKey); }