1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _WINREG_
7 #define _WINREG_
8 
9 #include <_mingw_unicode.h>
10 #include <winapifamily.h>
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 #ifndef WINVER
17 #define WINVER 0x0502
18 #endif
19 
20 #define RRF_RT_REG_NONE 0x00000001
21 #define RRF_RT_REG_SZ 0x00000002
22 #define RRF_RT_REG_EXPAND_SZ 0x00000004
23 #define RRF_RT_REG_BINARY 0x00000008
24 #define RRF_RT_REG_DWORD 0x00000010
25 #define RRF_RT_REG_MULTI_SZ 0x00000020
26 #define RRF_RT_REG_QWORD 0x00000040
27 
28 #define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
29 #define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
30 #define RRF_RT_ANY 0x0000ffff
31 
32 #define RRF_NOEXPAND 0x10000000
33 #define RRF_ZEROONFAILURE 0x20000000
34 
35   typedef ACCESS_MASK REGSAM;
36   typedef LONG LSTATUS;
37 
38 #define HKEY_CLASSES_ROOT ((HKEY) (ULONG_PTR)((LONG)0x80000000))
39 #define HKEY_CURRENT_USER ((HKEY) (ULONG_PTR)((LONG)0x80000001))
40 #define HKEY_LOCAL_MACHINE ((HKEY) (ULONG_PTR)((LONG)0x80000002))
41 #define HKEY_USERS ((HKEY) (ULONG_PTR)((LONG)0x80000003))
42 #define HKEY_PERFORMANCE_DATA ((HKEY) (ULONG_PTR)((LONG)0x80000004))
43 #define HKEY_PERFORMANCE_TEXT ((HKEY) (ULONG_PTR)((LONG)0x80000050))
44 #define HKEY_PERFORMANCE_NLSTEXT ((HKEY) (ULONG_PTR)((LONG)0x80000060))
45 #define HKEY_CURRENT_CONFIG ((HKEY) (ULONG_PTR)((LONG)0x80000005))
46 #define HKEY_DYN_DATA ((HKEY) (ULONG_PTR)((LONG)0x80000006))
47 
48 #define REG_SECURE_CONNECTION 1
49 
50 #ifndef _PROVIDER_STRUCTS_DEFINED
51 #define _PROVIDER_STRUCTS_DEFINED
52 
53 #define PROVIDER_KEEPS_VALUE_LENGTH 0x1
54   struct val_context {
55     int valuelen;
56     LPVOID value_context;
57     LPVOID val_buff_ptr;
58   };
59 
60   typedef struct val_context *PVALCONTEXT;
61 
62   typedef struct pvalueA {
63     LPSTR pv_valuename;
64     int pv_valuelen;
65     LPVOID pv_value_context;
66     DWORD pv_type;
67   }PVALUEA,*PPVALUEA;
68 
69   typedef struct pvalueW {
70     LPWSTR pv_valuename;
71     int pv_valuelen;
72     LPVOID pv_value_context;
73     DWORD pv_type;
74   }PVALUEW,*PPVALUEW;
75 
76   __MINGW_TYPEDEF_AW(PVALUE)
77   __MINGW_TYPEDEF_AW(PPVALUE)
78 
79   typedef DWORD __cdecl QUERYHANDLER(LPVOID keycontext,PVALCONTEXT val_list,DWORD num_vals,LPVOID outputbuffer,DWORD *total_outlen,DWORD input_blen);
80 
81   typedef QUERYHANDLER *PQUERYHANDLER;
82 
83   typedef struct provider_info {
84     PQUERYHANDLER pi_R0_1val;
85     PQUERYHANDLER pi_R0_allvals;
86     PQUERYHANDLER pi_R3_1val;
87     PQUERYHANDLER pi_R3_allvals;
88     DWORD pi_flags;
89     LPVOID pi_key_context;
90   } REG_PROVIDER;
91 
92   typedef struct provider_info *PPROVIDER;
93 
94   typedef struct value_entA {
95     LPSTR ve_valuename;
96     DWORD ve_valuelen;
97     DWORD_PTR ve_valueptr;
98     DWORD ve_type;
99   } VALENTA,*PVALENTA;
100 
101   typedef struct value_entW {
102     LPWSTR ve_valuename;
103     DWORD ve_valuelen;
104     DWORD_PTR ve_valueptr;
105     DWORD ve_type;
106   } VALENTW,*PVALENTW;
107 
108   __MINGW_TYPEDEF_AW(VALENT)
109   __MINGW_TYPEDEF_AW(PVALENT)
110 #endif
111 
112 #define WIN31_CLASS NULL
113 
114 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
115 
116 #define RegConnectRegistry __MINGW_NAME_AW(RegConnectRegistry)
117 #define RegConnectRegistryEx __MINGW_NAME_AW(RegConnectRegistryEx)
118 #define RegCreateKey __MINGW_NAME_AW(RegCreateKey)
119 #define RegCreateKeyEx __MINGW_NAME_AW(RegCreateKeyEx)
120 #define RegDeleteKey __MINGW_NAME_AW(RegDeleteKey)
121 #define RegDeleteKeyEx __MINGW_NAME_AW(RegDeleteKeyEx)
122 #define RegDeleteValue __MINGW_NAME_AW(RegDeleteValue)
123 #define RegEnumKey __MINGW_NAME_AW(RegEnumKey)
124 #define RegEnumKeyEx __MINGW_NAME_AW(RegEnumKeyEx)
125 #define RegEnumValue __MINGW_NAME_AW(RegEnumValue)
126 #define RegLoadKey __MINGW_NAME_AW(RegLoadKey)
127 #define RegOpenKey __MINGW_NAME_AW(RegOpenKey)
128 #define RegOpenKeyEx __MINGW_NAME_AW(RegOpenKeyEx)
129 #define RegQueryInfoKey __MINGW_NAME_AW(RegQueryInfoKey)
130 #define RegQueryValue __MINGW_NAME_AW(RegQueryValue)
131 #define RegQueryMultipleValues __MINGW_NAME_AW(RegQueryMultipleValues)
132 #define RegQueryValueEx __MINGW_NAME_AW(RegQueryValueEx)
133 #define RegReplaceKey __MINGW_NAME_AW(RegReplaceKey)
134 #define RegRestoreKey __MINGW_NAME_AW(RegRestoreKey)
135 #define RegSaveKey __MINGW_NAME_AW(RegSaveKey)
136 #define RegSetValue __MINGW_NAME_AW(RegSetValue)
137 #define RegSetValueEx __MINGW_NAME_AW(RegSetValueEx)
138 #define RegUnLoadKey __MINGW_NAME_AW(RegUnLoadKey)
139 #define RegGetValue __MINGW_NAME_AW(RegGetValue)
140 #define InitiateSystemShutdown __MINGW_NAME_AW(InitiateSystemShutdown)
141 #define AbortSystemShutdown __MINGW_NAME_AW(AbortSystemShutdown)
142 
143   WINADVAPI LONG WINAPI RegCloseKey(HKEY hKey);
144   WINADVAPI LONG WINAPI RegOverridePredefKey(HKEY hKey,HKEY hNewHKey);
145   WINADVAPI LONG WINAPI RegOpenUserClassesRoot(HANDLE hToken,DWORD dwOptions,REGSAM samDesired,PHKEY phkResult);
146   WINADVAPI LONG WINAPI RegOpenCurrentUser(REGSAM samDesired,PHKEY phkResult);
147   WINADVAPI LONG WINAPI RegDisablePredefinedCache(void);
148   WINADVAPI LONG WINAPI RegConnectRegistryA(LPCSTR lpMachineName,HKEY hKey,PHKEY phkResult);
149   WINADVAPI LONG WINAPI RegConnectRegistryW(LPCWSTR lpMachineName,HKEY hKey,PHKEY phkResult);
150   WINADVAPI LONG WINAPI RegConnectRegistryExA(LPCSTR lpMachineName,HKEY hKey,ULONG Flags,PHKEY phkResult);
151   WINADVAPI LONG WINAPI RegConnectRegistryExW(LPCWSTR lpMachineName,HKEY hKey,ULONG Flags,PHKEY phkResult);
152   WINADVAPI LONG WINAPI RegCreateKeyA(HKEY hKey,LPCSTR lpSubKey,PHKEY phkResult);
153   WINADVAPI LONG WINAPI RegCreateKeyW(HKEY hKey,LPCWSTR lpSubKey,PHKEY phkResult);
154   WINADVAPI LONG WINAPI RegCreateKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD Reserved,LPSTR lpClass,DWORD dwOptions,REGSAM samDesired,LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition);
155   WINADVAPI LONG WINAPI RegCreateKeyExW(HKEY hKey,LPCWSTR lpSubKey,DWORD Reserved,LPWSTR lpClass,DWORD dwOptions,REGSAM samDesired,LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition);
156   WINADVAPI LONG WINAPI RegDeleteKeyA(HKEY hKey,LPCSTR lpSubKey);
157   WINADVAPI LONG WINAPI RegDeleteKeyW(HKEY hKey,LPCWSTR lpSubKey);
158   WINADVAPI LONG WINAPI RegDeleteKeyExA(HKEY hKey,LPCSTR lpSubKey,REGSAM samDesired,DWORD Reserved);
159   WINADVAPI LONG WINAPI RegDeleteKeyExW(HKEY hKey,LPCWSTR lpSubKey,REGSAM samDesired,DWORD Reserved);
160   WINADVAPI LONG WINAPI RegDisableReflectionKey(HKEY hBase);
161   WINADVAPI LONG WINAPI RegEnableReflectionKey(HKEY hBase);
162   WINADVAPI LONG WINAPI RegQueryReflectionKey(HKEY hBase,WINBOOL *bIsReflectionDisabled);
163   WINADVAPI LONG WINAPI RegDeleteValueA(HKEY hKey,LPCSTR lpValueName);
164   WINADVAPI LONG WINAPI RegDeleteValueW(HKEY hKey,LPCWSTR lpValueName);
165   WINADVAPI LONG WINAPI RegEnumKeyA(HKEY hKey,DWORD dwIndex,LPSTR lpName,DWORD cchName);
166   WINADVAPI LONG WINAPI RegEnumKeyW(HKEY hKey,DWORD dwIndex,LPWSTR lpName,DWORD cchName);
167   WINADVAPI LONG WINAPI RegEnumKeyExA(HKEY hKey,DWORD dwIndex,LPSTR lpName,LPDWORD lpcchName,LPDWORD lpReserved,LPSTR lpClass,LPDWORD lpcchClass,PFILETIME lpftLastWriteTime);
168   WINADVAPI LONG WINAPI RegEnumKeyExW(HKEY hKey,DWORD dwIndex,LPWSTR lpName,LPDWORD lpcchName,LPDWORD lpReserved,LPWSTR lpClass,LPDWORD lpcchClass,PFILETIME lpftLastWriteTime);
169   WINADVAPI LONG WINAPI RegEnumValueA(HKEY hKey,DWORD dwIndex,LPSTR lpValueName,LPDWORD lpcchValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData);
170   WINADVAPI LONG WINAPI RegEnumValueW(HKEY hKey,DWORD dwIndex,LPWSTR lpValueName,LPDWORD lpcchValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData);
171   WINADVAPI LONG WINAPI RegFlushKey(HKEY hKey);
172   WINADVAPI LONG WINAPI RegGetKeySecurity(HKEY hKey,SECURITY_INFORMATION SecurityInformation,PSECURITY_DESCRIPTOR pSecurityDescriptor,LPDWORD lpcbSecurityDescriptor);
173   WINADVAPI LONG WINAPI RegLoadKeyA(HKEY hKey,LPCSTR lpSubKey,LPCSTR lpFile);
174   WINADVAPI LONG WINAPI RegLoadKeyW(HKEY hKey,LPCWSTR lpSubKey,LPCWSTR lpFile);
175   WINADVAPI LONG WINAPI RegNotifyChangeKeyValue(HKEY hKey,WINBOOL bWatchSubtree,DWORD dwNotifyFilter,HANDLE hEvent,WINBOOL fAsynchronous);
176   WINADVAPI LONG WINAPI RegOpenKeyA(HKEY hKey,LPCSTR lpSubKey,PHKEY phkResult);
177   WINADVAPI LONG WINAPI RegOpenKeyW(HKEY hKey,LPCWSTR lpSubKey,PHKEY phkResult);
178   WINADVAPI LONG WINAPI RegOpenKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,PHKEY phkResult);
179   WINADVAPI LONG WINAPI RegOpenKeyExW(HKEY hKey,LPCWSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,PHKEY phkResult);
180   WINADVAPI LONG WINAPI RegQueryInfoKeyA(HKEY hKey,LPSTR lpClass,LPDWORD lpcchClass,LPDWORD lpReserved,LPDWORD lpcSubKeys,LPDWORD lpcbMaxSubKeyLen,LPDWORD lpcbMaxClassLen,LPDWORD lpcValues,LPDWORD lpcbMaxValueNameLen,LPDWORD lpcbMaxValueLen,LPDWORD lpcbSecurityDescriptor,PFILETIME lpftLastWriteTime);
181   WINADVAPI LONG WINAPI RegQueryInfoKeyW(HKEY hKey,LPWSTR lpClass,LPDWORD lpcchClass,LPDWORD lpReserved,LPDWORD lpcSubKeys,LPDWORD lpcbMaxSubKeyLen,LPDWORD lpcbMaxClassLen,LPDWORD lpcValues,LPDWORD lpcbMaxValueNameLen,LPDWORD lpcbMaxValueLen,LPDWORD lpcbSecurityDescriptor,PFILETIME lpftLastWriteTime);
182   WINADVAPI LONG WINAPI RegQueryValueA(HKEY hKey,LPCSTR lpSubKey,LPSTR lpData,PLONG lpcbData);
183   WINADVAPI LONG WINAPI RegQueryValueW(HKEY hKey,LPCWSTR lpSubKey,LPWSTR lpData,PLONG lpcbData);
184   WINADVAPI LONG WINAPI RegQueryMultipleValuesA(HKEY hKey,PVALENTA val_list,DWORD num_vals,LPSTR lpValueBuf,LPDWORD ldwTotsize);
185   WINADVAPI LONG WINAPI RegQueryMultipleValuesW(HKEY hKey,PVALENTW val_list,DWORD num_vals,LPWSTR lpValueBuf,LPDWORD ldwTotsize);
186   WINADVAPI LONG WINAPI RegQueryValueExA(HKEY hKey,LPCSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData);
187   WINADVAPI LONG WINAPI RegQueryValueExW(HKEY hKey,LPCWSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData);
188   WINADVAPI LONG WINAPI RegReplaceKeyA(HKEY hKey,LPCSTR lpSubKey,LPCSTR lpNewFile,LPCSTR lpOldFile);
189   WINADVAPI LONG WINAPI RegReplaceKeyW(HKEY hKey,LPCWSTR lpSubKey,LPCWSTR lpNewFile,LPCWSTR lpOldFile);
190   WINADVAPI LONG WINAPI RegRestoreKeyA(HKEY hKey,LPCSTR lpFile,DWORD dwFlags);
191   WINADVAPI LONG WINAPI RegRestoreKeyW(HKEY hKey,LPCWSTR lpFile,DWORD dwFlags);
192   WINADVAPI LONG WINAPI RegSaveKeyA(HKEY hKey,LPCSTR lpFile,LPSECURITY_ATTRIBUTES lpSecurityAttributes);
193   WINADVAPI LONG WINAPI RegSaveKeyW(HKEY hKey,LPCWSTR lpFile,LPSECURITY_ATTRIBUTES lpSecurityAttributes);
194   WINADVAPI LONG WINAPI RegSetKeySecurity(HKEY hKey,SECURITY_INFORMATION SecurityInformation,PSECURITY_DESCRIPTOR pSecurityDescriptor);
195   WINADVAPI LONG WINAPI RegSetValueA(HKEY hKey,LPCSTR lpSubKey,DWORD dwType,LPCSTR lpData,DWORD cbData);
196   WINADVAPI LONG WINAPI RegSetValueW(HKEY hKey,LPCWSTR lpSubKey,DWORD dwType,LPCWSTR lpData,DWORD cbData);
197   WINADVAPI LONG WINAPI RegSetValueExA(HKEY hKey,LPCSTR lpValueName,DWORD Reserved,DWORD dwType,CONST BYTE *lpData,DWORD cbData);
198   WINADVAPI LONG WINAPI RegSetValueExW(HKEY hKey,LPCWSTR lpValueName,DWORD Reserved,DWORD dwType,CONST BYTE *lpData,DWORD cbData);
199   WINADVAPI LONG WINAPI RegUnLoadKeyA(HKEY hKey,LPCSTR lpSubKey);
200   WINADVAPI LONG WINAPI RegUnLoadKeyW(HKEY hKey,LPCWSTR lpSubKey);
201   WINADVAPI LONG WINAPI RegGetValueA(HKEY hkey,LPCSTR lpSubKey,LPCSTR lpValue,DWORD dwFlags,LPDWORD pdwType,PVOID pvData,LPDWORD pcbData);
202   WINADVAPI LONG WINAPI RegGetValueW(HKEY hkey,LPCWSTR lpSubKey,LPCWSTR lpValue,DWORD dwFlags,LPDWORD pdwType,PVOID pvData,LPDWORD pcbData);
203   WINADVAPI WINBOOL WINAPI InitiateSystemShutdownA(LPSTR lpMachineName,LPSTR lpMessage,DWORD dwTimeout,WINBOOL bForceAppsClosed,WINBOOL bRebootAfterShutdown);
204   WINADVAPI WINBOOL WINAPI InitiateSystemShutdownW(LPWSTR lpMachineName,LPWSTR lpMessage,DWORD dwTimeout,WINBOOL bForceAppsClosed,WINBOOL bRebootAfterShutdown);
205   WINADVAPI WINBOOL WINAPI AbortSystemShutdownA(LPSTR lpMachineName);
206   WINADVAPI WINBOOL WINAPI AbortSystemShutdownW(LPWSTR lpMachineName);
207 
208 #include <reason.h>
209 
210 #define REASON_SWINSTALL SHTDN_REASON_MAJOR_SOFTWARE|SHTDN_REASON_MINOR_INSTALLATION
211 #define REASON_HWINSTALL SHTDN_REASON_MAJOR_HARDWARE|SHTDN_REASON_MINOR_INSTALLATION
212 #define REASON_SERVICEHANG SHTDN_REASON_MAJOR_SOFTWARE|SHTDN_REASON_MINOR_HUNG
213 #define REASON_UNSTABLE SHTDN_REASON_MAJOR_SYSTEM|SHTDN_REASON_MINOR_UNSTABLE
214 #define REASON_SWHWRECONF SHTDN_REASON_MAJOR_SOFTWARE|SHTDN_REASON_MINOR_RECONFIG
215 #define REASON_OTHER SHTDN_REASON_MAJOR_OTHER|SHTDN_REASON_MINOR_OTHER
216 #define REASON_UNKNOWN SHTDN_REASON_UNKNOWN
217 #define REASON_LEGACY_API SHTDN_REASON_LEGACY_API
218 #define REASON_PLANNED_FLAG SHTDN_REASON_FLAG_PLANNED
219 
220 #define MAX_SHUTDOWN_TIMEOUT (10*365*24*60*60)
221 
222 #define InitiateSystemShutdownEx __MINGW_NAME_AW(InitiateSystemShutdownEx)
223 #define RegSaveKeyEx __MINGW_NAME_AW(RegSaveKeyEx)
224 
225   WINADVAPI WINBOOL WINAPI InitiateSystemShutdownExA(LPSTR lpMachineName,LPSTR lpMessage,DWORD dwTimeout,WINBOOL bForceAppsClosed,WINBOOL bRebootAfterShutdown,DWORD dwReason);
226   WINADVAPI WINBOOL WINAPI InitiateSystemShutdownExW(LPWSTR lpMachineName,LPWSTR lpMessage,DWORD dwTimeout,WINBOOL bForceAppsClosed,WINBOOL bRebootAfterShutdown,DWORD dwReason);
227   WINADVAPI LONG WINAPI RegSaveKeyExA(HKEY hKey,LPCSTR lpFile,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD Flags);
228   WINADVAPI LONG WINAPI RegSaveKeyExW(HKEY hKey,LPCWSTR lpFile,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD Flags);
229   WINADVAPI LONG WINAPI Wow64Win32ApiEntry (DWORD dwFuncNumber,DWORD dwFlag,DWORD dwRes);
230 
231 #if (_WIN32_WINNT >= 0x0600)
232 
233 #define RegCopyTree __MINGW_NAME_AW(RegCopyTree)
234 WINADVAPI LONG WINAPI RegCopyTreeA(
235   HKEY hKeySrc,
236   LPCSTR lpSubKey,
237   HKEY hKeyDest
238 );
239 
240 WINADVAPI LONG WINAPI RegCopyTreeW(
241   HKEY hKeySrc,
242   LPCWSTR lpSubKey,
243   HKEY hKeyDest
244 );
245 
246 #define RegCreateKeyTransacted __MINGW_NAME_AW(RegCreateKeyTransacted)
247 WINADVAPI LONG WINAPI RegCreateKeyTransactedA(
248   HKEY hKey,
249   LPCSTR lpSubKey,
250   DWORD Reserved,
251   LPSTR lpClass,
252   DWORD dwOptions,
253   REGSAM samDesired,
254   const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
255   PHKEY phkResult,
256   LPDWORD lpdwDisposition,
257   HANDLE hTransaction,
258   PVOID pExtendedParemeter
259 );
260 
261 WINADVAPI LONG WINAPI RegCreateKeyTransactedW(
262   HKEY hKey,
263   LPCWSTR lpSubKey,
264   DWORD Reserved,
265   LPWSTR lpClass,
266   DWORD dwOptions,
267   REGSAM samDesired,
268   const LPSECURITY_ATTRIBUTES lpSecurityAttributes,
269   PHKEY phkResult,
270   LPDWORD lpdwDisposition,
271   HANDLE hTransaction,
272   PVOID pExtendedParemeter
273 );
274 
275 #define RegDeleteKeyTransacted __MINGW_NAME_AW(RegDeleteKeyTransacted)
276 WINADVAPI LONG WINAPI RegDeleteKeyTransactedA(
277   HKEY hKey,
278   LPCSTR lpSubKey,
279   REGSAM samDesired,
280   DWORD Reserved,
281   HANDLE hTransaction,
282   PVOID pExtendedParameter
283 );
284 
285 WINADVAPI LONG WINAPI RegDeleteKeyTransactedW(
286   HKEY hKey,
287   LPCWSTR lpSubKey,
288   REGSAM samDesired,
289   DWORD Reserved,
290   HANDLE hTransaction,
291   PVOID pExtendedParameter
292 );
293 
294 #define RegDeleteKeyValue __MINGW_NAME_AW(RegDeleteKeyValue)
295 WINADVAPI LONG WINAPI RegDeleteKeyValueA(
296   HKEY hKey,
297   LPCSTR lpSubKey,
298   LPCSTR lpValueName
299 );
300 
301 WINADVAPI LONG WINAPI RegDeleteKeyValueW(
302   HKEY hKey,
303   LPCWSTR lpSubKey,
304   LPCWSTR lpValueName
305 );
306 
307 #define RegDeleteTree __MINGW_NAME_AW(RegDeleteTree)
308 WINADVAPI LONG WINAPI RegDeleteTreeA(
309   HKEY hKey,
310   LPCSTR lpSubKey
311 );
312 
313 WINADVAPI LONG WINAPI RegDeleteTreeW(
314   HKEY hKey,
315   LPCWSTR lpSubKey
316 );
317 
318 WINADVAPI LONG WINAPI RegDisablePredefinedCacheEx(void);
319 
320 WINADVAPI LONG WINAPI RegLoadAppKeyA(
321   LPCSTR lpFile,
322   PHKEY phkResult,
323   REGSAM samDesired,
324   DWORD dwOptions,
325   DWORD Reserved
326 );
327 
328 WINADVAPI LONG WINAPI RegLoadAppKeyW(
329   LPCWSTR lpFile,
330   PHKEY phkResult,
331   REGSAM samDesired,
332   DWORD dwOptions,
333   DWORD Reserved
334 );
335 
336 #define RegLoadAppKey __MINGW_NAME_AW(RegLoadAppKey)
337 
338 WINADVAPI LONG WINAPI RegLoadMUIStringA(HKEY hKey, LPCSTR pszValue, LPSTR pszOutBuf, DWORD cbOutBuf, LPDWORD pcbData, DWORD Flags, LPCSTR pszDirectory);
339 WINADVAPI LONG WINAPI RegLoadMUIStringW(HKEY hKey, LPCWSTR pszValue, LPWSTR pszOutBuf, DWORD cbOutBuf, LPDWORD pcbData, DWORD Flags, LPCWSTR pszDirectory);
340 
341 #define RegLoadMUIString __MINGW_NAME_AW(RegLoadMUIString)
342 
343 WINADVAPI LONG WINAPI RegOpenKeyTransactedA(
344   HKEY hKey,
345   LPCSTR lpSubKey,
346   DWORD ulOptions,
347   REGSAM samDesired,
348   PHKEY phkResult,
349   HANDLE hTransaction,
350   PVOID pExtendedParameter
351 );
352 
353 WINADVAPI LONG WINAPI RegOpenKeyTransactedW(
354   HKEY hKey,
355   LPCWSTR lpSubKey,
356   DWORD ulOptions,
357   REGSAM samDesired,
358   PHKEY phkResult,
359   HANDLE hTransaction,
360   PVOID pExtendedParameter
361 );
362 
363 #define RegOpenKeyTransacted __MINGW_NAME_AW(RegOpenKeyTransacted)
364 
365 WINADVAPI LONG WINAPI RegSetKeyValueA(
366   HKEY hKey,
367   LPCSTR lpSubKey,
368   LPCSTR lpValueName,
369   DWORD dwType,
370   LPCVOID lpData,
371   DWORD cbData
372 );
373 
374 WINADVAPI LONG WINAPI RegSetKeyValueW(
375   HKEY hKey,
376   LPCWSTR lpSubKey,
377   LPCWSTR lpValueName,
378   DWORD dwType,
379   LPCVOID lpData,
380   DWORD cbData
381 );
382 #define RegSetKeyValue __MINGW_NAME_AW(RegSetKeyValue)
383 
384 #define SHUTDOWN_FORCE_OTHERS 0x00000001
385 #define SHUTDOWN_FORCE_SELF 0x00000002
386 #define SHUTDOWN_RESTART 0x00000004
387 #define SHUTDOWN_POWEROFF 0x00000008
388 #define SHUTDOWN_NOREBOOT 0x00000010
389 #define SHUTDOWN_GRACE_OVERRIDE 0x00000020
390 #define SHUTDOWN_INSTALL_UPDATES 0x00000040
391 #define SHUTDOWN_RESTARTAPPS 0x00000080
392 #define SHUTDOWN_HYBRID 0x00000200
393 
394 WINADVAPI DWORD WINAPI InitiateShutdownA(
395   LPSTR lpMachineName,
396   LPSTR lpMessage,
397   DWORD dwGracePeriod,
398   DWORD dwShutdownFlags,
399   DWORD dwReason
400 );
401 
402 WINADVAPI DWORD WINAPI InitiateShutdownW(
403   LPWSTR lpMachineName,
404   LPWSTR lpMessage,
405   DWORD dwGracePeriod,
406   DWORD dwShutdownFlags,
407   DWORD dwReason
408 );
409 
410 #define InitiateShutdown __MINGW_NAME_AW(InitiateShutdown)
411 
412 #endif /* (_WIN32_WINNT >= 0x0600) */
413 
414 #endif /* WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) */
415 
416 #ifdef __cplusplus
417 }
418 #endif
419 #endif
420