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