2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for the HKEY_CLASSES_ROOT key
5 * PROGRAMMER: Jérôme Gardou <jerome.gardou@reactos.org>
10 #define WIN32_NO_STATUS
12 #include <ndk/rtlfuncs.h>
13 #include <ndk/cmfuncs.h>
14 #include <ndk/cmtypes.h>
16 #define IS_HKCR(hk) ((UINT_PTR)hk > 0 && ((UINT_PTR)hk & 3) == 2)
20 Test_KeyInformation(void)
25 UNICODE_STRING KeyName
= RTL_CONSTANT_STRING(L
"\\Registry\\Machine\\Software\\Classes\\CLSID");
26 UNICODE_STRING InfoName
;
27 CHAR Buffer
[FIELD_OFFSET(KEY_NAME_INFORMATION
, Name
[512])];
28 PKEY_NAME_INFORMATION NameInfo
= (PKEY_NAME_INFORMATION
)Buffer
;
32 ErrorCode
= RegOpenKeyExW(HKEY_CLASSES_ROOT
, L
"CLSID", 0, KEY_READ
, &KeyHandle
);
33 ok_dec(ErrorCode
, ERROR_SUCCESS
);
34 ok(IS_HKCR(KeyHandle
), "\n");
36 Status
= NtQueryKey(KeyHandle
, KeyNameInformation
, NameInfo
, sizeof(Buffer
), &ResultLength
);
37 ok_ntstatus(Status
, STATUS_SUCCESS
);
38 RtlInitUnicodeString(&InfoName
, NameInfo
->Name
);
39 InfoName
.Length
= NameInfo
->NameLength
;
40 ok(RtlCompareUnicodeString(&KeyName
, &InfoName
, TRUE
) == 0, "%.*S\n", InfoName
.Length
, InfoName
.Buffer
);
42 RegCloseKey(KeyHandle
);
47 Test_DuplicateHandle(void)
49 HKEY KeyHandle
, DupHandle
;
53 UNICODE_STRING KeyName
= RTL_CONSTANT_STRING(L
"\\Registry\\Machine\\Software\\Classes\\CLSID");
54 UNICODE_STRING InfoName
;
55 CHAR Buffer
[FIELD_OFFSET(KEY_NAME_INFORMATION
, Name
[512])];
56 PKEY_NAME_INFORMATION NameInfo
= (PKEY_NAME_INFORMATION
)Buffer
;
60 ErrorCode
= RegOpenKeyExW(HKEY_CLASSES_ROOT
, L
"CLSID", 0, KEY_READ
, &KeyHandle
);
61 ok_dec(ErrorCode
, ERROR_SUCCESS
);
62 ok(IS_HKCR(KeyHandle
), "\n");
64 Duplicated
= DuplicateHandle(GetCurrentProcess(), KeyHandle
, GetCurrentProcess(), (PHANDLE
)&DupHandle
, 0, 0, DUPLICATE_SAME_ACCESS
);
66 ok(DupHandle
!= NULL
, "\n");
67 ok(!IS_HKCR(DupHandle
), "\n");
69 Status
= NtQueryKey(DupHandle
, KeyNameInformation
, NameInfo
, sizeof(Buffer
), &ResultLength
);
70 ok_ntstatus(Status
, STATUS_SUCCESS
);
71 RtlInitUnicodeString(&InfoName
, NameInfo
->Name
);
72 InfoName
.Length
= NameInfo
->NameLength
;
73 ok(RtlCompareUnicodeString(&KeyName
, &InfoName
, TRUE
) == 0, "%S\n", NameInfo
->Name
);
75 RegCloseKey(KeyHandle
);
76 RegCloseKey(DupHandle
);
79 START_TEST(HKEY_CLASSES_ROOT
)
81 Test_KeyInformation();
82 Test_DuplicateHandle();