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