2 * PROJECT: ReactOS API tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for NtCreateKey
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
14 _In_ ACCESS_MASK ExpectedAccess
,
19 OBJECT_BASIC_INFORMATION BasicInfo
;
22 Status
= NtQueryObject(Handle
,
23 ObjectBasicInformation
,
27 ok_(File
, Line
)(Status
== STATUS_SUCCESS
, "NtQueryObject returned 0x%lx\n", Status
);
28 ok_(File
, Line
)(BasicInfo
.GrantedAccess
== ExpectedAccess
,
29 "GrantedAccess is 0x%lx, expected 0x%lx\n",
30 BasicInfo
.GrantedAccess
, ExpectedAccess
);
32 #define VerifyAccess(h, e) VerifyAccess_(h, e, __FILE__, __LINE__)
37 _In_ ACCESS_MASK DesiredAccess
,
38 _In_ ACCESS_MASK ExpectedAccess
,
39 _In_ NTSTATUS ExpectedStatus
,
45 UNICODE_STRING KeyName
= RTL_CONSTANT_STRING(L
"\\Registry\\Machine\\Software");
46 OBJECT_ATTRIBUTES ObjectAttributes
;
48 InitializeObjectAttributes(&ObjectAttributes
,
53 Status
= NtCreateKey(&KeyHandle
,
58 REG_OPTION_NON_VOLATILE
,
60 ok_(File
, Line
)(Status
== ExpectedStatus
,
61 "NtCreateKey returned 0x%lx, expected 0x%lx\n",
62 Status
, ExpectedStatus
);
63 if (NT_SUCCESS(Status
))
65 VerifyAccess_(KeyHandle
, ExpectedAccess
, File
, Line
);
66 Status
= NtClose(KeyHandle
);
67 ok_(File
, Line
)(Status
== STATUS_SUCCESS
,
68 "NtClose from NtCreateKey returned 0x%lx\n",
71 else if (NT_SUCCESS(ExpectedStatus
))
73 skip_(File
, Line
)("NtCreateKey failed, skipping\n");
76 Status
= NtOpenKey(&KeyHandle
,
79 ok_(File
, Line
)(Status
== ExpectedStatus
,
80 "NtOpenKey returned 0x%lx, expected 0x%lx\n",
81 Status
, ExpectedStatus
);
82 if (NT_SUCCESS(Status
))
84 VerifyAccess_(KeyHandle
, ExpectedAccess
, File
, Line
);
85 Status
= NtClose(KeyHandle
);
86 ok_(File
, Line
)(Status
== STATUS_SUCCESS
,
87 "NtClose from NtOpenKey returned 0x%lx\n",
90 else if (NT_SUCCESS(ExpectedStatus
))
92 skip_(File
, Line
)("NtOpenKey failed, skipping\n");
95 #define TestCreateOpen(d, ea, es) TestCreateOpen_(d, ea, es, __FILE__, __LINE__)
97 START_TEST(NtCreateKey
)
99 TestCreateOpen(0, 0, STATUS_ACCESS_DENIED
);
100 TestCreateOpen(KEY_WOW64_32KEY
, 0, STATUS_ACCESS_DENIED
);
101 TestCreateOpen(KEY_WOW64_64KEY
, 0, STATUS_ACCESS_DENIED
);
102 TestCreateOpen(KEY_WOW64_32KEY
| KEY_WOW64_64KEY
, 0, STATUS_ACCESS_DENIED
); // STATUS_INVALID_PARAMETER on Win7
103 TestCreateOpen(READ_CONTROL
, READ_CONTROL
, STATUS_SUCCESS
);
104 TestCreateOpen(READ_CONTROL
| KEY_WOW64_32KEY
, READ_CONTROL
, STATUS_SUCCESS
);
105 TestCreateOpen(READ_CONTROL
| KEY_WOW64_64KEY
, READ_CONTROL
, STATUS_SUCCESS
);
106 TestCreateOpen(READ_CONTROL
| KEY_WOW64_32KEY
| KEY_WOW64_64KEY
, READ_CONTROL
, STATUS_SUCCESS
); // STATUS_INVALID_PARAMETER on Win7