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