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