FreeRDP
Loading...
Searching...
No Matches
registry.h
1
20#ifndef WINPR_REGISTRY_H
21#define WINPR_REGISTRY_H
22
23#include <winpr/windows.h>
24
25#if defined(_WIN32) && !defined(_UWP)
26
27#include <winreg.h>
28
29#else
30
31#ifdef __cplusplus
32extern "C"
33{
34#endif
35
36#include <winpr/winpr.h>
37#include <winpr/wtypes.h>
38
39#include <winpr/nt.h>
40#include <winpr/io.h>
41#include <winpr/error.h>
42
43#ifndef _WIN32
44
45#define OWNER_SECURITY_INFORMATION 0x00000001
46#define GROUP_SECURITY_INFORMATION 0x00000002
47#define DACL_SECURITY_INFORMATION 0x00000004
48#define SACL_SECURITY_INFORMATION 0x00000008
49
50#define REG_OPTION_RESERVED 0x00000000
51#define REG_OPTION_NON_VOLATILE 0x00000000
52#define REG_OPTION_VOLATILE 0x00000001
53#define REG_OPTION_CREATE_LINK 0x00000002
54#define REG_OPTION_BACKUP_RESTORE 0x00000004
55#define REG_OPTION_OPEN_LINK 0x00000008
56
57#define REG_CREATED_NEW_KEY 0x00000001
58#define REG_OPENED_EXISTING_KEY 0x00000002
59
60#define REG_NOTIFY_CHANGE_NAME 0x01
61#define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02
62#define REG_NOTIFY_CHANGE_LAST_SET 0x04
63#define REG_NOTIFY_CHANGE_SECURITY 0x08
64
65#define KEY_QUERY_VALUE 0x00000001
66#define KEY_SET_VALUE 0x00000002
67#define KEY_CREATE_SUB_KEY 0x00000004
68#define KEY_ENUMERATE_SUB_KEYS 0x00000008
69#define KEY_NOTIFY 0x00000010
70#define KEY_CREATE_LINK 0x00000020
71#define KEY_WOW64_64KEY 0x00000100
72#define KEY_WOW64_32KEY 0x00000200
73#define KEY_WOW64_RES 0x00000300
74
75#define REG_WHOLE_HIVE_VOLATILE 0x00000001
76#define REG_REFRESH_HIVE 0x00000002
77#define REG_NO_LAZY_FLUSH 0x00000004
78#define REG_FORCE_RESTORE 0x00000008
79
80#define KEY_READ \
81 ((STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY) & \
82 (~SYNCHRONIZE))
83
84#define KEY_WRITE ((STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE))
85
86#define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
87
88#define KEY_ALL_ACCESS \
89 ((STANDARD_RIGHTS_ALL | KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY | \
90 KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY | KEY_CREATE_LINK) & \
91 (~SYNCHRONIZE))
92
93 typedef enum
94 {
95 REG_NONE = 0,
96 REG_SZ = 1,
97 REG_EXPAND_SZ = 2,
98 REG_BINARY = 3,
99 REG_DWORD = 4,
100 REG_DWORD_LITTLE_ENDIAN = REG_DWORD,
101 REG_DWORD_BIG_ENDIAN = 5,
102 REG_LINK = 6,
103 REG_MULTI_SZ = 7,
104 REG_RESOURCE_LIST = 8,
105 REG_FULL_RESOURCE_DESCRIPTOR = 9,
106 REG_RESOURCE_REQUIREMENTS_LIST = 10,
107 REG_QWORD = 11,
108 REG_QWORD_LITTLE_ENDIAN = REG_QWORD
109 } eRegTypes;
110
111 typedef HANDLE HKEY;
112 typedef HANDLE* PHKEY;
113
114#endif
115
116 typedef ACCESS_MASK REGSAM;
117
118#define HKEY_CLASSES_ROOT ((HKEY)(LONG_PTR)(LONG)0x80000000)
119#define HKEY_CURRENT_USER ((HKEY)(LONG_PTR)(LONG)0x80000001)
120#define HKEY_LOCAL_MACHINE ((HKEY)(LONG_PTR)(LONG)0x80000002)
121#define HKEY_USERS ((HKEY)(LONG_PTR)(LONG)0x80000003)
122#define HKEY_PERFORMANCE_DATA ((HKEY)(LONG_PTR)(LONG)0x80000004)
123#define HKEY_PERFORMANCE_TEXT ((HKEY)(LONG_PTR)(LONG)0x80000050)
124#define HKEY_PERFORMANCE_NLSTEXT ((HKEY)(LONG_PTR)(LONG)0x80000060)
125#define HKEY_CURRENT_CONFIG ((HKEY)(LONG_PTR)(LONG)0x80000005)
126#define HKEY_DYN_DATA ((HKEY)(LONG_PTR)(LONG)0x80000006)
127#define HKEY_CURRENT_USER_LOCAL_SETTINGS ((HKEY)(LONG_PTR)(LONG)0x80000007)
128
129#define RRF_RT_REG_NONE 0x00000001
130#define RRF_RT_REG_SZ 0x00000002
131#define RRF_RT_REG_EXPAND_SZ 0x00000004
132#define RRF_RT_REG_BINARY 0x00000008
133#define RRF_RT_REG_DWORD 0x00000010
134#define RRF_RT_REG_MULTI_SZ 0x00000020
135#define RRF_RT_REG_QWORD 0x00000040
136
137#define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
138#define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
139#define RRF_RT_ANY 0x0000FFFF
140
141#define RRF_NOEXPAND 0x10000000
142#define RRF_ZEROONFAILURE 0x20000000
143
145 {
146 int valuelen;
147 LPVOID value_context;
148 LPVOID val_buff_ptr;
149 };
150
151 typedef struct val_context* PVALCONTEXT;
152
153 typedef struct pvalueA
154 {
155 LPSTR pv_valuename;
156 int pv_valuelen;
157 LPVOID pv_value_context;
158 DWORD pv_type;
159 } PVALUEA, *PPVALUEA;
160
161 typedef struct pvalueW
162 {
163 LPWSTR pv_valuename;
164 int pv_valuelen;
165 LPVOID pv_value_context;
166 DWORD pv_type;
167 } PVALUEW, *PPVALUEW;
168
169#ifdef UNICODE
170 typedef PVALUEW PVALUE;
171 typedef PPVALUEW PPVALUE;
172#else
173typedef PVALUEA PVALUE;
174typedef PPVALUEA PPVALUE;
175#endif
176
177 typedef struct value_entA
178 {
179 LPSTR ve_valuename;
180 DWORD ve_valuelen;
181 DWORD_PTR ve_valueptr;
182 DWORD ve_type;
183 } VALENTA, *PVALENTA;
184
185 typedef struct value_entW
186 {
187 LPWSTR ve_valuename;
188 DWORD ve_valuelen;
189 DWORD_PTR ve_valueptr;
190 DWORD ve_type;
191 } VALENTW, *PVALENTW;
192
193#ifdef UNICODE
194 typedef VALENTW VALENT;
195 typedef PVALENTW PVALENT;
196#else
197typedef VALENTA VALENT;
198typedef PVALENTA PVALENT;
199#endif
200
201 WINPR_API LONG RegCloseKey(HKEY hKey);
202
203 WINPR_ATTR_NODISCARD
204 WINPR_API LONG RegCopyTreeW(HKEY hKeySrc, LPCWSTR lpSubKey, HKEY hKeyDest);
205
206 WINPR_ATTR_NODISCARD
207 WINPR_API LONG RegCopyTreeA(HKEY hKeySrc, LPCSTR lpSubKey, HKEY hKeyDest);
208
209#ifdef UNICODE
210#define RegCopyTree RegCopyTreeW
211#else
212#define RegCopyTree RegCopyTreeA
213#endif
214
215 WINPR_ATTR_NODISCARD
216 WINPR_API LONG RegCreateKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD Reserved, LPWSTR lpClass,
217 DWORD dwOptions, REGSAM samDesired,
218 LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult,
219 LPDWORD lpdwDisposition);
220
221 WINPR_ATTR_NODISCARD
222 WINPR_API LONG RegCreateKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD Reserved, LPSTR lpClass,
223 DWORD dwOptions, REGSAM samDesired,
224 LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult,
225 LPDWORD lpdwDisposition);
226
227#ifdef UNICODE
228#define RegCreateKeyEx RegCreateKeyExW
229#else
230#define RegCreateKeyEx RegCreateKeyExA
231#endif
232
233 WINPR_ATTR_NODISCARD
234 WINPR_API LONG RegDeleteKeyExW(HKEY hKey, LPCWSTR lpSubKey, REGSAM samDesired, DWORD Reserved);
235
236 WINPR_ATTR_NODISCARD
237 WINPR_API LONG RegDeleteKeyExA(HKEY hKey, LPCSTR lpSubKey, REGSAM samDesired, DWORD Reserved);
238
239#ifdef UNICODE
240#define RegDeleteKeyEx RegDeleteKeyExW
241#else
242#define RegDeleteKeyEx RegDeleteKeyExA
243#endif
244
245 WINPR_ATTR_NODISCARD
246 WINPR_API LONG RegDeleteTreeW(HKEY hKey, LPCWSTR lpSubKey);
247
248 WINPR_ATTR_NODISCARD
249 WINPR_API LONG RegDeleteTreeA(HKEY hKey, LPCSTR lpSubKey);
250
251#ifdef UNICODE
252#define RegDeleteTree RegDeleteTreeW
253#else
254#define RegDeleteTree RegDeleteTreeA
255#endif
256
257 WINPR_ATTR_NODISCARD
258 WINPR_API LONG RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName);
259
260 WINPR_ATTR_NODISCARD
261 WINPR_API LONG RegDeleteValueA(HKEY hKey, LPCSTR lpValueName);
262
263#ifdef UNICODE
264#define RegDeleteValue RegDeleteValueW
265#else
266#define RegDeleteValue RegDeleteValueA
267#endif
268
269 WINPR_ATTR_NODISCARD
270 WINPR_API LONG RegDisablePredefinedCacheEx(void);
271
272 WINPR_ATTR_NODISCARD
273 WINPR_API LONG RegEnumKeyExW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, LPDWORD lpcName,
274 LPDWORD lpReserved, LPWSTR lpClass, LPDWORD lpcClass,
275 PFILETIME lpftLastWriteTime);
276
277 WINPR_ATTR_NODISCARD
278 WINPR_API LONG RegEnumKeyExA(HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpcName,
279 LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcClass,
280 PFILETIME lpftLastWriteTime);
281
282#ifdef UNICODE
283#define RegEnumKeyEx RegEnumKeyExW
284#else
285#define RegEnumKeyEx RegEnumKeyExA
286#endif
287
288 WINPR_ATTR_NODISCARD
289 WINPR_API LONG RegEnumValueW(HKEY hKey, DWORD dwIndex, LPWSTR lpValueName,
290 LPDWORD lpcchValueName, LPDWORD lpReserved, LPDWORD lpType,
291 LPBYTE lpData, LPDWORD lpcbData);
292
293 WINPR_ATTR_NODISCARD
294 WINPR_API LONG RegEnumValueA(HKEY hKey, DWORD dwIndex, LPSTR lpValueName,
295 LPDWORD lpcchValueName, LPDWORD lpReserved, LPDWORD lpType,
296 LPBYTE lpData, LPDWORD lpcbData);
297
298#ifdef UNICODE
299#define RegEnumValue RegEnumValueW
300#else
301#define RegEnumValue RegEnumValueA
302#endif
303
304 WINPR_ATTR_NODISCARD
305 WINPR_API LONG RegFlushKey(HKEY hKey);
306
307 WINPR_ATTR_NODISCARD
308 WINPR_API LONG RegGetKeySecurity(HKEY hKey, SECURITY_INFORMATION SecurityInformation,
309 PSECURITY_DESCRIPTOR pSecurityDescriptor,
310 LPDWORD lpcbSecurityDescriptor);
311
312 WINPR_ATTR_NODISCARD
313 WINPR_API LONG RegGetValueW(HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, DWORD dwFlags,
314 LPDWORD pdwType, PVOID pvData, LPDWORD pcbData);
315
316 WINPR_ATTR_NODISCARD
317 WINPR_API LONG RegGetValueA(HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue, DWORD dwFlags,
318 LPDWORD pdwType, PVOID pvData, LPDWORD pcbData);
319
320#ifdef UNICODE
321#define RegGetValue RegGetValueW
322#else
323#define RegGetValue RegGetValueA
324#endif
325
326 WINPR_ATTR_NODISCARD
327 WINPR_API LONG RegLoadAppKeyW(LPCWSTR lpFile, PHKEY phkResult, REGSAM samDesired,
328 DWORD dwOptions, DWORD Reserved);
329
330 WINPR_ATTR_NODISCARD
331 WINPR_API LONG RegLoadAppKeyA(LPCSTR lpFile, PHKEY phkResult, REGSAM samDesired,
332 DWORD dwOptions, DWORD Reserved);
333
334#ifdef UNICODE
335#define RegLoadAppKey RegLoadAppKeyW
336#else
337#define RegLoadAppKey RegLoadAppKeyA
338#endif
339
340 WINPR_ATTR_NODISCARD
341 WINPR_API LONG RegLoadKeyW(HKEY hKey, LPCWSTR lpSubKey, LPCWSTR lpFile);
342
343 WINPR_ATTR_NODISCARD
344 WINPR_API LONG RegLoadKeyA(HKEY hKey, LPCSTR lpSubKey, LPCSTR lpFile);
345
346#ifdef UNICODE
347#define RegLoadKey RegLoadKeyW
348#else
349#define RegLoadKey RegLoadKeyA
350#endif
351
352 WINPR_ATTR_NODISCARD
353 WINPR_API LONG RegLoadMUIStringW(HKEY hKey, LPCWSTR pszValue, LPWSTR pszOutBuf, DWORD cbOutBuf,
354 LPDWORD pcbData, DWORD Flags, LPCWSTR pszDirectory);
355
356 WINPR_ATTR_NODISCARD
357 WINPR_API LONG RegLoadMUIStringA(HKEY hKey, LPCSTR pszValue, LPSTR pszOutBuf, DWORD cbOutBuf,
358 LPDWORD pcbData, DWORD Flags, LPCSTR pszDirectory);
359
360#ifdef UNICODE
361#define RegLoadMUIString RegLoadMUIStringW
362#else
363#define RegLoadMUIString RegLoadMUIStringA
364#endif
365
366 WINPR_ATTR_NODISCARD
367 WINPR_API LONG RegNotifyChangeKeyValue(HKEY hKey, BOOL bWatchSubtree, DWORD dwNotifyFilter,
368 HANDLE hEvent, BOOL fAsynchronous);
369
370 WINPR_ATTR_NODISCARD
371 WINPR_API LONG RegOpenCurrentUser(REGSAM samDesired, PHKEY phkResult);
372
373 WINPR_ATTR_NODISCARD
374 WINPR_API LONG RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired,
375 PHKEY phkResult);
376
377 WINPR_ATTR_NODISCARD
378 WINPR_API LONG RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired,
379 PHKEY phkResult);
380
381#ifdef UNICODE
382#define RegOpenKeyEx RegOpenKeyExW
383#else
384#define RegOpenKeyEx RegOpenKeyExA
385#endif
386
387 WINPR_ATTR_NODISCARD
388 WINPR_API LONG RegOpenUserClassesRoot(HANDLE hToken, DWORD dwOptions, REGSAM samDesired,
389 PHKEY phkResult);
390
391 WINPR_ATTR_NODISCARD
392 WINPR_API LONG RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved,
393 LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen,
394 LPDWORD lpcMaxClassLen, LPDWORD lpcValues,
395 LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen,
396 LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime);
397
398 WINPR_ATTR_NODISCARD
399 WINPR_API LONG RegQueryInfoKeyA(HKEY hKey, LPSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved,
400 LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen,
401 LPDWORD lpcMaxClassLen, LPDWORD lpcValues,
402 LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen,
403 LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime);
404
405#ifdef UNICODE
406#define RegQueryInfoKey RegQueryInfoKeyW
407#else
408#define RegQueryInfoKey RegQueryInfoKeyA
409#endif
410
411 WINPR_ATTR_NODISCARD
412 WINPR_API LONG RegQueryValueExW(HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved,
413 LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
414
415 WINPR_ATTR_NODISCARD
416 WINPR_API LONG RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved,
417 LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
418
419#ifdef UNICODE
420#define RegQueryValueEx RegQueryValueExW
421#else
422#define RegQueryValueEx RegQueryValueExA
423#endif
424
425 WINPR_ATTR_NODISCARD
426 WINPR_API LONG RegRestoreKeyW(HKEY hKey, LPCWSTR lpFile, DWORD dwFlags);
427
428 WINPR_ATTR_NODISCARD
429 WINPR_API LONG RegRestoreKeyA(HKEY hKey, LPCSTR lpFile, DWORD dwFlags);
430
431#ifdef UNICODE
432#define RegRestoreKey RegRestoreKeyW
433#else
434#define RegRestoreKey RegRestoreKeyA
435#endif
436
437 WINPR_ATTR_NODISCARD
438 WINPR_API LONG RegSaveKeyExW(HKEY hKey, LPCWSTR lpFile,
439 LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD Flags);
440
441 WINPR_ATTR_NODISCARD
442 WINPR_API LONG RegSaveKeyExA(HKEY hKey, LPCSTR lpFile,
443 LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD Flags);
444
445#ifdef UNICODE
446#define RegSaveKeyEx RegSaveKeyExW
447#else
448#define RegSaveKeyEx RegSaveKeyExA
449#endif
450
451 WINPR_ATTR_NODISCARD
452 WINPR_API LONG RegSetKeySecurity(HKEY hKey, SECURITY_INFORMATION SecurityInformation,
453 PSECURITY_DESCRIPTOR pSecurityDescriptor);
454
455 WINPR_ATTR_NODISCARD
456 WINPR_API LONG RegSetValueExW(HKEY hKey, LPCWSTR lpValueName, DWORD Reserved, DWORD dwType,
457 const BYTE* lpData, DWORD cbData);
458
459 WINPR_ATTR_NODISCARD
460 WINPR_API LONG RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType,
461 const BYTE* lpData, DWORD cbData);
462
463#ifdef UNICODE
464#define RegSetValueEx RegSetValueExW
465#else
466#define RegSetValueEx RegSetValueExA
467#endif
468
469 WINPR_ATTR_NODISCARD
470 WINPR_API LONG RegUnLoadKeyW(HKEY hKey, LPCWSTR lpSubKey);
471
472 WINPR_ATTR_NODISCARD
473 WINPR_API LONG RegUnLoadKeyA(HKEY hKey, LPCSTR lpSubKey);
474
475#ifdef UNICODE
476#define RegUnLoadKey RegUnLoadKeyW
477#else
478#define RegUnLoadKey RegUnLoadKeyA
479#endif
480
481#ifdef __cplusplus
482}
483#endif
484
485#endif
486
487#endif /* WINPR_REGISTRY_H */