From 40cf5d521c342b3cf452ffcf6abae7c412a12d1d Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Mon, 29 Sep 2014 13:35:59 +0000 Subject: [PATCH] [ADVAPI32_APITEST] - Add a few tests regarding HKEY_CLASSES_ROOT special keys. svn path=/trunk/; revision=64393 --- rostests/apitests/advapi32/CMakeLists.txt | 1 + .../apitests/advapi32/HKEY_CLASSES_ROOT.c | 83 +++++++++++++++++++ rostests/apitests/advapi32/testlist.c | 2 + 3 files changed, 86 insertions(+) create mode 100644 rostests/apitests/advapi32/HKEY_CLASSES_ROOT.c diff --git a/rostests/apitests/advapi32/CMakeLists.txt b/rostests/apitests/advapi32/CMakeLists.txt index aa2ee135f36..a9a95fa4935 100644 --- a/rostests/apitests/advapi32/CMakeLists.txt +++ b/rostests/apitests/advapi32/CMakeLists.txt @@ -1,6 +1,7 @@ list(APPEND SOURCE CreateService.c + HKEY_CLASSES_ROOT.c LockDatabase.c QueryServiceConfig2.c RtlEncryptMemory.c diff --git a/rostests/apitests/advapi32/HKEY_CLASSES_ROOT.c b/rostests/apitests/advapi32/HKEY_CLASSES_ROOT.c new file mode 100644 index 00000000000..a0e8845e53f --- /dev/null +++ b/rostests/apitests/advapi32/HKEY_CLASSES_ROOT.c @@ -0,0 +1,83 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Test for CreateService + * PROGRAMMER: Thomas Faber + */ + +#include + +#define WIN32_NO_STATUS +#include +#include +#include +#include + +#define IS_HKCR(hk) ((UINT_PTR)hk > 0 && ((UINT_PTR)hk & 3) == 2) + +static +void +Test_KeyInformation(void) +{ + HKEY KeyHandle; + DWORD ErrorCode; + NTSTATUS Status; + UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\Software\\Classes\\CLSID"); + UNICODE_STRING InfoName; + CHAR Buffer[FIELD_OFFSET(KEY_NAME_INFORMATION, Name[512])]; + PKEY_NAME_INFORMATION NameInfo = (PKEY_NAME_INFORMATION)Buffer; + ULONG ResultLength; + + + ErrorCode = RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_READ, &KeyHandle); + ok_dec(ErrorCode, ERROR_SUCCESS); + ok(IS_HKCR(KeyHandle), "\n"); + + Status = NtQueryKey(KeyHandle, KeyNameInformation, NameInfo, sizeof(Buffer), &ResultLength); + ok_ntstatus(Status, STATUS_SUCCESS); + RtlInitUnicodeString(&InfoName, NameInfo->Name); + InfoName.Length = NameInfo->NameLength; + ok(RtlCompareUnicodeString(&KeyName, &InfoName, TRUE) == 0, "%.*S\n", InfoName.Length, InfoName.Buffer); + + RegCloseKey(KeyHandle); +} + +static +void +Test_DuplicateHandle(void) +{ + HKEY KeyHandle, DupHandle; + DWORD ErrorCode; + BOOL Duplicated; + NTSTATUS Status; + UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\Software\\Classes\\CLSID"); + UNICODE_STRING InfoName; + CHAR Buffer[FIELD_OFFSET(KEY_NAME_INFORMATION, Name[512])]; + PKEY_NAME_INFORMATION NameInfo = (PKEY_NAME_INFORMATION)Buffer; + ULONG ResultLength; + + + ErrorCode = RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_READ, &KeyHandle); + ok_dec(ErrorCode, ERROR_SUCCESS); + ok(IS_HKCR(KeyHandle), "\n"); + + Duplicated = DuplicateHandle(GetCurrentProcess(), KeyHandle, GetCurrentProcess(), (PHANDLE)&DupHandle, 0, 0, DUPLICATE_SAME_ACCESS); + ok(Duplicated, "\n"); + ok(DupHandle != NULL, "\n"); + ok(!IS_HKCR(DupHandle), "\n"); + + Status = NtQueryKey(DupHandle, KeyNameInformation, NameInfo, sizeof(Buffer), &ResultLength); + ok_ntstatus(Status, STATUS_SUCCESS); + RtlInitUnicodeString(&InfoName, NameInfo->Name); + InfoName.Length = NameInfo->NameLength; + ok(RtlCompareUnicodeString(&KeyName, &InfoName, TRUE) == 0, "%S\n", NameInfo->Name); + + RegCloseKey(KeyHandle); + RegCloseKey(DupHandle); +} + +START_TEST(HKEY_CLASSES_ROOT) +{ + Test_KeyInformation(); + Test_DuplicateHandle(); +} diff --git a/rostests/apitests/advapi32/testlist.c b/rostests/apitests/advapi32/testlist.c index 803f046676a..7dc96817f3b 100644 --- a/rostests/apitests/advapi32/testlist.c +++ b/rostests/apitests/advapi32/testlist.c @@ -4,6 +4,7 @@ #include extern void func_CreateService(void); +extern void func_HKEY_CLASSES_ROOT(void); extern void func_LockDatabase(void); extern void func_QueryServiceConfig2(void); extern void func_RtlEncryptMemory(void); @@ -12,6 +13,7 @@ extern void func_SaferIdentifyLevel(void); const struct test winetest_testlist[] = { { "CreateService", func_CreateService }, + { "HKEY_CLASSES_ROOT", func_HKEY_CLASSES_ROOT }, { "LockDatabase" , func_LockDatabase }, { "QueryServiceConfig2", func_QueryServiceConfig2 }, { "RtlEncryptMemory", func_RtlEncryptMemory }, -- 2.17.1