ReactOS  0.4.13-dev-52-g0efcfec
CRegKey.cpp
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS api tests
3  * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4  * PURPOSE: Test for CRegKey
5  * PROGRAMMERS: Mark Jansen
6  * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
7  */
8 
9 #include <apitest.h>
10 #include <atlbase.h>
11 
12 START_TEST(CRegKey)
13 {
14  CRegKey key;
15  CRegKey key2(HKEY_CURRENT_USER);
16 
17  ok(key.m_hKey == NULL, "Expected m_hKey to be initialized to 0, was: %p\n", key.m_hKey);
18  ok(key2.m_hKey == HKEY_CURRENT_USER, "Expected m_hKey to be initialized to HKEY_CURRENT_USER, was: %p\n", key2.m_hKey);
19  ok(key2 == HKEY_CURRENT_USER, "Expected operator HKEY() to be implemented\n");
20 
21  // Take ownership
22  CRegKey key3(key2);
23  ok(key3.m_hKey == HKEY_CURRENT_USER, "Expected m_hKey to be initialized to HKEY_CURRENT_USER, was: %p\n", key3.m_hKey);
24  ok(key2.m_hKey == NULL, "Expected m_hKey to be initialized to 0, was: %p\n", key2.m_hKey);
25 
26  LSTATUS lret;
27 
28  lret = key.Close();
29  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
30  lret = key2.Close();
31  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
32  lret = key3.Close();
33  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
34 
35  // read/write
36  lret = key.Open(HKEY_CURRENT_USER, _T("Environment"));
37  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
38  ok(key.m_hKey != NULL, "Expected m_hKey to not be NULL, was: %p\n", key.m_hKey);
39 
40 
41  HKEY tmp = key.m_hKey;
42  HKEY detached = key.Detach();
43  ok(key.m_hKey == NULL, "Expected m_hKey to be 0, was: %p\n", key.m_hKey);
44  ok(detached == tmp, "Expected detached to be %p, was: %p\n", tmp, detached);
45  key.Attach(detached);
46  ok(key.m_hKey == tmp, "Expected m_hKey to be %p, was: %p\n", tmp, key.m_hKey);
47 
48  lret = key2.Open(HKEY_CURRENT_USER, _T("Environment"), KEY_READ);
49  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
50 
51  lret = key3.Open(HKEY_CURRENT_USER, _T("Environment"), KEY_WRITE);
52  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
53 
54  TCHAR testdata[] = _T("XX-XX");
55  lret = key.SetValue(_T("APITEST_VALUE_NAME"), REG_SZ, testdata, sizeof(testdata));
56  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
57 
58  TCHAR buffer[100];
59  ULONG buffer_size = sizeof(buffer);
60  DWORD type = 0x12345;
61  memset(buffer, 0, sizeof(buffer));
62 
63  lret = key.QueryValue(_T("APITEST_VALUE_NAME"), &type, buffer, &buffer_size);
64  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
65  ok(type == REG_SZ, "Expected type to be REG_SZ, was: %lu\n", type);
66  ok(buffer_size == sizeof(testdata), "Expected buffer_size to be %u, was: %lu\n", sizeof(testdata), buffer_size);
67  ok(!memcmp(buffer, testdata, sizeof(testdata)), "Expected to get the same input as what was written!\n");
68 
69 
70  buffer_size = sizeof(buffer);
71  type = 0x12345;
72  memset(buffer, 0, sizeof(buffer));
73  lret = key2.QueryValue(_T("APITEST_VALUE_NAME"), &type, buffer, &buffer_size);
74  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
75  ok(type == REG_SZ, "Expected type to be REG_SZ, was: %lu\n", type);
76  ok(buffer_size == sizeof(testdata), "Expected buffer_size to be %u, was: %lu\n", sizeof(testdata), buffer_size);
77  ok(!memcmp(buffer, testdata, sizeof(testdata)), "Expected to get the same input as what was written!\n");
78 
79  buffer_size = sizeof(buffer);
80  type = 0x12345;
81  memset(buffer, 0, sizeof(buffer));
82  lret = key3.QueryValue(_T("APITEST_VALUE_NAME"), &type, buffer, &buffer_size);
83  ok(lret == ERROR_ACCESS_DENIED, "Expected lret to be ERROR_ACCESS_DENIED, was: %lu\n", lret);
84  ok(type == 0 || broken(type == 203), "Expected type to be 0, was: %lu\n", type);
85  ok(buffer_size == sizeof(buffer), "Expected buffer_size to be %u, was: %lu\n", sizeof(buffer), buffer_size);
86 
87 
88  lret = key2.SetValue(_T("APITEST_VALUE_NAME"), REG_SZ, testdata, sizeof(testdata));
89  ok(lret == ERROR_ACCESS_DENIED, "Expected lret to be ERROR_ACCESS_DENIED, was: %lu\n", lret);
90 
91  lret = key2.DeleteValue(_T("APITEST_VALUE_NAME"));
92  ok(lret == ERROR_ACCESS_DENIED, "Expected lret to be ERROR_ACCESS_DENIED, was: %lu\n", lret);
93 
94  DWORD dword = 0x54321;
95  lret = key2.QueryDWORDValue(_T("APITEST_VALUE_NAME"), dword);
96  ok(lret == ERROR_MORE_DATA, "Expected lret to be ERROR_MORE_DATA, was: %lu\n", lret);
97  ok(dword == 0x54321, "Expected dword to be 0x54321, was: %lu\n", dword);
98 
99  lret = key.SetValue(_T("APITEST_VALUE_NAME"), REG_SZ, testdata, sizeof(TCHAR));
100  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_ACCESS_DENIED, was: %lu\n", lret);
101 
102  dword = 0x54321;
103  lret = key2.QueryDWORDValue(_T("APITEST_VALUE_NAME"), dword);
104  ok(lret == ERROR_INVALID_DATA, "Expected lret to be ERROR_MORE_DATA, was: %lu\n", lret);
105  ok(dword != 0x54321, "Expected dword to NOT be 0x54321, was: %lu\n", dword);
106 
107  lret = key3.SetDWORDValue(_T("APITEST_VALUE_NAME"), 0x12345);
108  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
109 
110  dword = 0x54321;
111  lret = key2.QueryDWORDValue(_T("APITEST_VALUE_NAME"), dword);
112  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
113  ok(dword == 0x12345, "Expected dword to be 0x12345, was: %lu\n", dword);
114 
115 
116  lret = key3.DeleteValue(_T("APITEST_VALUE_NAME"));
117  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
118 
119 
120  lret = key.SetKeyValue(_T("APITEST_KEY_NAME"), _T("APITEST_VALUE"));
121  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
122 
123  CRegKey qv;
124 
125  // COUNTOF, not SIZEOF!!!!
126  lret = qv.Open(HKEY_CURRENT_USER, _T("Environment\\APITEST_KEY_NAME"));
128  memset(buffer, 0, sizeof(buffer));
129  lret = qv.QueryStringValue(NULL, buffer, &buffer_size);
130  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
131  ok(buffer_size == _countof("APITEST_VALUE"), "Expected buffer_size to be %u, was: %lu\n", _countof("APITEST_VALUE"), buffer_size);
132  ok(!_tcscmp(buffer, _T("APITEST_VALUE")), "Expected to get the same input as what was written!\n");
133 
134  lret = key.SetKeyValue(_T("APITEST_KEY_NAME"), _T("APITEST_VALUE2"), _T("APITEST_VALUE_NAME"));
135  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
136 
138  memset(buffer, 0, sizeof(buffer));
139  lret = qv.QueryStringValue(_T("APITEST_VALUE_NAME"), buffer, &buffer_size);
140  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
141  ok(buffer_size == _countof("APITEST_VALUE2"), "Expected buffer_size to be %u, was: %lu\n", _countof("APITEST_VALUE2"), buffer_size);
142  ok(!_tcscmp(buffer, _T("APITEST_VALUE2")), "Expected to get the same input as what was written!\n");
143 
144  lret = key.DeleteSubKey(_T("APITEST_KEY_NAME"));
145  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
146 
147  GUID guid, guid2;
148  memset(&guid, 56, sizeof(guid));
149 
150  lret = key.SetGUIDValue(_T("GUID_NAME"), guid);
151  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
152 
153  lret = key.QueryGUIDValue(_T("GUID_NAME"), guid2);
154  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
155  ok(!memcmp(&guid, &guid2, sizeof(guid)), "Expected guid to equal guid2\n");
156 
158  memset(buffer, 0, sizeof(buffer));
159  lret = key2.QueryStringValue(_T("GUID_NAME"), buffer, &buffer_size);
160  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
161  ok(buffer_size == _countof("{38383838-3838-3838-3838-383838383838}"),
162  "Expected buffer_size to be %u, was: %lu\n", _countof("{38383838-3838-3838-3838-383838383838}"), buffer_size);
163  ok(!_tcscmp(buffer, _T("{38383838-3838-3838-3838-383838383838}")), "Expected to get the same input as what was written!\n");
164 
165  memset(&guid, 33, 5);
166  lret = key.SetBinaryValue(_T("BIN_NAME"), &guid, 5);
167  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
168 
169  buffer_size = sizeof(buffer);
170  memset(buffer, 0, sizeof(buffer));
171  lret = key.QueryBinaryValue(_T("GUID_NAME"), buffer, &buffer_size);
172  ok(lret == ERROR_INVALID_DATA, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
173  ok(buffer_size == sizeof(_T("{38383838-3838-3838-3838-383838383838}")),
174  "Expected buffer_size to be %u, was: %lu\n", sizeof(_T("{38383838-3838-3838-3838-383838383838}")), buffer_size);
175  ok(buffer[0] == '{', "Expected buffer[0] to be 123, was: %i\n", (int)buffer[0]);
176 
177  buffer_size = sizeof(buffer);
178  memset(buffer, 0, sizeof(buffer));
179  lret = key.QueryBinaryValue(_T("BIN_NAME"), buffer, &buffer_size);
180  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
181  ok(buffer_size == 5, "Expected buffer_size to be %i, was: %lu\n", 5, buffer_size);
182  ok(!memcmp(buffer, &guid, 5), "Expected the first 5 bytes of buffer to equal the data in null_guid\n");
183 
184  lret = key.DeleteValue(_T("GUID_NAME"));
185  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
186 
187  lret = key.DeleteValue(_T("BIN_NAME"));
188  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
189 
190  {
191  CRegKey test1;
192  lret = test1.Create(HKEY_CURRENT_USER, _T("TEST1"));
193  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
194 
195  CRegKey test2;
196  lret = test2.Create(test1, _T("TEST2"));
197  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
198 
199  CRegKey test3;
200  lret = test3.Create(test2, _T("TEST3"));
201  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
202  }
203  {
204  CRegKey key(HKEY_CURRENT_USER);
205  lret = key.RecurseDeleteKey(_T("TEST1"));
206  ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
207  }
208 }
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define ERROR_SUCCESS
Definition: deptool.c:10
void test3(void)
Definition: hivetest.c:423
#define KEY_READ
Definition: nt_native.h:1023
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
Definition: tcscmp.h:8
#define _countof(array)
Definition: fontsub.cpp:30
#define HKEY_CURRENT_USER
Definition: winreg.h:11
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
static GUID guid2
Definition: devinst.c:42
const GUID * guid
#define ERROR_ACCESS_DENIED
Definition: compat.h:87
#define ok(value,...)
static void buffer_size(GLcontext *ctx, GLuint *width, GLuint *height)
Definition: swimpl.c:927
smooth NULL
Definition: ftsmooth.c:416
#define KEY_WRITE
Definition: nt_native.h:1031
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
void test1(void)
Definition: hivetest.c:366
unsigned long DWORD
Definition: ntddk_ex.h:95
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
HKEY key
Definition: reg.c:42
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define broken(x)
Definition: _sntprintf.h:21
START_TEST(CRegKey)
Definition: CRegKey.cpp:12
#define ERROR_INVALID_DATA
Definition: winerror.h:116
void test2(void)
Definition: regtest.c:173
unsigned int ULONG
Definition: retypes.h:1
#define memset(x, y, z)
Definition: compat.h:39
Definition: path.c:42
#define REG_SZ
Definition: layer.c:22