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