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::reason::{ 12 SHTDN_REASON_FLAG_PLANNED, SHTDN_REASON_LEGACY_API, SHTDN_REASON_MAJOR_HARDWARE, 13 SHTDN_REASON_MAJOR_OTHER, SHTDN_REASON_MAJOR_SOFTWARE, SHTDN_REASON_MAJOR_SYSTEM, 14 SHTDN_REASON_MINOR_HUNG, SHTDN_REASON_MINOR_INSTALLATION, SHTDN_REASON_MINOR_OTHER, 15 SHTDN_REASON_MINOR_RECONFIG, SHTDN_REASON_MINOR_UNSTABLE, SHTDN_REASON_UNKNOWN, 16 }; 17 use um::winnt::{ 18 ACCESS_MASK, BOOLEAN, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PBOOLEAN, PLONG, 19 PSECURITY_DESCRIPTOR, PVOID, SECURITY_INFORMATION, 20 }; 21 pub type LSTATUS = LONG; 22 pub const RRF_RT_REG_NONE: DWORD = 0x00000001; 23 pub const RRF_RT_REG_SZ: DWORD = 0x00000002; 24 pub const RRF_RT_REG_EXPAND_SZ: DWORD = 0x00000004; 25 pub const RRF_RT_REG_BINARY: DWORD = 0x00000008; 26 pub const RRF_RT_REG_DWORD: DWORD = 0x00000010; 27 pub const RRF_RT_REG_MULTI_SZ: DWORD = 0x00000020; 28 pub const RRF_RT_REG_QWORD: DWORD = 0x00000040; 29 pub const RRF_RT_DWORD: DWORD = RRF_RT_REG_BINARY | RRF_RT_REG_DWORD; 30 pub const RRF_RT_QWORD: DWORD = RRF_RT_REG_BINARY | RRF_RT_REG_QWORD; 31 pub const RRF_RT_ANY: DWORD = 0x0000ffff; 32 pub const RRF_SUBKEY_WOW6464KEY: DWORD = 0x00010000; 33 pub const RRF_SUBKEY_WOW6432KEY: DWORD = 0x00020000; 34 pub const RRF_WOW64_MASK: DWORD = 0x00030000; 35 pub const RRF_NOEXPAND: DWORD = 0x10000000; 36 pub const RRF_ZEROONFAILURE: DWORD = 0x20000000; 37 pub const REG_PROCESS_APPKEY: DWORD = 0x00000001; 38 pub type REGSAM = ACCESS_MASK; 39 pub const HKEY_CLASSES_ROOT: HKEY = 0x80000000i32 as usize as HKEY; 40 pub const HKEY_CURRENT_USER: HKEY = 0x80000001i32 as usize as HKEY; 41 pub const HKEY_LOCAL_MACHINE: HKEY = 0x80000002i32 as usize as HKEY; 42 pub const HKEY_USERS: HKEY = 0x80000003i32 as usize as HKEY; 43 pub const HKEY_PERFORMANCE_DATA: HKEY = 0x80000004i32 as usize as HKEY; 44 pub const HKEY_PERFORMANCE_TEXT: HKEY = 0x80000050i32 as usize as HKEY; 45 pub const HKEY_PERFORMANCE_NLSTEXT: HKEY = 0x80000060i32 as usize as HKEY; 46 pub const HKEY_CURRENT_CONFIG: HKEY = 0x80000005i32 as usize as HKEY; 47 pub const HKEY_DYN_DATA: HKEY = 0x80000006i32 as usize as HKEY; 48 pub const HKEY_CURRENT_USER_LOCAL_SETTINGS: HKEY = 0x80000007i32 as usize as HKEY; 49 // PROVIDER_KEEPS_VALUE_LENGTH 50 // val_context 51 // PVALUEA 52 // PVALUEW 53 // QUERYHANDLER 54 // REG_PROVIDER 55 STRUCT!{struct VALENTA { 56 ve_valuename: LPSTR, 57 ve_valuelen: DWORD, 58 ve_valueptr: DWORD_PTR, 59 ve_type: DWORD, 60 }} 61 pub type PVALENTA = *mut VALENTA; 62 STRUCT!{struct VALENTW { 63 ve_valuename: LPWSTR, 64 ve_valuelen: DWORD, 65 ve_valueptr: DWORD_PTR, 66 ve_type: DWORD, 67 }} 68 pub type PVALENTW = *mut VALENTW; 69 // WIN31_CLASS 70 pub const REG_MUI_STRING_TRUNCATE: DWORD = 0x00000001; 71 pub const REG_SECURE_CONNECTION: DWORD = 1; 72 extern "system" { RegCloseKey( hKey: HKEY, ) -> LSTATUS73 pub fn RegCloseKey( 74 hKey: HKEY, 75 ) -> LSTATUS; RegOverridePredefKey( hKey: HKEY, hNewHKey: HKEY, ) -> LSTATUS76 pub fn RegOverridePredefKey( 77 hKey: HKEY, 78 hNewHKey: HKEY, 79 ) -> LSTATUS; RegOpenUserClassesRoot( hToken: HANDLE, dwOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, ) -> LSTATUS80 pub fn RegOpenUserClassesRoot( 81 hToken: HANDLE, 82 dwOptions: DWORD, 83 samDesired: REGSAM, 84 phkResult: PHKEY, 85 ) -> LSTATUS; RegOpenCurrentUser( samDesired: REGSAM, phkResult: PHKEY, ) -> LSTATUS86 pub fn RegOpenCurrentUser( 87 samDesired: REGSAM, 88 phkResult: PHKEY, 89 ) -> LSTATUS; RegDisablePredefinedCache() -> LSTATUS90 pub fn RegDisablePredefinedCache() -> LSTATUS; RegDisablePredefinedCacheEx() -> LSTATUS91 pub fn RegDisablePredefinedCacheEx() -> LSTATUS; RegConnectRegistryA( lpMachineName: LPCSTR, hKey: HKEY, phkResult: PHKEY, ) -> LSTATUS92 pub fn RegConnectRegistryA( 93 lpMachineName: LPCSTR, 94 hKey: HKEY, 95 phkResult: PHKEY, 96 ) -> LSTATUS; RegConnectRegistryW( lpMachineName: LPCWSTR, hKey: HKEY, phkResult: PHKEY, ) -> LSTATUS97 pub fn RegConnectRegistryW( 98 lpMachineName: LPCWSTR, 99 hKey: HKEY, 100 phkResult: PHKEY, 101 ) -> LSTATUS; RegConnectRegistryExA( lpMachineName: LPCSTR, hKey: HKEY, flags: ULONG, phkResult: PHKEY, ) -> LSTATUS102 pub fn RegConnectRegistryExA( 103 lpMachineName: LPCSTR, 104 hKey: HKEY, 105 flags: ULONG, 106 phkResult: PHKEY, 107 ) -> LSTATUS; RegConnectRegistryExW( lpMachineName: LPCWSTR, hKey: HKEY, flags: ULONG, phkResult: PHKEY, ) -> LSTATUS108 pub fn RegConnectRegistryExW( 109 lpMachineName: LPCWSTR, 110 hKey: HKEY, 111 flags: ULONG, 112 phkResult: PHKEY, 113 ) -> LSTATUS; RegCreateKeyA( hKey: HKEY, lpSubKey: LPCSTR, phkResult: PHKEY, ) -> LSTATUS114 pub fn RegCreateKeyA( 115 hKey: HKEY, 116 lpSubKey: LPCSTR, 117 phkResult: PHKEY, 118 ) -> LSTATUS; RegCreateKeyW( hKey: HKEY, lpSubKey: LPCWSTR, phkResult: PHKEY, ) -> LSTATUS119 pub fn RegCreateKeyW( 120 hKey: HKEY, 121 lpSubKey: LPCWSTR, 122 phkResult: PHKEY, 123 ) -> LSTATUS; RegCreateKeyExA( hKey: HKEY, lpSubKey: LPCSTR, Reserved: DWORD, lpClass: LPSTR, dwOptions: DWORD, samDesired: REGSAM, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, phkResult: PHKEY, lpdwDisposition: LPDWORD, ) -> LSTATUS124 pub fn RegCreateKeyExA( 125 hKey: HKEY, 126 lpSubKey: LPCSTR, 127 Reserved: DWORD, 128 lpClass: LPSTR, 129 dwOptions: DWORD, 130 samDesired: REGSAM, 131 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 132 phkResult: PHKEY, 133 lpdwDisposition: LPDWORD, 134 ) -> LSTATUS; RegCreateKeyExW( hKey: HKEY, lpSubKey: LPCWSTR, Reserved: DWORD, lpClass: LPWSTR, dwOptions: DWORD, samDesired: REGSAM, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, phkResult: PHKEY, lpdwDisposition: LPDWORD, ) -> LSTATUS135 pub fn RegCreateKeyExW( 136 hKey: HKEY, 137 lpSubKey: LPCWSTR, 138 Reserved: DWORD, 139 lpClass: LPWSTR, 140 dwOptions: DWORD, 141 samDesired: REGSAM, 142 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 143 phkResult: PHKEY, 144 lpdwDisposition: LPDWORD, 145 ) -> 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, ) -> LSTATUS146 pub fn RegCreateKeyTransactedA( 147 hKey: HKEY, 148 lpSubKey: LPCSTR, 149 Reserved: DWORD, 150 lpClass: LPSTR, 151 dwOptions: DWORD, 152 samDesired: REGSAM, 153 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 154 phkResult: PHKEY, 155 lpdwDisposition: LPDWORD, 156 hTransaction: HANDLE, 157 pExtendedParemeter: PVOID, 158 ) -> 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, ) -> LSTATUS159 pub fn RegCreateKeyTransactedW( 160 hKey: HKEY, 161 lpSubKey: LPCWSTR, 162 Reserved: DWORD, 163 lpClass: LPWSTR, 164 dwOptions: DWORD, 165 samDesired: REGSAM, 166 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 167 phkResult: PHKEY, 168 lpdwDisposition: LPDWORD, 169 hTransaction: HANDLE, 170 pExtendedParemeter: PVOID, 171 ) -> LSTATUS; RegDeleteKeyA( hKey: HKEY, lpSubKey: LPCSTR, ) -> LSTATUS172 pub fn RegDeleteKeyA( 173 hKey: HKEY, 174 lpSubKey: LPCSTR, 175 ) -> LSTATUS; RegDeleteKeyW( hKey: HKEY, lpSubKey: LPCWSTR, ) -> LSTATUS176 pub fn RegDeleteKeyW( 177 hKey: HKEY, 178 lpSubKey: LPCWSTR, 179 ) -> LSTATUS; RegDeleteKeyExA( hKey: HKEY, lpSubKey: LPCSTR, samDesired: REGSAM, Reserved: DWORD, ) -> LSTATUS180 pub fn RegDeleteKeyExA( 181 hKey: HKEY, 182 lpSubKey: LPCSTR, 183 samDesired: REGSAM, 184 Reserved: DWORD, 185 ) -> LSTATUS; RegDeleteKeyExW( hKey: HKEY, lpSubKey: LPCWSTR, samDesired: REGSAM, Reserved: DWORD, ) -> LSTATUS186 pub fn RegDeleteKeyExW( 187 hKey: HKEY, 188 lpSubKey: LPCWSTR, 189 samDesired: REGSAM, 190 Reserved: DWORD, 191 ) -> LSTATUS; RegDeleteKeyTransactedA( hKey: HKEY, lpSubKey: LPCSTR, samDesired: REGSAM, Reserved: DWORD, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS192 pub fn RegDeleteKeyTransactedA( 193 hKey: HKEY, 194 lpSubKey: LPCSTR, 195 samDesired: REGSAM, 196 Reserved: DWORD, 197 hTransaction: HANDLE, 198 pExtendedParemeter: PVOID, 199 ) -> LSTATUS; RegDeleteKeyTransactedW( hKey: HKEY, lpSubKey: LPCWSTR, samDesired: REGSAM, Reserved: DWORD, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS200 pub fn RegDeleteKeyTransactedW( 201 hKey: HKEY, 202 lpSubKey: LPCWSTR, 203 samDesired: REGSAM, 204 Reserved: DWORD, 205 hTransaction: HANDLE, 206 pExtendedParemeter: PVOID, 207 ) -> LSTATUS; RegDisableReflectionKey( hBase: HKEY, ) -> LONG208 pub fn RegDisableReflectionKey( 209 hBase: HKEY, 210 ) -> LONG; RegEnableReflectionKey( hBase: HKEY, ) -> LONG211 pub fn RegEnableReflectionKey( 212 hBase: HKEY, 213 ) -> LONG; RegQueryReflectionKey( hBase: HKEY, bIsReflectionDisabled: *mut BOOL, ) -> LONG214 pub fn RegQueryReflectionKey( 215 hBase: HKEY, 216 bIsReflectionDisabled: *mut BOOL, 217 ) -> LONG; RegDeleteValueA( hKey: HKEY, lpValueName: LPCSTR, ) -> LSTATUS218 pub fn RegDeleteValueA( 219 hKey: HKEY, 220 lpValueName: LPCSTR, 221 ) -> LSTATUS; RegDeleteValueW( hKey: HKEY, lpValueName: LPCWSTR, ) -> LSTATUS222 pub fn RegDeleteValueW( 223 hKey: HKEY, 224 lpValueName: LPCWSTR, 225 ) -> LSTATUS; RegEnumKeyA( hKey: HKEY, dwIndex: DWORD, lpName: LPSTR, cchName: DWORD, ) -> LSTATUS226 pub fn RegEnumKeyA( 227 hKey: HKEY, 228 dwIndex: DWORD, 229 lpName: LPSTR, 230 cchName: DWORD, 231 ) -> LSTATUS; RegEnumKeyW( hKey: HKEY, dwIndex: DWORD, lpName: LPWSTR, cchName: DWORD, ) -> LSTATUS232 pub fn RegEnumKeyW( 233 hKey: HKEY, 234 dwIndex: DWORD, 235 lpName: LPWSTR, 236 cchName: DWORD, 237 ) -> LSTATUS; RegEnumKeyExA( hKey: HKEY, dwIndex: DWORD, lpName: LPSTR, lpcName: LPDWORD, lpReserved: LPDWORD, lpClass: LPSTR, lpcClass: LPDWORD, lpftLastWriteTime: PFILETIME, ) -> LSTATUS238 pub fn RegEnumKeyExA( 239 hKey: HKEY, 240 dwIndex: DWORD, 241 lpName: LPSTR, 242 lpcName: LPDWORD, 243 lpReserved: LPDWORD, 244 lpClass: LPSTR, 245 lpcClass: LPDWORD, 246 lpftLastWriteTime: PFILETIME, 247 ) -> LSTATUS; RegEnumKeyExW( hKey: HKEY, dwIndex: DWORD, lpName: LPWSTR, lpcName: LPDWORD, lpReserved: LPDWORD, lpClass: LPWSTR, lpcClass: LPDWORD, lpftLastWriteTime: PFILETIME, ) -> LSTATUS248 pub fn RegEnumKeyExW( 249 hKey: HKEY, 250 dwIndex: DWORD, 251 lpName: LPWSTR, 252 lpcName: LPDWORD, 253 lpReserved: LPDWORD, 254 lpClass: LPWSTR, 255 lpcClass: LPDWORD, 256 lpftLastWriteTime: PFILETIME, 257 ) -> LSTATUS; RegEnumValueA( hKey: HKEY, dwIndex: DWORD, lpValueName: LPSTR, lpcchValueName: LPDWORD, lpReserved: LPDWORD, lpType: LPDWORD, lpData: LPBYTE, lpcbData: LPDWORD, ) -> LSTATUS258 pub fn RegEnumValueA( 259 hKey: HKEY, 260 dwIndex: DWORD, 261 lpValueName: LPSTR, 262 lpcchValueName: LPDWORD, 263 lpReserved: LPDWORD, 264 lpType: LPDWORD, 265 lpData: LPBYTE, 266 lpcbData: LPDWORD, 267 ) -> LSTATUS; RegEnumValueW( hKey: HKEY, dwIndex: DWORD, lpValueName: LPWSTR, lpcchValueName: LPDWORD, lpReserved: LPDWORD, lpType: LPDWORD, lpData: LPBYTE, lpcbData: LPDWORD, ) -> LSTATUS268 pub fn RegEnumValueW( 269 hKey: HKEY, 270 dwIndex: DWORD, 271 lpValueName: LPWSTR, 272 lpcchValueName: LPDWORD, 273 lpReserved: LPDWORD, 274 lpType: LPDWORD, 275 lpData: LPBYTE, 276 lpcbData: LPDWORD, 277 ) -> LSTATUS; RegFlushKey( hKey: HKEY, ) -> LSTATUS278 pub fn RegFlushKey( 279 hKey: HKEY, 280 ) -> LSTATUS; RegGetKeySecurity( hKey: HKEY, SecurityInformation: SECURITY_INFORMATION, pSecurityDescriptor: PSECURITY_DESCRIPTOR, lpcbSecurityDescriptor: LPDWORD, ) -> LSTATUS281 pub fn RegGetKeySecurity( 282 hKey: HKEY, 283 SecurityInformation: SECURITY_INFORMATION, 284 pSecurityDescriptor: PSECURITY_DESCRIPTOR, 285 lpcbSecurityDescriptor: LPDWORD, 286 ) -> LSTATUS; RegLoadKeyA( hKey: HKEY, lpSubKey: LPCSTR, lpFile: LPCSTR, ) -> LSTATUS287 pub fn RegLoadKeyA( 288 hKey: HKEY, 289 lpSubKey: LPCSTR, 290 lpFile: LPCSTR, 291 ) -> LSTATUS; RegLoadKeyW( hKey: HKEY, lpSubKey: LPCWSTR, lpFile: LPCWSTR, ) -> LSTATUS292 pub fn RegLoadKeyW( 293 hKey: HKEY, 294 lpSubKey: LPCWSTR, 295 lpFile: LPCWSTR, 296 ) -> LSTATUS; RegNotifyChangeKeyValue( hKey: HKEY, bWatchSubtree: BOOL, dwNotifyFilter: DWORD, hEvent: HANDLE, fAsynchronous: BOOL, ) -> LSTATUS297 pub fn RegNotifyChangeKeyValue( 298 hKey: HKEY, 299 bWatchSubtree: BOOL, 300 dwNotifyFilter: DWORD, 301 hEvent: HANDLE, 302 fAsynchronous: BOOL, 303 ) -> LSTATUS; RegOpenKeyA( hKey: HKEY, lpSubKey: LPCSTR, phkResult: PHKEY, ) -> LSTATUS304 pub fn RegOpenKeyA( 305 hKey: HKEY, 306 lpSubKey: LPCSTR, 307 phkResult: PHKEY, 308 ) -> LSTATUS; RegOpenKeyW( hKey: HKEY, lpSubKey: LPCWSTR, phkResult: PHKEY, ) -> LSTATUS309 pub fn RegOpenKeyW( 310 hKey: HKEY, 311 lpSubKey: LPCWSTR, 312 phkResult: PHKEY, 313 ) -> LSTATUS; RegOpenKeyExA( hKey: HKEY, lpSubKey: LPCSTR, ulOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, ) -> LSTATUS314 pub fn RegOpenKeyExA( 315 hKey: HKEY, 316 lpSubKey: LPCSTR, 317 ulOptions: DWORD, 318 samDesired: REGSAM, 319 phkResult: PHKEY, 320 ) -> LSTATUS; RegOpenKeyExW( hKey: HKEY, lpSubKey: LPCWSTR, ulOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, ) -> LSTATUS321 pub fn RegOpenKeyExW( 322 hKey: HKEY, 323 lpSubKey: LPCWSTR, 324 ulOptions: DWORD, 325 samDesired: REGSAM, 326 phkResult: PHKEY, 327 ) -> LSTATUS; RegOpenKeyTransactedA( hKey: HKEY, lpSubKey: LPCSTR, ulOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS328 pub fn RegOpenKeyTransactedA( 329 hKey: HKEY, 330 lpSubKey: LPCSTR, 331 ulOptions: DWORD, 332 samDesired: REGSAM, 333 phkResult: PHKEY, 334 hTransaction: HANDLE, 335 pExtendedParemeter: PVOID, 336 ) -> LSTATUS; RegOpenKeyTransactedW( hKey: HKEY, lpSubKey: LPCWSTR, ulOptions: DWORD, samDesired: REGSAM, phkResult: PHKEY, hTransaction: HANDLE, pExtendedParemeter: PVOID, ) -> LSTATUS337 pub fn RegOpenKeyTransactedW( 338 hKey: HKEY, 339 lpSubKey: LPCWSTR, 340 ulOptions: DWORD, 341 samDesired: REGSAM, 342 phkResult: PHKEY, 343 hTransaction: HANDLE, 344 pExtendedParemeter: PVOID, 345 ) -> 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, ) -> LSTATUS346 pub fn RegQueryInfoKeyA( 347 hKey: HKEY, 348 lpClass: LPSTR, 349 lpcClass: LPDWORD, 350 lpReserved: LPDWORD, 351 lpcSubKeys: LPDWORD, 352 lpcMaxSubKeyLen: LPDWORD, 353 lpcMaxClassLen: LPDWORD, 354 lpcValues: LPDWORD, 355 lpcMaxValueNameLen: LPDWORD, 356 lpcMaxValueLen: LPDWORD, 357 lpcbSecurityDescriptor: LPDWORD, 358 lpftLastWriteTime: PFILETIME, 359 ) -> 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, ) -> LSTATUS360 pub fn RegQueryInfoKeyW( 361 hKey: HKEY, 362 lpClass: LPWSTR, 363 lpcClass: LPDWORD, 364 lpReserved: LPDWORD, 365 lpcSubKeys: LPDWORD, 366 lpcMaxSubKeyLen: LPDWORD, 367 lpcMaxClassLen: LPDWORD, 368 lpcValues: LPDWORD, 369 lpcMaxValueNameLen: LPDWORD, 370 lpcMaxValueLen: LPDWORD, 371 lpcbSecurityDescriptor: LPDWORD, 372 lpftLastWriteTime: PFILETIME, 373 ) -> LSTATUS; RegQueryValueA( hKey: HKEY, lpSubKey: LPCSTR, lpData: LPSTR, lpcbData: PLONG, ) -> LSTATUS374 pub fn RegQueryValueA( 375 hKey: HKEY, 376 lpSubKey: LPCSTR, 377 lpData: LPSTR, 378 lpcbData: PLONG, 379 ) -> LSTATUS; RegQueryValueW( hKey: HKEY, lpSubKey: LPCWSTR, lpData: LPWSTR, lpcbData: PLONG, ) -> LSTATUS380 pub fn RegQueryValueW( 381 hKey: HKEY, 382 lpSubKey: LPCWSTR, 383 lpData: LPWSTR, 384 lpcbData: PLONG, 385 ) -> LSTATUS; RegQueryMultipleValuesA( hKey: HKEY, val_list: PVALENTA, num_vals: DWORD, lpValueBuf: LPSTR, ldwTotsize: LPDWORD, ) -> LSTATUS386 pub fn RegQueryMultipleValuesA( 387 hKey: HKEY, 388 val_list: PVALENTA, 389 num_vals: DWORD, 390 lpValueBuf: LPSTR, 391 ldwTotsize: LPDWORD, 392 ) -> LSTATUS; RegQueryMultipleValuesW( hKey: HKEY, val_list: PVALENTW, num_vals: DWORD, lpValueBuf: LPWSTR, ldwTotsize: LPDWORD, ) -> LSTATUS393 pub fn RegQueryMultipleValuesW( 394 hKey: HKEY, 395 val_list: PVALENTW, 396 num_vals: DWORD, 397 lpValueBuf: LPWSTR, 398 ldwTotsize: LPDWORD, 399 ) -> LSTATUS; RegQueryValueExA( hKey: HKEY, lpValueName: LPCSTR, lpReserved: LPDWORD, lpType: LPDWORD, lpData: LPBYTE, lpcbData: LPDWORD, ) -> LSTATUS400 pub fn RegQueryValueExA( 401 hKey: HKEY, 402 lpValueName: LPCSTR, 403 lpReserved: LPDWORD, 404 lpType: LPDWORD, 405 lpData: LPBYTE, 406 lpcbData: LPDWORD, 407 ) -> LSTATUS; RegQueryValueExW( hKey: HKEY, lpValueName: LPCWSTR, lpReserved: LPDWORD, lpType: LPDWORD, lpData: LPBYTE, lpcbData: LPDWORD, ) -> LSTATUS408 pub fn RegQueryValueExW( 409 hKey: HKEY, 410 lpValueName: LPCWSTR, 411 lpReserved: LPDWORD, 412 lpType: LPDWORD, 413 lpData: LPBYTE, 414 lpcbData: LPDWORD, 415 ) -> LSTATUS; RegReplaceKeyA( hKey: HKEY, lpSubKey: LPCSTR, lpNewFile: LPCSTR, lpOldFile: LPCSTR, ) -> LSTATUS416 pub fn RegReplaceKeyA( 417 hKey: HKEY, 418 lpSubKey: LPCSTR, 419 lpNewFile: LPCSTR, 420 lpOldFile: LPCSTR, 421 ) -> LSTATUS; RegReplaceKeyW( hKey: HKEY, lpSubKey: LPCWSTR, lpNewFile: LPCWSTR, lpOldFile: LPCWSTR, ) -> LSTATUS422 pub fn RegReplaceKeyW( 423 hKey: HKEY, 424 lpSubKey: LPCWSTR, 425 lpNewFile: LPCWSTR, 426 lpOldFile: LPCWSTR, 427 ) -> LSTATUS; RegRestoreKeyA( hKey: HKEY, lpFile: LPCSTR, dwFlags: DWORD, ) -> LSTATUS428 pub fn RegRestoreKeyA( 429 hKey: HKEY, 430 lpFile: LPCSTR, 431 dwFlags: DWORD, 432 ) -> LSTATUS; RegRestoreKeyW( hKey: HKEY, lpFile: LPCWSTR, dwFlags: DWORD, ) -> LSTATUS433 pub fn RegRestoreKeyW( 434 hKey: HKEY, 435 lpFile: LPCWSTR, 436 dwFlags: DWORD, 437 ) -> LSTATUS; RegRenameKey( hKey: HKEY, lpSubKeyName: LPCWSTR, lpNewKeyName: LPCWSTR, ) -> LSTATUS438 pub fn RegRenameKey( 439 hKey: HKEY, 440 lpSubKeyName: LPCWSTR, 441 lpNewKeyName: LPCWSTR, 442 ) -> LSTATUS; RegSaveKeyA( hKey: HKEY, lpFile: LPCSTR, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, ) -> LSTATUS443 pub fn RegSaveKeyA( 444 hKey: HKEY, 445 lpFile: LPCSTR, 446 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 447 ) -> LSTATUS; RegSaveKeyW( hKey: HKEY, lpFile: LPCWSTR, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, ) -> LSTATUS448 pub fn RegSaveKeyW( 449 hKey: HKEY, 450 lpFile: LPCWSTR, 451 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 452 ) -> LSTATUS; RegSetKeySecurity( hKey: HKEY, SecurityInformation: SECURITY_INFORMATION, pSecurityDescriptor: PSECURITY_DESCRIPTOR, ) -> LSTATUS453 pub fn RegSetKeySecurity( 454 hKey: HKEY, 455 SecurityInformation: SECURITY_INFORMATION, 456 pSecurityDescriptor: PSECURITY_DESCRIPTOR, 457 ) -> LSTATUS; RegSetValueA( hKey: HKEY, lpSubKey: LPCSTR, dwType: DWORD, lpData: LPCSTR, cbData: DWORD, ) -> LSTATUS458 pub fn RegSetValueA( 459 hKey: HKEY, 460 lpSubKey: LPCSTR, 461 dwType: DWORD, 462 lpData: LPCSTR, 463 cbData: DWORD, 464 ) -> LSTATUS; RegSetValueW( hKey: HKEY, lpSubKey: LPCWSTR, dwType: DWORD, lpData: LPCWSTR, cbData: DWORD, ) -> LSTATUS465 pub fn RegSetValueW( 466 hKey: HKEY, 467 lpSubKey: LPCWSTR, 468 dwType: DWORD, 469 lpData: LPCWSTR, 470 cbData: DWORD, 471 ) -> LSTATUS; RegSetValueExA( hKey: HKEY, lpValueName: LPCSTR, Reserved: DWORD, dwType: DWORD, lpData: *const BYTE, cbData: DWORD, ) -> LSTATUS472 pub fn RegSetValueExA( 473 hKey: HKEY, 474 lpValueName: LPCSTR, 475 Reserved: DWORD, 476 dwType: DWORD, 477 lpData: *const BYTE, 478 cbData: DWORD, 479 ) -> LSTATUS; RegSetValueExW( hKey: HKEY, lpValueName: LPCWSTR, Reserved: DWORD, dwType: DWORD, lpData: *const BYTE, cbData: DWORD, ) -> LSTATUS480 pub fn RegSetValueExW( 481 hKey: HKEY, 482 lpValueName: LPCWSTR, 483 Reserved: DWORD, 484 dwType: DWORD, 485 lpData: *const BYTE, 486 cbData: DWORD, 487 ) -> LSTATUS; RegUnLoadKeyA( hKey: HKEY, lpSubKey: LPCSTR, ) -> LSTATUS488 pub fn RegUnLoadKeyA( 489 hKey: HKEY, 490 lpSubKey: LPCSTR, 491 ) -> LSTATUS; RegUnLoadKeyW( hKey: HKEY, lpSubKey: LPCWSTR, ) -> LSTATUS492 pub fn RegUnLoadKeyW( 493 hKey: HKEY, 494 lpSubKey: LPCWSTR, 495 ) -> LSTATUS; RegDeleteKeyValueA( hKey: HKEY, lpSubKey: LPCSTR, lpValueName: LPCSTR, ) -> LSTATUS496 pub fn RegDeleteKeyValueA( 497 hKey: HKEY, 498 lpSubKey: LPCSTR, 499 lpValueName: LPCSTR, 500 ) -> LSTATUS; RegDeleteKeyValueW( hKey: HKEY, lpSubKey: LPCWSTR, lpValueName: LPCWSTR, ) -> LSTATUS501 pub fn RegDeleteKeyValueW( 502 hKey: HKEY, 503 lpSubKey: LPCWSTR, 504 lpValueName: LPCWSTR, 505 ) -> LSTATUS; RegSetKeyValueA( hKey: HKEY, lpSubKey: LPCSTR, lpValueName: LPCSTR, dwType: DWORD, lpData: LPCVOID, cbData: DWORD, ) -> LSTATUS506 pub fn RegSetKeyValueA( 507 hKey: HKEY, 508 lpSubKey: LPCSTR, 509 lpValueName: LPCSTR, 510 dwType: DWORD, 511 lpData: LPCVOID, 512 cbData: DWORD, 513 ) -> LSTATUS; RegSetKeyValueW( hKey: HKEY, lpSubKey: LPCWSTR, lpValueName: LPCWSTR, dwType: DWORD, lpData: LPCVOID, cbData: DWORD, ) -> LSTATUS514 pub fn RegSetKeyValueW( 515 hKey: HKEY, 516 lpSubKey: LPCWSTR, 517 lpValueName: LPCWSTR, 518 dwType: DWORD, 519 lpData: LPCVOID, 520 cbData: DWORD, 521 ) -> LSTATUS; RegDeleteTreeA( hKey: HKEY, lpSubKey: LPCSTR, ) -> LSTATUS522 pub fn RegDeleteTreeA( 523 hKey: HKEY, 524 lpSubKey: LPCSTR, 525 ) -> LSTATUS; RegDeleteTreeW( hKey: HKEY, lpSubKey: LPCWSTR, ) -> LSTATUS526 pub fn RegDeleteTreeW( 527 hKey: HKEY, 528 lpSubKey: LPCWSTR, 529 ) -> LSTATUS; RegCopyTreeA( hKeySrc: HKEY, lpSubKey: LPCSTR, hKeyDest: HKEY, ) -> LSTATUS530 pub fn RegCopyTreeA( 531 hKeySrc: HKEY, 532 lpSubKey: LPCSTR, 533 hKeyDest: HKEY, 534 ) -> LSTATUS; RegGetValueA( hkey: HKEY, lpSubKey: LPCSTR, lpValue: LPCSTR, dwFlags: DWORD, pdwType: LPDWORD, pvData: PVOID, pcbData: LPDWORD, ) -> LSTATUS535 pub fn RegGetValueA( 536 hkey: HKEY, 537 lpSubKey: LPCSTR, 538 lpValue: LPCSTR, 539 dwFlags: DWORD, 540 pdwType: LPDWORD, 541 pvData: PVOID, 542 pcbData: LPDWORD, 543 ) -> LSTATUS; RegGetValueW( hkey: HKEY, lpSubKey: LPCWSTR, lpValue: LPCWSTR, dwFlags: DWORD, pdwType: LPDWORD, pvData: PVOID, pcbData: LPDWORD, ) -> LSTATUS544 pub fn RegGetValueW( 545 hkey: HKEY, 546 lpSubKey: LPCWSTR, 547 lpValue: LPCWSTR, 548 dwFlags: DWORD, 549 pdwType: LPDWORD, 550 pvData: PVOID, 551 pcbData: LPDWORD, 552 ) -> LSTATUS; RegCopyTreeW( hKeySrc: HKEY, lpSubKey: LPCWSTR, hKeyDest: HKEY, ) -> LSTATUS553 pub fn RegCopyTreeW( 554 hKeySrc: HKEY, 555 lpSubKey: LPCWSTR, 556 hKeyDest: HKEY, 557 ) -> LSTATUS; RegLoadMUIStringA( hKey: HKEY, pszValue: LPCSTR, pszOutBuf: LPSTR, cbOutBuf: DWORD, pcbData: LPDWORD, Flags: DWORD, pszDirectory: LPCSTR, ) -> LSTATUS558 pub fn RegLoadMUIStringA( 559 hKey: HKEY, 560 pszValue: LPCSTR, 561 pszOutBuf: LPSTR, 562 cbOutBuf: DWORD, 563 pcbData: LPDWORD, 564 Flags: DWORD, 565 pszDirectory: LPCSTR, 566 ) -> LSTATUS; RegLoadMUIStringW( hKey: HKEY, pszValue: LPCWSTR, pszOutBuf: LPWSTR, cbOutBuf: DWORD, pcbData: LPDWORD, Flags: DWORD, pszDirectory: LPCWSTR, ) -> LSTATUS567 pub fn RegLoadMUIStringW( 568 hKey: HKEY, 569 pszValue: LPCWSTR, 570 pszOutBuf: LPWSTR, 571 cbOutBuf: DWORD, 572 pcbData: LPDWORD, 573 Flags: DWORD, 574 pszDirectory: LPCWSTR, 575 ) -> LSTATUS; RegLoadAppKeyA( lpFile: LPCSTR, phkResult: PHKEY, samDesired: REGSAM, dwOptions: DWORD, Reserved: DWORD, ) -> LSTATUS576 pub fn RegLoadAppKeyA( 577 lpFile: LPCSTR, 578 phkResult: PHKEY, 579 samDesired: REGSAM, 580 dwOptions: DWORD, 581 Reserved: DWORD, 582 ) -> LSTATUS; RegLoadAppKeyW( lpFile: LPCWSTR, phkResult: PHKEY, samDesired: REGSAM, dwOptions: DWORD, Reserved: DWORD, ) -> LSTATUS583 pub fn RegLoadAppKeyW( 584 lpFile: LPCWSTR, 585 phkResult: PHKEY, 586 samDesired: REGSAM, 587 dwOptions: DWORD, 588 Reserved: DWORD, 589 ) -> LSTATUS; InitiateSystemShutdownA( lpMachineName: LPSTR, lpMessage: LPSTR, dwTimeout: DWORD, bForceAppsClosed: BOOL, bRebootAfterShutdown: BOOL, ) -> BOOL590 pub fn InitiateSystemShutdownA( 591 lpMachineName: LPSTR, 592 lpMessage: LPSTR, 593 dwTimeout: DWORD, 594 bForceAppsClosed: BOOL, 595 bRebootAfterShutdown: BOOL, 596 ) -> BOOL; InitiateSystemShutdownW( lpMachineName: LPWSTR, lpMessage: LPWSTR, dwTimeout: DWORD, bForceAppsClosed: BOOL, bRebootAfterShutdown: BOOL, ) -> BOOL597 pub fn InitiateSystemShutdownW( 598 lpMachineName: LPWSTR, 599 lpMessage: LPWSTR, 600 dwTimeout: DWORD, 601 bForceAppsClosed: BOOL, 602 bRebootAfterShutdown: BOOL, 603 ) -> BOOL; AbortSystemShutdownA( lpMachineName: LPSTR, ) -> BOOL604 pub fn AbortSystemShutdownA( 605 lpMachineName: LPSTR, 606 ) -> BOOL; AbortSystemShutdownW( lpMachineName: LPWSTR, ) -> BOOL607 pub fn AbortSystemShutdownW( 608 lpMachineName: LPWSTR, 609 ) -> BOOL; 610 } 611 pub const REASON_SWINSTALL: DWORD = SHTDN_REASON_MAJOR_SOFTWARE | SHTDN_REASON_MINOR_INSTALLATION; 612 pub const REASON_HWINSTALL: DWORD = SHTDN_REASON_MAJOR_HARDWARE | SHTDN_REASON_MINOR_INSTALLATION; 613 pub const REASON_SERVICEHANG: DWORD = SHTDN_REASON_MAJOR_SOFTWARE | SHTDN_REASON_MINOR_HUNG; 614 pub const REASON_UNSTABLE: DWORD = SHTDN_REASON_MAJOR_SYSTEM | SHTDN_REASON_MINOR_UNSTABLE; 615 pub const REASON_SWHWRECONF: DWORD = SHTDN_REASON_MAJOR_SOFTWARE | SHTDN_REASON_MINOR_RECONFIG; 616 pub const REASON_OTHER: DWORD = SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER; 617 pub const REASON_UNKNOWN: DWORD = SHTDN_REASON_UNKNOWN; 618 pub const REASON_LEGACY_API: DWORD = SHTDN_REASON_LEGACY_API; 619 pub const REASON_PLANNED_FLAG: DWORD = SHTDN_REASON_FLAG_PLANNED; 620 pub const MAX_SHUTDOWN_TIMEOUT: DWORD = 10 * 365 * 24 * 60 * 60; 621 extern "system" { InitiateSystemShutdownExA( lpMachineName: LPSTR, lpMessage: LPSTR, dwTimeout: DWORD, bForceAppsClosed: BOOL, bRebootAfterShutdown: BOOL, dwReason: DWORD, ) -> BOOL622 pub fn InitiateSystemShutdownExA( 623 lpMachineName: LPSTR, 624 lpMessage: LPSTR, 625 dwTimeout: DWORD, 626 bForceAppsClosed: BOOL, 627 bRebootAfterShutdown: BOOL, 628 dwReason: DWORD, 629 ) -> BOOL; InitiateSystemShutdownExW( lpMachineName: LPWSTR, lpMessage: LPWSTR, dwTimeout: DWORD, bForceAppsClosed: BOOL, bRebootAfterShutdown: BOOL, dwReason: DWORD, ) -> BOOL630 pub fn InitiateSystemShutdownExW( 631 lpMachineName: LPWSTR, 632 lpMessage: LPWSTR, 633 dwTimeout: DWORD, 634 bForceAppsClosed: BOOL, 635 bRebootAfterShutdown: BOOL, 636 dwReason: DWORD, 637 ) -> BOOL; 638 } 639 pub const SHUTDOWN_FORCE_OTHERS: DWORD = 0x00000001; 640 pub const SHUTDOWN_FORCE_SELF: DWORD = 0x00000002; 641 pub const SHUTDOWN_RESTART: DWORD = 0x00000004; 642 pub const SHUTDOWN_POWEROFF: DWORD = 0x00000008; 643 pub const SHUTDOWN_NOREBOOT: DWORD = 0x00000010; 644 pub const SHUTDOWN_GRACE_OVERRIDE: DWORD = 0x00000020; 645 pub const SHUTDOWN_INSTALL_UPDATES: DWORD = 0x00000040; 646 pub const SHUTDOWN_RESTARTAPPS: DWORD = 0x00000080; 647 pub const SHUTDOWN_SKIP_SVC_PRESHUTDOWN: DWORD = 0x00000100; 648 pub const SHUTDOWN_HYBRID: DWORD = 0x00000200; 649 pub const SHUTDOWN_RESTART_BOOTOPTIONS: DWORD = 0x00000400; 650 pub const SHUTDOWN_SOFT_REBOOT: DWORD = 0x00000800; 651 pub const SHUTDOWN_MOBILE_UI: DWORD = 0x00001000; 652 pub const SHUTDOWN_ARSO: DWORD = 0x00002000; 653 extern "system" { InitiateShutdownA( lpMachineName: LPSTR, lpMessage: LPSTR, dwGracePeriod: DWORD, dwShutdownFlags: DWORD, dwReason: DWORD, ) -> DWORD654 pub fn InitiateShutdownA( 655 lpMachineName: LPSTR, 656 lpMessage: LPSTR, 657 dwGracePeriod: DWORD, 658 dwShutdownFlags: DWORD, 659 dwReason: DWORD, 660 ) -> DWORD; InitiateShutdownW( lpMachineName: LPWSTR, lpMessage: LPWSTR, dwGracePeriod: DWORD, dwShutdownFlags: DWORD, dwReason: DWORD, ) -> DWORD661 pub fn InitiateShutdownW( 662 lpMachineName: LPWSTR, 663 lpMessage: LPWSTR, 664 dwGracePeriod: DWORD, 665 dwShutdownFlags: DWORD, 666 dwReason: DWORD, 667 ) -> DWORD; CheckForHiberboot( pHiberboot: PBOOLEAN, bClearFlag: BOOLEAN, ) -> DWORD668 pub fn CheckForHiberboot( 669 pHiberboot: PBOOLEAN, 670 bClearFlag: BOOLEAN, 671 ) -> DWORD; RegSaveKeyExA( hKey: HKEY, lpFile: LPCSTR, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, Flags: DWORD, ) -> LSTATUS672 pub fn RegSaveKeyExA( 673 hKey: HKEY, 674 lpFile: LPCSTR, 675 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 676 Flags: DWORD, 677 ) -> LSTATUS; RegSaveKeyExW( hKey: HKEY, lpFile: LPCWSTR, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, Flags: DWORD, ) -> LSTATUS678 pub fn RegSaveKeyExW( 679 hKey: HKEY, 680 lpFile: LPCWSTR, 681 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 682 Flags: DWORD, 683 ) -> LSTATUS; 684 } 685