1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC core/sys/windows/_winreg.d)
9  */
10 /// Automatically imported and edited from the druntime module
11 /// core.sys.windows.winreg for the auto-generated win32 package.
12 module win32.winreg;
13 //version (Windows):
14 @system:
15 
16 version (ANSI) {} else version = Unicode;
17 version (Win32_UseLib) pragma(lib, "advapi32");
18 
19 import win32.w32api, win32.winbase, win32.windef;
20 
21 enum : HKEY { // for some reason, DMD errors if I don't give all the values explicitly
22     HKEY_CLASSES_ROOT        = cast(HKEY) 0x80000000,
23     HKEY_CURRENT_USER        = cast(HKEY) 0x80000001,
24     HKEY_LOCAL_MACHINE       = cast(HKEY) 0x80000002,
25     HKEY_USERS               = cast(HKEY) 0x80000003,
26     HKEY_PERFORMANCE_DATA    = cast(HKEY) 0x80000004,
27     HKEY_CURRENT_CONFIG      = cast(HKEY) 0x80000005,
28     HKEY_DYN_DATA            = cast(HKEY) 0x80000006,
29     HKEY_PERFORMANCE_TEXT    = cast(HKEY) 0x80000050,
30     HKEY_PERFORMANCE_NLSTEXT = cast(HKEY) 0x80000060,
31 }
32 
33 //enum : DWORD {
34 //    REG_OPTION_NON_VOLATILE,
35 //    REG_OPTION_VOLATILE
36 //}
37 
38 enum : DWORD {
39     REG_CREATED_NEW_KEY = 1,
40     REG_OPENED_EXISTING_KEY
41 }
42 
43 enum : DWORD {
44     REG_NONE                       = 0,
45     REG_SZ,
46     REG_EXPAND_SZ,
47     REG_BINARY,
48     REG_DWORD_LITTLE_ENDIAN,
49     REG_DWORD                      = REG_DWORD_LITTLE_ENDIAN,
50     REG_DWORD_BIG_ENDIAN,
51     REG_LINK,
52     REG_MULTI_SZ,
53     REG_RESOURCE_LIST,
54     REG_FULL_RESOURCE_DESCRIPTOR,
55     REG_RESOURCE_REQUIREMENTS_LIST,
56     REG_QWORD_LITTLE_ENDIAN,
57     REG_QWORD                      = REG_QWORD_LITTLE_ENDIAN
58 }
59 
60 enum DWORD
61     REG_NOTIFY_CHANGE_NAME       = 1,
62     REG_NOTIFY_CHANGE_ATTRIBUTES = 2,
63     REG_NOTIFY_CHANGE_LAST_SET   = 4,
64     REG_NOTIFY_CHANGE_SECURITY   = 8;
65 
66 alias ACCESS_MASK REGSAM;
67 
68 struct VALENTA {
69     LPSTR ve_valuename;
70     DWORD ve_valuelen;
71     DWORD_PTR ve_valueptr;
72     DWORD ve_type;
73 }
74 alias VALENTA* PVALENTA;
75 
76 struct VALENTW {
77     LPWSTR ve_valuename;
78     DWORD  ve_valuelen;
79     DWORD_PTR ve_valueptr;
80     DWORD  ve_type;
81 }
82 alias VALENTW* PVALENTW;
83 
84 // RRF - Registry Routine Flags (for RegGetValue)
85 static if (_WIN32_WINNT >= 0x600) {
86     enum : DWORD {
87         RRF_RT_REG_NONE      = 0x00000001,
88         RRF_RT_REG_SZ        = 0x00000002,
89         RRF_RT_REG_EXPAND_SZ = 0x00000004,
90         RRF_RT_REG_BINARY    = 0x00000008,
91         RRF_RT_REG_DWORD     = 0x00000010,
92         RRF_RT_REG_MULTI_SZ  = 0x00000020,
93         RRF_RT_REG_QWORD     = 0x00000040,
94         RRF_RT_DWORD         = RRF_RT_REG_BINARY | RRF_RT_REG_DWORD,
95         RRF_RT_QWORD         = RRF_RT_REG_BINARY | RRF_RT_REG_QWORD,
96         RRF_RT_ANY           = 0x0000FFFF,
97         RRF_NOEXPAND         = 0x10000000,
98         RRF_ZEROONFAILURE    = 0x20000000
99     }
100 }
101 
102 extern (Windows) nothrow @nogc {
103     LONG RegCloseKey(const scope HKEY);
104     LONG RegConnectRegistryA(LPCSTR, HKEY, PHKEY);
105     LONG RegConnectRegistryW(LPCWSTR, HKEY, PHKEY);
106     LONG RegCreateKeyExA(const scope HKEY, LPCSTR, DWORD, LPSTR, DWORD, REGSAM,
107       LPSECURITY_ATTRIBUTES, PHKEY, PDWORD);
108     LONG RegCreateKeyExW(const scope HKEY, LPCWSTR, DWORD, LPWSTR, DWORD, REGSAM,
109       LPSECURITY_ATTRIBUTES, PHKEY, PDWORD);
110     LONG RegDeleteKeyA(const scope HKEY, LPCSTR);
111     LONG RegDeleteKeyW(const scope HKEY, LPCWSTR);
112     LONG RegDeleteValueA(const scope HKEY, LPCSTR);
113     LONG RegDeleteValueW(const scope HKEY, LPCWSTR);
114     LONG RegEnumKeyExA(const scope HKEY, DWORD, LPSTR, PDWORD, PDWORD, LPSTR, PDWORD,
115       PFILETIME);
116     LONG RegEnumKeyExW(const scope HKEY, DWORD, LPWSTR, PDWORD, PDWORD, LPWSTR, PDWORD,
117       PFILETIME);
118     LONG RegEnumValueA(const scope HKEY, DWORD, LPSTR, PDWORD, PDWORD, PDWORD, LPBYTE,
119       PDWORD);
120     LONG RegEnumValueW(const scope HKEY, DWORD, LPWSTR, PDWORD, PDWORD, PDWORD, LPBYTE,
121       PDWORD);
122     LONG RegFlushKey(const scope HKEY);
123     LONG RegLoadKeyA(const scope HKEY, LPCSTR, LPCSTR);
124     LONG RegLoadKeyW(const scope HKEY, LPCWSTR, LPCWSTR);
125     LONG RegOpenKeyExA(const scope HKEY, LPCSTR, DWORD, REGSAM, PHKEY);
126     LONG RegOpenKeyExW(const scope HKEY, LPCWSTR, DWORD, REGSAM, PHKEY);
127     LONG RegQueryInfoKeyA(const scope HKEY, LPSTR, PDWORD, PDWORD, PDWORD, PDWORD,
128       PDWORD, PDWORD, PDWORD, PDWORD, PDWORD, PFILETIME);
129     LONG RegQueryInfoKeyW(const scope HKEY, LPWSTR, PDWORD, PDWORD, PDWORD, PDWORD,
130       PDWORD, PDWORD, PDWORD, PDWORD, PDWORD, PFILETIME);
131     LONG RegQueryMultipleValuesA(const scope HKEY, PVALENTA, DWORD, LPSTR, LPDWORD);
132     LONG RegQueryMultipleValuesW(const scope HKEY, PVALENTW, DWORD, LPWSTR, LPDWORD);
133     LONG RegQueryValueExA(const scope HKEY, LPCSTR, LPDWORD, LPDWORD, /*LPBYTE*/LPVOID, LPDWORD);
134     LONG RegQueryValueExW(const scope HKEY, LPCWSTR, LPDWORD, LPDWORD, /*LPBYTE*/LPVOID, LPDWORD);
135     LONG RegReplaceKeyA(const scope HKEY, LPCSTR, LPCSTR, LPCSTR);
136     LONG RegReplaceKeyW(const scope HKEY, LPCWSTR, LPCWSTR, LPCWSTR);
137     LONG RegSaveKeyA(const scope HKEY, LPCSTR, LPSECURITY_ATTRIBUTES);
138     LONG RegSaveKeyW(const scope HKEY, LPCWSTR, LPSECURITY_ATTRIBUTES);
139     LONG RegSetKeySecurity(const scope HKEY, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR);
140     LONG RegSetValueExA(const scope HKEY, LPCSTR, DWORD, DWORD, const(BYTE)*, DWORD);
141     LONG RegSetValueExW(const scope HKEY, LPCWSTR, DWORD, DWORD, const(BYTE)*, DWORD);
142     LONG RegUnLoadKeyA(const scope HKEY, LPCSTR);
143     LONG RegUnLoadKeyW(const scope HKEY, LPCWSTR);
144     LONG RegNotifyChangeKeyValue(const scope HKEY, BOOL, DWORD, HANDLE, BOOL);
145 
146     BOOL AbortSystemShutdownA(LPCSTR);
147     BOOL AbortSystemShutdownW(LPCWSTR);
148     BOOL InitiateSystemShutdownA(LPSTR, LPSTR, DWORD, BOOL, BOOL);
149     BOOL InitiateSystemShutdownW(LPWSTR, LPWSTR, DWORD, BOOL, BOOL);
150     LONG RegGetKeySecurity(const scope HKEY, SECURITY_INFORMATION,
151       PSECURITY_DESCRIPTOR, PDWORD);
152     LONG RegRestoreKeyA(const scope HKEY, LPCSTR, DWORD);
153     LONG RegRestoreKeyW(const scope HKEY, LPCWSTR, DWORD);
154     LONG RegSetKeySecurity(const scope HKEY, SECURITY_INFORMATION,
155       PSECURITY_DESCRIPTOR);
156 
157     static if (_WIN32_WINNT >= 0x500) {
158         LONG RegDisablePredefinedCache();
159         LONG RegOpenCurrentUser(REGSAM, PHKEY);
160         LONG RegOpenUserClassesRoot(HANDLE, DWORD, REGSAM, PHKEY);
161     }
162 
163     static if (_WIN32_WINNT >= 0x501) {
164         LONG RegSaveKeyExA(const scope HKEY, LPCSTR, LPSECURITY_ATTRIBUTES, DWORD);
165         LONG RegSaveKeyExW(const scope HKEY, LPCWSTR, LPSECURITY_ATTRIBUTES, DWORD);
166     }
167 
168     static if (_WIN32_WINNT >= 0x600) {
169         LONG RegGetValueA(const scope HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue,
170           DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData);
171         LONG RegGetValueW(const scope HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue,
172           DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData);
173     }
174 
175     //deprecated {
176         LONG RegCreateKeyA(const scope HKEY, LPCSTR, PHKEY);
177         LONG RegCreateKeyW(const scope HKEY, LPCWSTR, PHKEY);
178         LONG RegEnumKeyA(const scope HKEY, DWORD, LPSTR, DWORD);
179         LONG RegEnumKeyW(const scope HKEY, DWORD, LPWSTR, DWORD);
180         LONG RegOpenKeyA(const scope HKEY, LPCSTR, PHKEY);
181         LONG RegOpenKeyW(const scope HKEY, LPCWSTR, PHKEY);
182         LONG RegQueryValueA(const scope HKEY, LPCSTR, LPSTR, PLONG);
183         LONG RegQueryValueW(const scope HKEY, LPCWSTR, LPWSTR, PLONG);
184         LONG RegSetValueA(const scope HKEY, LPCSTR, DWORD, LPCSTR, DWORD);
185         LONG RegSetValueW(const scope HKEY, LPCWSTR, DWORD, LPCWSTR, DWORD);
186     //}
187 }
188 
189 version (Unicode) {
190     alias VALENTW VALENT;
191     alias RegConnectRegistryW RegConnectRegistry;
192     alias RegCreateKeyExW RegCreateKeyEx;
193     alias RegDeleteKeyW RegDeleteKey;
194     alias RegDeleteValueW RegDeleteValue;
195     alias RegEnumKeyExW RegEnumKeyEx;
196     alias RegEnumValueW RegEnumValue;
197     alias RegLoadKeyW RegLoadKey;
198     alias RegOpenKeyExW RegOpenKeyEx;
199     alias RegQueryInfoKeyW RegQueryInfoKey;
200     alias RegQueryMultipleValuesW RegQueryMultipleValues;
201     alias RegQueryValueExW RegQueryValueEx;
202     alias RegReplaceKeyW RegReplaceKey;
203     alias RegSaveKeyW RegSaveKey;
204     alias RegSetValueExW RegSetValueEx;
205     alias RegUnLoadKeyW RegUnLoadKey;
206 
207     alias AbortSystemShutdownW AbortSystemShutdown;
208     alias InitiateSystemShutdownW InitiateSystemShutdown;
209     alias RegRestoreKeyW RegRestoreKey;
210     static if (_WIN32_WINNT >= 0x501) {
211         alias RegSaveKeyExA RegSaveKeyEx;
212     }
213     static if (_WIN32_WINNT >= 0x600) {
214         alias RegGetValueW RegGetValue;
215     }
216     //deprecated {
217         alias RegCreateKeyW RegCreateKey;
218         alias RegEnumKeyW RegEnumKey;
219         alias RegOpenKeyW RegOpenKey;
220         alias RegQueryValueW RegQueryValue;
221         alias RegSetValueW RegSetValue;
222     //}
223 } else {
224     alias VALENTA VALENT;
225     alias RegConnectRegistryA RegConnectRegistry;
226     alias RegCreateKeyExA RegCreateKeyEx;
227     alias RegDeleteKeyA RegDeleteKey;
228     alias RegDeleteValueA RegDeleteValue;
229     alias RegEnumKeyExA RegEnumKeyEx;
230     alias RegEnumValueA RegEnumValue;
231     alias RegLoadKeyA RegLoadKey;
232     alias RegOpenKeyExA RegOpenKeyEx;
233     alias RegQueryInfoKeyA RegQueryInfoKey;
234     alias RegQueryMultipleValuesA RegQueryMultipleValues;
235     alias RegQueryValueExA RegQueryValueEx;
236     alias RegReplaceKeyA RegReplaceKey;
237     alias RegSaveKeyA RegSaveKey;
238     alias RegSetValueExA RegSetValueEx;
239     alias RegUnLoadKeyA RegUnLoadKey;
240     alias AbortSystemShutdownA AbortSystemShutdown;
241     alias InitiateSystemShutdownA InitiateSystemShutdown;
242     alias RegRestoreKeyW RegRestoreKey;
243     static if (_WIN32_WINNT >= 0x501) {
244         alias RegSaveKeyExA RegSaveKeyEx;
245     }
246     static if (_WIN32_WINNT >= 0x600) {
247         alias RegGetValueA RegGetValue;
248     }
249     //deprecated {
250         alias RegCreateKeyA RegCreateKey;
251         alias RegEnumKeyA RegEnumKey;
252         alias RegOpenKeyA RegOpenKey;
253         alias RegQueryValueA RegQueryValue;
254         alias RegSetValueA RegSetValue;
255     //}
256 }
257 
258 alias VALENT* PVALENT;