1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 use shared::basetsd::DWORD_PTR;
7 use shared::minwindef::{
8     BOOL, BYTE, DWORD, HKEY, LPBYTE, LPCVOID, LPDWORD, PFILETIME, PHKEY, ULONG
9 };
10 use um::minwinbase::LPSECURITY_ATTRIBUTES;
11 use um::winnt::{ACCESS_MASK, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PVOID};
12 pub type LSTATUS = LONG;
13 pub const RRF_RT_REG_NONE: DWORD = 0x00000001;
14 pub const RRF_RT_REG_SZ: DWORD = 0x00000002;
15 pub const RRF_RT_REG_EXPAND_SZ: DWORD = 0x00000004;
16 pub const RRF_RT_REG_BINARY: DWORD = 0x00000008;
17 pub const RRF_RT_REG_DWORD: DWORD = 0x00000010;
18 pub const RRF_RT_REG_MULTI_SZ: DWORD = 0x00000020;
19 pub const RRF_RT_REG_QWORD: DWORD = 0x00000040;
20 pub const RRF_RT_DWORD: DWORD = RRF_RT_REG_BINARY | RRF_RT_REG_DWORD;
21 pub const RRF_RT_QWORD: DWORD = RRF_RT_REG_BINARY | RRF_RT_REG_QWORD;
22 pub const RRF_RT_ANY: DWORD = 0x0000ffff;
23 pub const RRF_SUBKEY_WOW6464KEY: DWORD = 0x00010000;
24 pub const RRF_SUBKEY_WOW6432KEY: DWORD = 0x00020000;
25 pub const RRF_WOW64_MASK: DWORD = 0x00030000;
26 pub const RRF_NOEXPAND: DWORD = 0x10000000;
27 pub const RRF_ZEROONFAILURE: DWORD = 0x20000000;
28 pub const REG_PROCESS_APPKEY: DWORD = 0x00000001;
29 pub type REGSAM = ACCESS_MASK;
30 pub const HKEY_CLASSES_ROOT: HKEY = 0x80000000i32 as isize as HKEY;
31 pub const HKEY_CURRENT_USER: HKEY = 0x80000001i32 as isize as HKEY;
32 pub const HKEY_LOCAL_MACHINE: HKEY = 0x80000002i32 as isize as HKEY;
33 pub const HKEY_USERS: HKEY = 0x80000003i32 as isize as HKEY;
34 pub const HKEY_PERFORMANCE_DATA: HKEY = 0x80000004i32 as isize as HKEY;
35 pub const HKEY_PERFORMANCE_TEXT: HKEY = 0x80000050i32 as isize as HKEY;
36 pub const HKEY_PERFORMANCE_NLSTEXT: HKEY = 0x80000060i32 as isize as HKEY;
37 pub const HKEY_CURRENT_CONFIG: HKEY = 0x80000005i32 as isize as HKEY;
38 pub const HKEY_DYN_DATA: HKEY = 0x80000006i32 as isize as HKEY;
39 pub const HKEY_CURRENT_USER_LOCAL_SETTINGS: HKEY = 0x80000007i32 as isize as HKEY;
40 // PROVIDER_KEEPS_VALUE_LENGTH
41 // val_context
42 // PVALUEA
43 // PVALUEW
44 // QUERYHANDLER
45 // REG_PROVIDER
46 STRUCT!{struct VALENTA {
47     ve_valuename: LPSTR,
48     ve_valuelen: DWORD,
49     ve_valueptr: DWORD_PTR,
50     ve_type: DWORD,
51 }}
52 pub type PVALENTA = *mut VALENTA;
53 STRUCT!{struct VALENTW {
54     ve_valuename: LPWSTR,
55     ve_valuelen: DWORD,
56     ve_valueptr: DWORD_PTR,
57     ve_type: DWORD,
58 }}
59 pub type PVALENTW = *mut VALENTW;
60 // WIN31_CLASS
61 pub const REG_MUI_STRING_TRUNCATE: DWORD = 0x00000001;
62 pub const REG_SECURE_CONNECTION: DWORD = 1;
63 extern "system" {
RegCloseKey( hKey: HKEY, ) -> LSTATUS64     pub fn RegCloseKey(
65         hKey: HKEY,
66     ) -> LSTATUS;
RegOverridePredefKey( hKey: HKEY, hNewHKey: HKEY, ) -> LSTATUS67     pub fn RegOverridePredefKey(
68         hKey: HKEY,
69         hNewHKey: HKEY,
70     ) -> LSTATUS;
RegOpenUserClassesRoot( hToken: HANDLE, dwOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, ) -> LSTATUS71     pub fn RegOpenUserClassesRoot(
72         hToken: HANDLE,
73         dwOptions: DWORD,
74         samDesired: REGSAM,
75         phkResult: PHKEY,
76     ) -> LSTATUS;
RegOpenCurrentUser( samDesired: REGSAM, phkResult: PHKEY, ) -> LSTATUS77     pub fn RegOpenCurrentUser(
78         samDesired: REGSAM,
79         phkResult: PHKEY,
80     ) -> LSTATUS;
RegDisablePredefinedCache() -> LSTATUS81     pub fn RegDisablePredefinedCache() -> LSTATUS;
RegDisablePredefinedCacheEx() -> LSTATUS82     pub fn RegDisablePredefinedCacheEx() -> LSTATUS;
RegConnectRegistryA( lpMachineName: LPCSTR, hKey: HKEY, phkResult: PHKEY, ) -> LSTATUS83     pub fn RegConnectRegistryA(
84         lpMachineName: LPCSTR,
85         hKey: HKEY,
86         phkResult: PHKEY,
87     ) -> LSTATUS;
RegConnectRegistryW( lpMachineName: LPCWSTR, hKey: HKEY, phkResult: PHKEY, ) -> LSTATUS88     pub fn RegConnectRegistryW(
89         lpMachineName: LPCWSTR,
90         hKey: HKEY,
91         phkResult: PHKEY,
92     ) -> LSTATUS;
RegConnectRegistryExA( lpMachineName: LPCSTR, hKey: HKEY, flags: ULONG, phkResult: PHKEY, ) -> LSTATUS93     pub fn RegConnectRegistryExA(
94         lpMachineName: LPCSTR,
95         hKey: HKEY,
96         flags: ULONG,
97         phkResult: PHKEY,
98     ) -> LSTATUS;
RegConnectRegistryExW( lpMachineName: LPCWSTR, hKey: HKEY, flags: ULONG, phkResult: PHKEY, ) -> LSTATUS99     pub fn RegConnectRegistryExW(
100         lpMachineName: LPCWSTR,
101         hKey: HKEY,
102         flags: ULONG,
103         phkResult: PHKEY,
104     ) -> LSTATUS;
RegCreateKeyA( hKey: HKEY, lpSubKey: LPCSTR, phkResult: PHKEY, ) -> LSTATUS105     pub fn RegCreateKeyA(
106         hKey: HKEY,
107         lpSubKey: LPCSTR,
108         phkResult: PHKEY,
109     ) -> LSTATUS;
RegCreateKeyW( hKey: HKEY, lpSubKey: LPCWSTR, phkResult: PHKEY, ) -> LSTATUS110     pub fn RegCreateKeyW(
111         hKey: HKEY,
112         lpSubKey: LPCWSTR,
113         phkResult: PHKEY,
114     ) -> LSTATUS;
RegCreateKeyExA( hKey: HKEY, lpSubKey: LPCSTR, Reserved: DWORD, lpClass: LPSTR, dwOptions: DWORD, samDesired: REGSAM, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, phkResult: PHKEY, lpdwDisposition: LPDWORD, ) -> LSTATUS115     pub fn RegCreateKeyExA(
116         hKey: HKEY,
117         lpSubKey: LPCSTR,
118         Reserved: DWORD,
119         lpClass: LPSTR,
120         dwOptions: DWORD,
121         samDesired: REGSAM,
122         lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
123         phkResult: PHKEY,
124         lpdwDisposition: LPDWORD,
125     ) -> LSTATUS;
RegCreateKeyExW( hKey: HKEY, lpSubKey: LPCWSTR, Reserved: DWORD, lpClass: LPWSTR, dwOptions: DWORD, samDesired: REGSAM, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, phkResult: PHKEY, lpdwDisposition: LPDWORD, ) -> LSTATUS126     pub fn RegCreateKeyExW(
127         hKey: HKEY,
128         lpSubKey: LPCWSTR,
129         Reserved: DWORD,
130         lpClass: LPWSTR,
131         dwOptions: DWORD,
132         samDesired: REGSAM,
133         lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
134         phkResult: PHKEY,
135         lpdwDisposition: LPDWORD,
136     ) -> LSTATUS;
RegCreateKeyTransactedA( hKey: HKEY, lpSubKey: LPCSTR, Reserved: DWORD, lpClass: LPSTR, dwOptions: DWORD, samDesired: REGSAM, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, phkResult: PHKEY, lpdwDisposition: LPDWORD, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS137     pub fn RegCreateKeyTransactedA(
138         hKey: HKEY,
139         lpSubKey: LPCSTR,
140         Reserved: DWORD,
141         lpClass: LPSTR,
142         dwOptions: DWORD,
143         samDesired: REGSAM,
144         lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
145         phkResult: PHKEY,
146         lpdwDisposition: LPDWORD,
147         hTransaction: HANDLE,
148         pExtendedParemeter: PVOID,
149     ) -> LSTATUS;
RegCreateKeyTransactedW( hKey: HKEY, lpSubKey: LPCWSTR, Reserved: DWORD, lpClass: LPWSTR, dwOptions: DWORD, samDesired: REGSAM, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, phkResult: PHKEY, lpdwDisposition: LPDWORD, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS150     pub fn RegCreateKeyTransactedW(
151         hKey: HKEY,
152         lpSubKey: LPCWSTR,
153         Reserved: DWORD,
154         lpClass: LPWSTR,
155         dwOptions: DWORD,
156         samDesired: REGSAM,
157         lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
158         phkResult: PHKEY,
159         lpdwDisposition: LPDWORD,
160         hTransaction: HANDLE,
161         pExtendedParemeter: PVOID,
162     ) -> LSTATUS;
RegDeleteKeyA( hKey: HKEY, lpSubKey: LPCSTR, ) -> LSTATUS163     pub fn RegDeleteKeyA(
164         hKey: HKEY,
165         lpSubKey: LPCSTR,
166     ) -> LSTATUS;
RegDeleteKeyW( hKey: HKEY, lpSubKey: LPCWSTR, ) -> LSTATUS167     pub fn RegDeleteKeyW(
168         hKey: HKEY,
169         lpSubKey: LPCWSTR,
170     ) -> LSTATUS;
RegDeleteKeyExA( hKey: HKEY, lpSubKey: LPCSTR, samDesired: REGSAM, Reserved: DWORD, ) -> LSTATUS171     pub fn RegDeleteKeyExA(
172         hKey: HKEY,
173         lpSubKey: LPCSTR,
174         samDesired: REGSAM,
175         Reserved: DWORD,
176     ) -> LSTATUS;
RegDeleteKeyExW( hKey: HKEY, lpSubKey: LPCWSTR, samDesired: REGSAM, Reserved: DWORD, ) -> LSTATUS177     pub fn RegDeleteKeyExW(
178         hKey: HKEY,
179         lpSubKey: LPCWSTR,
180         samDesired: REGSAM,
181         Reserved: DWORD,
182     ) -> LSTATUS;
RegDeleteKeyTransactedA( hKey: HKEY, lpSubKey: LPCSTR, samDesired: REGSAM, Reserved: DWORD, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS183     pub fn RegDeleteKeyTransactedA(
184         hKey: HKEY,
185         lpSubKey: LPCSTR,
186         samDesired: REGSAM,
187         Reserved: DWORD,
188         hTransaction: HANDLE,
189         pExtendedParemeter: PVOID,
190     ) -> LSTATUS;
RegDeleteKeyTransactedW( hKey: HKEY, lpSubKey: LPCWSTR, samDesired: REGSAM, Reserved: DWORD, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS191     pub fn RegDeleteKeyTransactedW(
192         hKey: HKEY,
193         lpSubKey: LPCWSTR,
194         samDesired: REGSAM,
195         Reserved: DWORD,
196         hTransaction: HANDLE,
197         pExtendedParemeter: PVOID,
198     ) -> LSTATUS;
RegDisableReflectionKey( hBase: HKEY, ) -> LONG199     pub fn RegDisableReflectionKey(
200         hBase: HKEY,
201     ) -> LONG;
RegEnableReflectionKey( hBase: HKEY, ) -> LONG202     pub fn RegEnableReflectionKey(
203         hBase: HKEY,
204     ) -> LONG;
RegQueryReflectionKey( hBase: HKEY, bIsReflectionDisabled: *mut BOOL, ) -> LONG205     pub fn RegQueryReflectionKey(
206         hBase: HKEY,
207         bIsReflectionDisabled: *mut BOOL,
208     ) -> LONG;
RegDeleteValueA( hKey: HKEY, lpValueName: LPCSTR, ) -> LSTATUS209     pub fn RegDeleteValueA(
210         hKey: HKEY,
211         lpValueName: LPCSTR,
212     ) -> LSTATUS;
RegDeleteValueW( hKey: HKEY, lpValueName: LPCWSTR, ) -> LSTATUS213     pub fn RegDeleteValueW(
214         hKey: HKEY,
215         lpValueName: LPCWSTR,
216     ) -> LSTATUS;
217     // pub fn RegEnumKeyA();
218     // pub fn RegEnumKeyW();
RegEnumKeyExA( hKey: HKEY, dwIndex: DWORD, lpName: LPSTR, lpcName: LPDWORD, lpReserved: LPDWORD, lpClass: LPSTR, lpcClass: LPDWORD, lpftLastWriteTime: PFILETIME, ) -> LSTATUS219     pub fn RegEnumKeyExA(
220         hKey: HKEY,
221         dwIndex: DWORD,
222         lpName: LPSTR,
223         lpcName: LPDWORD,
224         lpReserved: LPDWORD,
225         lpClass: LPSTR,
226         lpcClass: LPDWORD,
227         lpftLastWriteTime: PFILETIME,
228     ) -> LSTATUS;
RegEnumKeyExW( hKey: HKEY, dwIndex: DWORD, lpName: LPWSTR, lpcName: LPDWORD, lpReserved: LPDWORD, lpClass: LPWSTR, lpcClass: LPDWORD, lpftLastWriteTime: PFILETIME, ) -> LSTATUS229     pub fn RegEnumKeyExW(
230         hKey: HKEY,
231         dwIndex: DWORD,
232         lpName: LPWSTR,
233         lpcName: LPDWORD,
234         lpReserved: LPDWORD,
235         lpClass: LPWSTR,
236         lpcClass: LPDWORD,
237         lpftLastWriteTime: PFILETIME,
238     ) -> LSTATUS;
RegEnumValueA( hKey: HKEY, dwIndex: DWORD, lpValueName: LPSTR, lpcchValueName: LPDWORD, lpReserved: LPDWORD, lpType: LPDWORD, lpData: LPBYTE, lpcbData: LPDWORD, ) -> LSTATUS239     pub fn RegEnumValueA(
240         hKey: HKEY,
241         dwIndex: DWORD,
242         lpValueName: LPSTR,
243         lpcchValueName: LPDWORD,
244         lpReserved: LPDWORD,
245         lpType: LPDWORD,
246         lpData: LPBYTE,
247         lpcbData: LPDWORD,
248     ) -> LSTATUS;
RegEnumValueW( hKey: HKEY, dwIndex: DWORD, lpValueName: LPWSTR, lpcchValueName: LPDWORD, lpReserved: LPDWORD, lpType: LPDWORD, lpData: LPBYTE, lpcbData: LPDWORD, ) -> LSTATUS249     pub fn RegEnumValueW(
250         hKey: HKEY,
251         dwIndex: DWORD,
252         lpValueName: LPWSTR,
253         lpcchValueName: LPDWORD,
254         lpReserved: LPDWORD,
255         lpType: LPDWORD,
256         lpData: LPBYTE,
257         lpcbData: LPDWORD,
258     ) -> LSTATUS;
RegFlushKey( hKey: HKEY, ) -> LSTATUS259     pub fn RegFlushKey(
260         hKey: HKEY,
261     ) -> LSTATUS;
262     // pub fn RegGetKeySecurity();
263     // pub fn RegLoadKeyA();
264     // pub fn RegLoadKeyW();
RegNotifyChangeKeyValue( hKey: HKEY, bWatchSubtree: BOOL, dwNotifyFilter: DWORD, hEvent: HANDLE, fAsynchronous: BOOL, ) -> LSTATUS265     pub fn RegNotifyChangeKeyValue(
266         hKey: HKEY,
267         bWatchSubtree: BOOL,
268         dwNotifyFilter: DWORD,
269         hEvent: HANDLE,
270         fAsynchronous: BOOL,
271     ) -> LSTATUS;
272     // pub fn RegOpenKeyA();
273     // pub fn RegOpenKeyW();
RegOpenKeyExA( hKey: HKEY, lpSubKey: LPCSTR, ulOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, ) -> LSTATUS274     pub fn RegOpenKeyExA(
275         hKey: HKEY,
276         lpSubKey: LPCSTR,
277         ulOptions: DWORD,
278         samDesired: REGSAM,
279         phkResult: PHKEY,
280     ) -> LSTATUS;
RegOpenKeyExW( hKey: HKEY, lpSubKey: LPCWSTR, ulOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, ) -> LSTATUS281     pub fn RegOpenKeyExW(
282         hKey: HKEY,
283         lpSubKey: LPCWSTR,
284         ulOptions: DWORD,
285         samDesired: REGSAM,
286         phkResult: PHKEY,
287     ) -> LSTATUS;
RegOpenKeyTransactedA( hKey: HKEY, lpSubKey: LPCSTR, ulOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS288     pub fn RegOpenKeyTransactedA(
289         hKey: HKEY,
290         lpSubKey: LPCSTR,
291         ulOptions: DWORD,
292         samDesired: REGSAM,
293         phkResult: PHKEY,
294         hTransaction: HANDLE,
295         pExtendedParemeter: PVOID,
296     ) -> LSTATUS;
RegOpenKeyTransactedW( hKey: HKEY, lpSubKey: LPCWSTR, ulOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS297     pub fn RegOpenKeyTransactedW(
298         hKey: HKEY,
299         lpSubKey: LPCWSTR,
300         ulOptions: DWORD,
301         samDesired: REGSAM,
302         phkResult: PHKEY,
303         hTransaction: HANDLE,
304         pExtendedParemeter: PVOID,
305     ) -> LSTATUS;
RegQueryInfoKeyA( hKey: HKEY, lpClass: LPSTR, lpcClass: LPDWORD, lpReserved: LPDWORD, lpcSubKeys: LPDWORD, lpcMaxSubKeyLen: LPDWORD, lpcMaxClassLen: LPDWORD, lpcValues: LPDWORD, lpcMaxValueNameLen: LPDWORD, lpcMaxValueLen: LPDWORD, lpcbSecurityDescriptor: LPDWORD, lpftLastWriteTime: PFILETIME, ) -> LSTATUS306     pub fn RegQueryInfoKeyA(
307         hKey: HKEY,
308         lpClass: LPSTR,
309         lpcClass: LPDWORD,
310         lpReserved: LPDWORD,
311         lpcSubKeys: LPDWORD,
312         lpcMaxSubKeyLen: LPDWORD,
313         lpcMaxClassLen: LPDWORD,
314         lpcValues: LPDWORD,
315         lpcMaxValueNameLen: LPDWORD,
316         lpcMaxValueLen: LPDWORD,
317         lpcbSecurityDescriptor: LPDWORD,
318         lpftLastWriteTime: PFILETIME,
319     ) -> LSTATUS;
RegQueryInfoKeyW( hKey: HKEY, lpClass: LPWSTR, lpcClass: LPDWORD, lpReserved: LPDWORD, lpcSubKeys: LPDWORD, lpcMaxSubKeyLen: LPDWORD, lpcMaxClassLen: LPDWORD, lpcValues: LPDWORD, lpcMaxValueNameLen: LPDWORD, lpcMaxValueLen: LPDWORD, lpcbSecurityDescriptor: LPDWORD, lpftLastWriteTime: PFILETIME, ) -> LSTATUS320     pub fn RegQueryInfoKeyW(
321         hKey: HKEY,
322         lpClass: LPWSTR,
323         lpcClass: LPDWORD,
324         lpReserved: LPDWORD,
325         lpcSubKeys: LPDWORD,
326         lpcMaxSubKeyLen: LPDWORD,
327         lpcMaxClassLen: LPDWORD,
328         lpcValues: LPDWORD,
329         lpcMaxValueNameLen: LPDWORD,
330         lpcMaxValueLen: LPDWORD,
331         lpcbSecurityDescriptor: LPDWORD,
332         lpftLastWriteTime: PFILETIME,
333     ) -> LSTATUS;
334     // pub fn RegQueryValueA();
335     // pub fn RegQueryValueW();
RegQueryMultipleValuesA( hKey: HKEY, val_list: PVALENTA, num_vals: DWORD, lpValueBuf: LPSTR, ldwTotsize: LPDWORD, ) -> LSTATUS336     pub fn RegQueryMultipleValuesA(
337         hKey: HKEY,
338         val_list: PVALENTA,
339         num_vals: DWORD,
340         lpValueBuf: LPSTR,
341         ldwTotsize: LPDWORD,
342     ) -> LSTATUS;
RegQueryMultipleValuesW( hKey: HKEY, val_list: PVALENTW, num_vals: DWORD, lpValueBuf: LPWSTR, ldwTotsize: LPDWORD, ) -> LSTATUS343     pub fn RegQueryMultipleValuesW(
344         hKey: HKEY,
345         val_list: PVALENTW,
346         num_vals: DWORD,
347         lpValueBuf: LPWSTR,
348         ldwTotsize: LPDWORD,
349     ) -> LSTATUS;
RegQueryValueExA( hKey: HKEY, lpValueName: LPCSTR, lpReserved: LPDWORD, lpType: LPDWORD, lpData: LPBYTE, lpcbData: LPDWORD, ) -> LSTATUS350     pub fn RegQueryValueExA(
351         hKey: HKEY,
352         lpValueName: LPCSTR,
353         lpReserved: LPDWORD,
354         lpType: LPDWORD,
355         lpData: LPBYTE,
356         lpcbData: LPDWORD,
357     ) -> LSTATUS;
RegQueryValueExW( hKey: HKEY, lpValueName: LPCWSTR, lpReserved: LPDWORD, lpType: LPDWORD, lpData: LPBYTE, lpcbData: LPDWORD, ) -> LSTATUS358     pub fn RegQueryValueExW(
359         hKey: HKEY,
360         lpValueName: LPCWSTR,
361         lpReserved: LPDWORD,
362         lpType: LPDWORD,
363         lpData: LPBYTE,
364         lpcbData: LPDWORD,
365     ) -> LSTATUS;
366     // pub fn RegReplaceKeyA();
367     // pub fn RegReplaceKeyW();
368     // pub fn RegRestoreKeyA();
369     // pub fn RegRestoreKeyW();
370     // pub fn RegRenameKey();
371     // pub fn RegSaveKeyA();
372     // pub fn RegSaveKeyW();
373     // pub fn RegSetKeySecurity();
374     // pub fn RegSetValueA();
375     // pub fn RegSetValueW();
RegSetValueExA( hKey: HKEY, lpValueName: LPCSTR, Reserved: DWORD, dwType: DWORD, lpData: *const BYTE, cbData: DWORD, ) -> LSTATUS376     pub fn RegSetValueExA(
377         hKey: HKEY,
378         lpValueName: LPCSTR,
379         Reserved: DWORD,
380         dwType: DWORD,
381         lpData: *const BYTE,
382         cbData: DWORD,
383     ) -> LSTATUS;
RegSetValueExW( hKey: HKEY, lpValueName: LPCWSTR, Reserved: DWORD, dwType: DWORD, lpData: *const BYTE, cbData: DWORD, ) -> LSTATUS384     pub fn RegSetValueExW(
385         hKey: HKEY,
386         lpValueName: LPCWSTR,
387         Reserved: DWORD,
388         dwType: DWORD,
389         lpData: *const BYTE,
390         cbData: DWORD,
391     ) -> LSTATUS;
392     // pub fn RegUnLoadKeyA();
393     // pub fn RegUnLoadKeyW();
RegDeleteKeyValueA( hKey: HKEY, lpSubKey: LPCSTR, lpValueName: LPCSTR, ) -> LSTATUS394     pub fn RegDeleteKeyValueA(
395         hKey: HKEY,
396         lpSubKey: LPCSTR,
397         lpValueName: LPCSTR,
398     ) -> LSTATUS;
RegDeleteKeyValueW( hKey: HKEY, lpSubKey: LPCWSTR, lpValueName: LPCWSTR, ) -> LSTATUS399     pub fn RegDeleteKeyValueW(
400         hKey: HKEY,
401         lpSubKey: LPCWSTR,
402         lpValueName: LPCWSTR,
403     ) -> LSTATUS;
RegSetKeyValueA( hKey: HKEY, lpSubKey: LPCSTR, lpValueName: LPCSTR, dwType: DWORD, lpData: LPCVOID, cbData: DWORD, ) -> LSTATUS404     pub fn RegSetKeyValueA(
405         hKey: HKEY,
406         lpSubKey: LPCSTR,
407         lpValueName: LPCSTR,
408         dwType: DWORD,
409         lpData: LPCVOID,
410         cbData: DWORD,
411     ) -> LSTATUS;
RegSetKeyValueW( hKey: HKEY, lpSubKey: LPCWSTR, lpValueName: LPCWSTR, dwType: DWORD, lpData: LPCVOID, cbData: DWORD, ) -> LSTATUS412     pub fn RegSetKeyValueW(
413         hKey: HKEY,
414         lpSubKey: LPCWSTR,
415         lpValueName: LPCWSTR,
416         dwType: DWORD,
417         lpData: LPCVOID,
418         cbData: DWORD,
419     ) -> LSTATUS;
RegDeleteTreeA( hKey: HKEY, lpSubKey: LPCSTR, ) -> LSTATUS420     pub fn RegDeleteTreeA(
421         hKey: HKEY,
422         lpSubKey: LPCSTR,
423     ) -> LSTATUS;
RegDeleteTreeW( hKey: HKEY, lpSubKey: LPCWSTR, ) -> LSTATUS424     pub fn RegDeleteTreeW(
425         hKey: HKEY,
426         lpSubKey: LPCWSTR,
427     ) -> LSTATUS;
RegCopyTreeA( hKeySrc: HKEY, lpSubKey: LPCSTR, hKeyDest: HKEY, ) -> LSTATUS428     pub fn RegCopyTreeA(
429         hKeySrc: HKEY,
430         lpSubKey: LPCSTR,
431         hKeyDest: HKEY,
432     ) -> LSTATUS;
RegGetValueA( hkey: HKEY, lpSubKey: LPCSTR, lpValue: LPCSTR, dwFlags: DWORD, pdwType: LPDWORD, pvData: PVOID, pcbData: LPDWORD, ) -> LSTATUS433     pub fn RegGetValueA(
434         hkey: HKEY,
435         lpSubKey: LPCSTR,
436         lpValue: LPCSTR,
437         dwFlags: DWORD,
438         pdwType: LPDWORD,
439         pvData: PVOID,
440         pcbData: LPDWORD,
441     ) -> LSTATUS;
RegGetValueW( hkey: HKEY, lpSubKey: LPCWSTR, lpValue: LPCWSTR, dwFlags: DWORD, pdwType: LPDWORD, pvData: PVOID, pcbData: LPDWORD, ) -> LSTATUS442     pub fn RegGetValueW(
443         hkey: HKEY,
444         lpSubKey: LPCWSTR,
445         lpValue: LPCWSTR,
446         dwFlags: DWORD,
447         pdwType: LPDWORD,
448         pvData: PVOID,
449         pcbData: LPDWORD,
450     ) -> LSTATUS;
RegCopyTreeW( hKeySrc: HKEY, lpSubKey: LPCWSTR, hKeyDest: HKEY, ) -> LSTATUS451     pub fn RegCopyTreeW(
452         hKeySrc: HKEY,
453         lpSubKey: LPCWSTR,
454         hKeyDest: HKEY,
455     ) -> LSTATUS;
456     // pub fn RegLoadMUIStringA();
RegLoadMUIStringW( hKey: HKEY, pszValue: LPCWSTR, pszOutBuf: LPWSTR, cbOutBuf: DWORD, pcbData: LPDWORD, Flags: DWORD, pszDirectory: LPCWSTR, ) -> LSTATUS457     pub fn RegLoadMUIStringW(
458         hKey: HKEY,
459         pszValue: LPCWSTR,
460         pszOutBuf: LPWSTR,
461         cbOutBuf: DWORD,
462         pcbData: LPDWORD,
463         Flags: DWORD,
464         pszDirectory: LPCWSTR,
465     ) -> LSTATUS;
466     // pub fn RegLoadAppKeyA();
467     // pub fn RegLoadAppKeyW();
468     // pub fn InitiateSystemShutdownA();
469     // pub fn InitiateSystemShutdownW();
AbortSystemShutdownA( lpMachineName: LPSTR, ) -> BOOL470     pub fn AbortSystemShutdownA(
471         lpMachineName: LPSTR,
472     ) -> BOOL;
AbortSystemShutdownW( lpMachineName: LPWSTR, ) -> BOOL473     pub fn AbortSystemShutdownW(
474         lpMachineName: LPWSTR,
475     ) -> BOOL;
476 }
477 // REASON_*
478 // MAX_SHUTDOWN_TIMEOUT
479 extern "system" {
480     // pub fn InitiateSystemShutdownExA();
481     // pub fn InitiateSystemShutdownExW();
482 }
483 // SHUTDOWN_*
484 extern "system" {
485     // pub fn InitiateShutdownA();
486     // pub fn InitiateShutdownW();
487     // pub fn CheckForHiberboot();
488     // pub fn RegSaveKeyExA();
489     // pub fn RegSaveKeyExW();
490 }
491