/*++ BUILD Version: 0001 // Increment this if a change has global effects Copyright (c) Microsoft Corporation. All rights reserved. Module Name: Winreg.h Abstract: This module contains the function prototypes and constant, type and structure definitions for the Windows 32-Bit Registry API. --*/ #ifndef _WINREG_ #define _WINREG_ #ifdef _MAC #include #endif #ifdef __cplusplus extern "C" { #endif #ifndef WINVER #define WINVER 0x0500 // version 5.0 #endif /* !WINVER */ // // Requested Key access mask type. // typedef ACCESS_MASK REGSAM; // // Reserved Key Handles. // #define HKEY_CLASSES_ROOT (( HKEY ) (ULONG_PTR)((LONG)0x80000000) ) #define HKEY_CURRENT_USER (( HKEY ) (ULONG_PTR)((LONG)0x80000001) ) #define HKEY_LOCAL_MACHINE (( HKEY ) (ULONG_PTR)((LONG)0x80000002) ) #define HKEY_USERS (( HKEY ) (ULONG_PTR)((LONG)0x80000003) ) #define HKEY_PERFORMANCE_DATA (( HKEY ) (ULONG_PTR)((LONG)0x80000004) ) #define HKEY_PERFORMANCE_TEXT (( HKEY ) (ULONG_PTR)((LONG)0x80000050) ) #define HKEY_PERFORMANCE_NLSTEXT (( HKEY ) (ULONG_PTR)((LONG)0x80000060) ) #if(WINVER >= 0x0400) #define HKEY_CURRENT_CONFIG (( HKEY ) (ULONG_PTR)((LONG)0x80000005) ) #define HKEY_DYN_DATA (( HKEY ) (ULONG_PTR)((LONG)0x80000006) ) /*NOINC*/ #ifndef _PROVIDER_STRUCTS_DEFINED #define _PROVIDER_STRUCTS_DEFINED #define PROVIDER_KEEPS_VALUE_LENGTH 0x1 struct val_context { int valuelen; // the total length of this value LPVOID value_context; // provider's context LPVOID val_buff_ptr; // where in the ouput buffer the value is. }; typedef struct val_context FAR *PVALCONTEXT; typedef struct pvalueA { // Provider supplied value/context. LPSTR pv_valuename; // The value name pointer int pv_valuelen; LPVOID pv_value_context; DWORD pv_type; }PVALUEA, FAR *PPVALUEA; typedef struct pvalueW { // Provider supplied value/context. LPWSTR pv_valuename; // The value name pointer int pv_valuelen; LPVOID pv_value_context; DWORD pv_type; }PVALUEW, FAR *PPVALUEW; #ifdef UNICODE typedef PVALUEW PVALUE; typedef PPVALUEW PPVALUE; #else typedef PVALUEA PVALUE; typedef PPVALUEA PPVALUE; #endif // UNICODE typedef DWORD _cdecl QUERYHANDLER (LPVOID keycontext, PVALCONTEXT val_list, DWORD num_vals, LPVOID outputbuffer, DWORD FAR *total_outlen, DWORD input_blen); typedef QUERYHANDLER FAR *PQUERYHANDLER; typedef struct provider_info { PQUERYHANDLER pi_R0_1val; PQUERYHANDLER pi_R0_allvals; PQUERYHANDLER pi_R3_1val; PQUERYHANDLER pi_R3_allvals; DWORD pi_flags; // capability flags (none defined yet). LPVOID pi_key_context; }REG_PROVIDER; typedef struct provider_info FAR *PPROVIDER; typedef struct value_entA { LPSTR ve_valuename; DWORD ve_valuelen; DWORD_PTR ve_valueptr; DWORD ve_type; }VALENTA, FAR *PVALENTA; typedef struct value_entW { LPWSTR ve_valuename; DWORD ve_valuelen; DWORD_PTR ve_valueptr; DWORD ve_type; }VALENTW, FAR *PVALENTW; #ifdef UNICODE typedef VALENTW VALENT; typedef PVALENTW PVALENT; #else typedef VALENTA VALENT; typedef PVALENTA PVALENT; #endif // UNICODE #endif // not(_PROVIDER_STRUCTS_DEFINED) /*INC*/ #endif /* WINVER >= 0x0400 */ // // Default values for parameters that do not exist in the Win 3.1 // compatible APIs. // #define WIN31_CLASS NULL // // API Prototypes. // WINADVAPI LONG APIENTRY RegCloseKey ( IN HKEY hKey ); WINADVAPI LONG APIENTRY RegOverridePredefKey ( IN HKEY hKey, IN HKEY hNewHKey ); WINADVAPI LONG APIENTRY RegOpenUserClassesRoot( HANDLE hToken, DWORD dwOptions, REGSAM samDesired, PHKEY phkResult ); WINADVAPI LONG APIENTRY RegOpenCurrentUser( REGSAM samDesired, PHKEY phkResult ); WINADVAPI LONG APIENTRY RegDisablePredefinedCache( ); WINADVAPI LONG APIENTRY RegConnectRegistryA ( IN LPCSTR lpMachineName, IN HKEY hKey, OUT PHKEY phkResult ); WINADVAPI LONG APIENTRY RegConnectRegistryW ( IN LPCWSTR lpMachineName, IN HKEY hKey, OUT PHKEY phkResult ); #ifdef UNICODE #define RegConnectRegistry RegConnectRegistryW #else #define RegConnectRegistry RegConnectRegistryA #endif // !UNICODE WINADVAPI LONG APIENTRY RegCreateKeyA ( IN HKEY hKey, IN LPCSTR lpSubKey, OUT PHKEY phkResult ); WINADVAPI LONG APIENTRY RegCreateKeyW ( IN HKEY hKey, IN LPCWSTR lpSubKey, OUT PHKEY phkResult ); #ifdef UNICODE #define RegCreateKey RegCreateKeyW #else #define RegCreateKey RegCreateKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegCreateKeyExA ( IN HKEY hKey, IN LPCSTR lpSubKey, IN DWORD Reserved, IN LPSTR lpClass, IN DWORD dwOptions, IN REGSAM samDesired, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes, OUT PHKEY phkResult, OUT LPDWORD lpdwDisposition ); WINADVAPI LONG APIENTRY RegCreateKeyExW ( IN HKEY hKey, IN LPCWSTR lpSubKey, IN DWORD Reserved, IN LPWSTR lpClass, IN DWORD dwOptions, IN REGSAM samDesired, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes, OUT PHKEY phkResult, OUT LPDWORD lpdwDisposition ); #ifdef UNICODE #define RegCreateKeyEx RegCreateKeyExW #else #define RegCreateKeyEx RegCreateKeyExA #endif // !UNICODE WINADVAPI LONG APIENTRY RegDeleteKeyA ( IN HKEY hKey, IN LPCSTR lpSubKey ); WINADVAPI LONG APIENTRY RegDeleteKeyW ( IN HKEY hKey, IN LPCWSTR lpSubKey ); #ifdef UNICODE #define RegDeleteKey RegDeleteKeyW #else #define RegDeleteKey RegDeleteKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegDeleteValueA ( IN HKEY hKey, IN LPCSTR lpValueName ); WINADVAPI LONG APIENTRY RegDeleteValueW ( IN HKEY hKey, IN LPCWSTR lpValueName ); #ifdef UNICODE #define RegDeleteValue RegDeleteValueW #else #define RegDeleteValue RegDeleteValueA #endif // !UNICODE WINADVAPI LONG APIENTRY RegEnumKeyA ( IN HKEY hKey, IN DWORD dwIndex, OUT LPSTR lpName, IN DWORD cbName ); WINADVAPI LONG APIENTRY RegEnumKeyW ( IN HKEY hKey, IN DWORD dwIndex, OUT LPWSTR lpName, IN DWORD cbName ); #ifdef UNICODE #define RegEnumKey RegEnumKeyW #else #define RegEnumKey RegEnumKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegEnumKeyExA ( IN HKEY hKey, IN DWORD dwIndex, OUT LPSTR lpName, IN OUT LPDWORD lpcbName, IN LPDWORD lpReserved, IN OUT LPSTR lpClass, IN OUT LPDWORD lpcbClass, OUT PFILETIME lpftLastWriteTime ); WINADVAPI LONG APIENTRY RegEnumKeyExW ( IN HKEY hKey, IN DWORD dwIndex, OUT LPWSTR lpName, IN OUT LPDWORD lpcbName, IN LPDWORD lpReserved, IN OUT LPWSTR lpClass, IN OUT LPDWORD lpcbClass, OUT PFILETIME lpftLastWriteTime ); #ifdef UNICODE #define RegEnumKeyEx RegEnumKeyExW #else #define RegEnumKeyEx RegEnumKeyExA #endif // !UNICODE WINADVAPI LONG APIENTRY RegEnumValueA ( IN HKEY hKey, IN DWORD dwIndex, OUT LPSTR lpValueName, IN OUT LPDWORD lpcbValueName, IN LPDWORD lpReserved, OUT LPDWORD lpType, OUT LPBYTE lpData, IN OUT LPDWORD lpcbData ); WINADVAPI LONG APIENTRY RegEnumValueW ( IN HKEY hKey, IN DWORD dwIndex, OUT LPWSTR lpValueName, IN OUT LPDWORD lpcbValueName, IN LPDWORD lpReserved, OUT LPDWORD lpType, OUT LPBYTE lpData, IN OUT LPDWORD lpcbData ); #ifdef UNICODE #define RegEnumValue RegEnumValueW #else #define RegEnumValue RegEnumValueA #endif // !UNICODE WINADVAPI LONG APIENTRY RegFlushKey ( IN HKEY hKey ); WINADVAPI LONG APIENTRY RegGetKeySecurity ( IN HKEY hKey, IN SECURITY_INFORMATION SecurityInformation, OUT PSECURITY_DESCRIPTOR pSecurityDescriptor, IN OUT LPDWORD lpcbSecurityDescriptor ); WINADVAPI LONG APIENTRY RegLoadKeyA ( IN HKEY hKey, IN LPCSTR lpSubKey, IN LPCSTR lpFile ); WINADVAPI LONG APIENTRY RegLoadKeyW ( IN HKEY hKey, IN LPCWSTR lpSubKey, IN LPCWSTR lpFile ); #ifdef UNICODE #define RegLoadKey RegLoadKeyW #else #define RegLoadKey RegLoadKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegNotifyChangeKeyValue ( IN HKEY hKey, IN BOOL bWatchSubtree, IN DWORD dwNotifyFilter, IN HANDLE hEvent, IN BOOL fAsynchronus ); WINADVAPI LONG APIENTRY RegOpenKeyA ( IN HKEY hKey, IN LPCSTR lpSubKey, OUT PHKEY phkResult ); WINADVAPI LONG APIENTRY RegOpenKeyW ( IN HKEY hKey, IN LPCWSTR lpSubKey, OUT PHKEY phkResult ); #ifdef UNICODE #define RegOpenKey RegOpenKeyW #else #define RegOpenKey RegOpenKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegOpenKeyExA ( IN HKEY hKey, IN LPCSTR lpSubKey, IN DWORD ulOptions, IN REGSAM samDesired, OUT PHKEY phkResult ); WINADVAPI LONG APIENTRY RegOpenKeyExW ( IN HKEY hKey, IN LPCWSTR lpSubKey, IN DWORD ulOptions, IN REGSAM samDesired, OUT PHKEY phkResult ); #ifdef UNICODE #define RegOpenKeyEx RegOpenKeyExW #else #define RegOpenKeyEx RegOpenKeyExA #endif // !UNICODE WINADVAPI LONG APIENTRY RegQueryInfoKeyA ( IN HKEY hKey, OUT LPSTR lpClass, IN OUT LPDWORD lpcbClass, IN LPDWORD lpReserved, OUT LPDWORD lpcSubKeys, OUT LPDWORD lpcbMaxSubKeyLen, OUT LPDWORD lpcbMaxClassLen, OUT LPDWORD lpcValues, OUT LPDWORD lpcbMaxValueNameLen, OUT LPDWORD lpcbMaxValueLen, OUT LPDWORD lpcbSecurityDescriptor, OUT PFILETIME lpftLastWriteTime ); WINADVAPI LONG APIENTRY RegQueryInfoKeyW ( IN HKEY hKey, OUT LPWSTR lpClass, IN OUT LPDWORD lpcbClass, IN LPDWORD lpReserved, OUT LPDWORD lpcSubKeys, OUT LPDWORD lpcbMaxSubKeyLen, OUT LPDWORD lpcbMaxClassLen, OUT LPDWORD lpcValues, OUT LPDWORD lpcbMaxValueNameLen, OUT LPDWORD lpcbMaxValueLen, OUT LPDWORD lpcbSecurityDescriptor, OUT PFILETIME lpftLastWriteTime ); #ifdef UNICODE #define RegQueryInfoKey RegQueryInfoKeyW #else #define RegQueryInfoKey RegQueryInfoKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegQueryValueA ( IN HKEY hKey, IN LPCSTR lpSubKey, OUT LPSTR lpValue, IN OUT PLONG lpcbValue ); WINADVAPI LONG APIENTRY RegQueryValueW ( IN HKEY hKey, IN LPCWSTR lpSubKey, OUT LPWSTR lpValue, IN OUT PLONG lpcbValue ); #ifdef UNICODE #define RegQueryValue RegQueryValueW #else #define RegQueryValue RegQueryValueA #endif // !UNICODE #if(WINVER >= 0x0400) WINADVAPI LONG APIENTRY RegQueryMultipleValuesA ( IN HKEY hKey, OUT PVALENTA val_list, IN DWORD num_vals, OUT LPSTR lpValueBuf, IN OUT LPDWORD ldwTotsize ); WINADVAPI LONG APIENTRY RegQueryMultipleValuesW ( IN HKEY hKey, OUT PVALENTW val_list, IN DWORD num_vals, OUT LPWSTR lpValueBuf, IN OUT LPDWORD ldwTotsize ); #ifdef UNICODE #define RegQueryMultipleValues RegQueryMultipleValuesW #else #define RegQueryMultipleValues RegQueryMultipleValuesA #endif // !UNICODE #endif /* WINVER >= 0x0400 */ WINADVAPI LONG APIENTRY RegQueryValueExA ( IN HKEY hKey, IN LPCSTR lpValueName, IN LPDWORD lpReserved, OUT LPDWORD lpType, IN OUT LPBYTE lpData, IN OUT LPDWORD lpcbData ); WINADVAPI LONG APIENTRY RegQueryValueExW ( IN HKEY hKey, IN LPCWSTR lpValueName, IN LPDWORD lpReserved, OUT LPDWORD lpType, IN OUT LPBYTE lpData, IN OUT LPDWORD lpcbData ); #ifdef UNICODE #define RegQueryValueEx RegQueryValueExW #else #define RegQueryValueEx RegQueryValueExA #endif // !UNICODE WINADVAPI LONG APIENTRY RegReplaceKeyA ( IN HKEY hKey, IN LPCSTR lpSubKey, IN LPCSTR lpNewFile, IN LPCSTR lpOldFile ); WINADVAPI LONG APIENTRY RegReplaceKeyW ( IN HKEY hKey, IN LPCWSTR lpSubKey, IN LPCWSTR lpNewFile, IN LPCWSTR lpOldFile ); #ifdef UNICODE #define RegReplaceKey RegReplaceKeyW #else #define RegReplaceKey RegReplaceKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegRestoreKeyA ( IN HKEY hKey, IN LPCSTR lpFile, IN DWORD dwFlags ); WINADVAPI LONG APIENTRY RegRestoreKeyW ( IN HKEY hKey, IN LPCWSTR lpFile, IN DWORD dwFlags ); #ifdef UNICODE #define RegRestoreKey RegRestoreKeyW #else #define RegRestoreKey RegRestoreKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegSaveKeyA ( IN HKEY hKey, IN LPCSTR lpFile, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes ); WINADVAPI LONG APIENTRY RegSaveKeyW ( IN HKEY hKey, IN LPCWSTR lpFile, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes ); #ifdef UNICODE #define RegSaveKey RegSaveKeyW #else #define RegSaveKey RegSaveKeyA #endif // !UNICODE WINADVAPI LONG APIENTRY RegSetKeySecurity ( IN HKEY hKey, IN SECURITY_INFORMATION SecurityInformation, IN PSECURITY_DESCRIPTOR pSecurityDescriptor ); WINADVAPI LONG APIENTRY RegSetValueA ( IN HKEY hKey, IN LPCSTR lpSubKey, IN DWORD dwType, IN LPCSTR lpData, IN DWORD cbData ); WINADVAPI LONG APIENTRY RegSetValueW ( IN HKEY hKey, IN LPCWSTR lpSubKey, IN DWORD dwType, IN LPCWSTR lpData, IN DWORD cbData ); #ifdef UNICODE #define RegSetValue RegSetValueW #else #define RegSetValue RegSetValueA #endif // !UNICODE WINADVAPI LONG APIENTRY RegSetValueExA ( IN HKEY hKey, IN LPCSTR lpValueName, IN DWORD Reserved, IN DWORD dwType, IN CONST BYTE* lpData, IN DWORD cbData ); WINADVAPI LONG APIENTRY RegSetValueExW ( IN HKEY hKey, IN LPCWSTR lpValueName, IN DWORD Reserved, IN DWORD dwType, IN CONST BYTE* lpData, IN DWORD cbData ); #ifdef UNICODE #define RegSetValueEx RegSetValueExW #else #define RegSetValueEx RegSetValueExA #endif // !UNICODE WINADVAPI LONG APIENTRY RegUnLoadKeyA ( IN HKEY hKey, IN LPCSTR lpSubKey ); WINADVAPI LONG APIENTRY RegUnLoadKeyW ( IN HKEY hKey, IN LPCWSTR lpSubKey ); #ifdef UNICODE #define RegUnLoadKey RegUnLoadKeyW #else #define RegUnLoadKey RegUnLoadKeyA #endif // !UNICODE // // Remoteable System Shutdown APIs // WINADVAPI BOOL APIENTRY InitiateSystemShutdownA( IN LPSTR lpMachineName, IN LPSTR lpMessage, IN DWORD dwTimeout, IN BOOL bForceAppsClosed, IN BOOL bRebootAfterShutdown ); WINADVAPI BOOL APIENTRY InitiateSystemShutdownW( IN LPWSTR lpMachineName, IN LPWSTR lpMessage, IN DWORD dwTimeout, IN BOOL bForceAppsClosed, IN BOOL bRebootAfterShutdown ); #ifdef UNICODE #define InitiateSystemShutdown InitiateSystemShutdownW #else #define InitiateSystemShutdown InitiateSystemShutdownA #endif // !UNICODE WINADVAPI BOOL APIENTRY AbortSystemShutdownA( IN LPSTR lpMachineName ); WINADVAPI BOOL APIENTRY AbortSystemShutdownW( IN LPWSTR lpMachineName ); #ifdef UNICODE #define AbortSystemShutdown AbortSystemShutdownW #else #define AbortSystemShutdown AbortSystemShutdownA #endif // !UNICODE // // defines for InitiateSystemShutdownEx reason codes // #include // get the public reasons // // Then for Historical reasons support some old symbols, internal only #define REASON_SWINSTALL SHTDN_REASON_MAJOR_SOFTWARE|SHTDN_REASON_MINOR_INSTALLATION #define REASON_HWINSTALL SHTDN_REASON_MAJOR_HARDWARE|SHTDN_REASON_MINOR_INSTALLATION #define REASON_SERVICEHANG SHTDN_REASON_MAJOR_SOFTWARE|SHTDN_REASON_MINOR_HUNG #define REASON_UNSTABLE SHTDN_REASON_MAJOR_SYSTEM|SHTDN_REASON_MINOR_UNSTABLE #define REASON_SWHWRECONF SHTDN_REASON_MAJOR_SOFTWARE|SHTDN_REASON_MINOR_RECONFIG #define REASON_OTHER SHTDN_REASON_MAJOR_OTHER|SHTDN_REASON_MINOR_OTHER #define REASON_UNKNOWN SHTDN_REASON_UNKNOWN #define REASON_LEGACY_API SHTDN_REASON_LEGACY_API #define REASON_PLANNED_FLAG SHTDN_REASON_FLAG_PLANNED // // MAX Shutdown TimeOut == 10 Years in seconds // #define MAX_SHUTDOWN_TIMEOUT (10*365*24*60*60) WINADVAPI BOOL APIENTRY InitiateSystemShutdownExA( IN LPSTR lpMachineName, IN LPSTR lpMessage, IN DWORD dwTimeout, IN BOOL bForceAppsClosed, IN BOOL bRebootAfterShutdown, IN DWORD dwReason ); WINADVAPI BOOL APIENTRY InitiateSystemShutdownExW( IN LPWSTR lpMachineName, IN LPWSTR lpMessage, IN DWORD dwTimeout, IN BOOL bForceAppsClosed, IN BOOL bRebootAfterShutdown, IN DWORD dwReason ); #ifdef UNICODE #define InitiateSystemShutdownEx InitiateSystemShutdownExW #else #define InitiateSystemShutdownEx InitiateSystemShutdownExA #endif // !UNICODE WINADVAPI LONG APIENTRY RegSaveKeyExA ( IN HKEY hKey, IN LPCSTR lpFile, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes, IN DWORD Flags ); WINADVAPI LONG APIENTRY RegSaveKeyExW ( IN HKEY hKey, IN LPCWSTR lpFile, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes, IN DWORD Flags ); #ifdef UNICODE #define RegSaveKeyEx RegSaveKeyExW #else #define RegSaveKeyEx RegSaveKeyExA #endif // !UNICODE WINADVAPI LONG APIENTRY Wow64Win32ApiEntry ( DWORD dwFuncNumber, DWORD dwFlag, DWORD dwRes ); #ifdef __cplusplus } #endif #endif // _WINREG_