File Index Symbol Index

/*++ 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_
#include <winapifamily.h>
#include <apiset.h>
#include <apisetcconv.h>
#include <minwindef.h>
#include <minwinbase.h>
#ifdef _MAC
#include <macwin32.h>
#endif
#ifdef __cplusplus
extern
"C"
{
#endif
#if _MSC_VER >= 1200
#pragma warning(push) #pragma region Application Family or Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#ifndef WINVER
#define WINVER 0x0500 // version 5.0
#endif /* !WINVER */
//
// RRF - Registry Routine Flags (for RegGetValue)
//
#define RRF_RT_REG_NONE 0x00000001 // restrict type to REG_NONE (other data types will not return ERROR_SUCCESS)
#define RRF_RT_REG_SZ 0x00000002 // restrict type to REG_SZ (other data types will not return ERROR_SUCCESS) (automatically converts REG_EXPAND_SZ to REG_SZ unless RRF_NOEXPAND is specified)
#define RRF_RT_REG_EXPAND_SZ 0x00000004 // restrict type to REG_EXPAND_SZ (other data types will not return ERROR_SUCCESS) (must specify RRF_NOEXPAND or RegGetValue will fail with ERROR_INVALID_PARAMETER)
#define RRF_RT_REG_BINARY 0x00000008 // restrict type to REG_BINARY (other data types will not return ERROR_SUCCESS)
#define RRF_RT_REG_DWORD 0x00000010 // restrict type to REG_DWORD (other data types will not return ERROR_SUCCESS)
#define RRF_RT_REG_MULTI_SZ 0x00000020 // restrict type to REG_MULTI_SZ (other data types will not return ERROR_SUCCESS)
#define RRF_RT_REG_QWORD 0x00000040 // restrict type to REG_QWORD (other data types will not return ERROR_SUCCESS)
#define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD) // restrict type to *32-bit* RRF_RT_REG_BINARY or RRF_RT_REG_DWORD (other data types will not return ERROR_SUCCESS)
#define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD) // restrict type to *64-bit* RRF_RT_REG_BINARY or RRF_RT_REG_DWORD (other data types will not return ERROR_SUCCESS)
#define RRF_RT_ANY 0x0000ffff // no type restriction
#if (_WIN32_WINNT >= _WIN32_WINNT_WINTHRESHOLD)
#define RRF_SUBKEY_WOW6464KEY 0x00010000 // when opening the subkey (if provided) force open from the 64bit location (only one SUBKEY_WOW64* flag can be set or RegGetValue will fail with ERROR_INVALID_PARAMETER)
#define RRF_SUBKEY_WOW6432KEY 0x00020000 // when opening the subkey (if provided) force open from the 32bit location (only one SUBKEY_WOW64* flag can be set or RegGetValue will fail with ERROR_INVALID_PARAMETER)
#define RRF_WOW64_MASK 0x00030000 #endif
#define RRF_NOEXPAND 0x10000000 // do not automatically expand environment strings if value is of type REG_EXPAND_SZ
#define RRF_ZEROONFAILURE 0x20000000 // if pvData is not NULL, set content to all zeros on failure
//
// Flags for RegLoadAppKey
//
#define REG_PROCESS_APPKEY 0x00000001
//
// 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) )
#define HKEY_CURRENT_USER_LOCAL_SETTINGS (( HKEY ) (ULONG_PTR)((LONG)0x80000007) )
/*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
pvalueA
{
// Provider supplied value/context.
LPSTR
pv_valuename
;
// The value name pointer
int
pv_valuelen
;
LPVOID
pv_value_context
;
DWORD
pv_type
;
typedef
struct
pvalueW
{
// Provider supplied value/context.
LPWSTR
pv_valuename
;
// The value name pointer
int
pv_valuelen
;
LPVOID
pv_value_context
;
DWORD
pv_type
;
#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,
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
value_entA
{
LPSTR
ve_valuename
;
DWORD
ve_valuelen
;
DWORD_PTR
ve_valueptr
;
DWORD
ve_type
;
typedef
struct
value_entW
{
LPWSTR
ve_valuename
;
DWORD
ve_valuelen
;
DWORD_PTR
ve_valueptr
;
DWORD
ve_type
;
#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
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#pragma endregion #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
//
// Flags for RegLoadMUIString
//
#define REG_MUI_STRING_TRUNCATE 0x00000001
#if (WINVER >= 0x0400)
//
// RegConnectRegistryEx supported flags
//
#define REG_SECURE_CONNECTION 1
#endif /* WINVER >= 0x0400 */
//
// API Prototypes.
//
LSTATUS
RegCloseKey
( );
LSTATUS
RegOverridePredefKey
( );
LSTATUS
RegOpenUserClassesRoot
( );
LSTATUS
RegOpenCurrentUser
( );
LSTATUS
RegDisablePredefinedCache
( );
LSTATUS
RegDisablePredefinedCacheEx
( );
LSTATUS
RegConnectRegistryA
( );
LSTATUS
RegConnectRegistryW
( );
#ifdef UNICODE
#define RegConnectRegistry RegConnectRegistryW
#else
#define RegConnectRegistry RegConnectRegistryA #endif // !UNICODE
LSTATUS
RegConnectRegistryExA
( );
LSTATUS
RegConnectRegistryExW
( );
#ifdef UNICODE
#define RegConnectRegistryEx RegConnectRegistryExW
#else
#define RegConnectRegistryEx RegConnectRegistryExA #endif // !UNICODE
LSTATUS
RegCreateKeyA
( );
LSTATUS
RegCreateKeyW
( );
#ifdef UNICODE
#define RegCreateKey RegCreateKeyW
#else
#define RegCreateKey RegCreateKeyA #endif // !UNICODE
LSTATUS
RegCreateKeyExA
( );
LSTATUS
RegCreateKeyExW
( );
#ifdef UNICODE
#define RegCreateKeyEx RegCreateKeyExW
#else
#define RegCreateKeyEx RegCreateKeyExA #endif // !UNICODE
LSTATUS
RegCreateKeyTransactedA
( );
LSTATUS
RegCreateKeyTransactedW
( );
#ifdef UNICODE
#define RegCreateKeyTransacted RegCreateKeyTransactedW
#else
#define RegCreateKeyTransacted RegCreateKeyTransactedA #endif // !UNICODE
LSTATUS
RegDeleteKeyA
( );
LSTATUS
RegDeleteKeyW
( );
#ifdef UNICODE
#define RegDeleteKey RegDeleteKeyW
#else
#define RegDeleteKey RegDeleteKeyA #endif // !UNICODE
LSTATUS
RegDeleteKeyExA
( );
LSTATUS
RegDeleteKeyExW
( );
#ifdef UNICODE
#define RegDeleteKeyEx RegDeleteKeyExW
#else
#define RegDeleteKeyEx RegDeleteKeyExA #endif // !UNICODE
LSTATUS
RegDeleteKeyTransactedA
( );
LSTATUS
RegDeleteKeyTransactedW
( );
#ifdef UNICODE
#define RegDeleteKeyTransacted RegDeleteKeyTransactedW
#else
#define RegDeleteKeyTransacted RegDeleteKeyTransactedA #endif // !UNICODE
LONG
RegDisableReflectionKey
( );
LONG
RegEnableReflectionKey
( );
LONG
RegQueryReflectionKey
( );
LSTATUS
RegDeleteValueA
( );
LSTATUS
RegDeleteValueW
( );
#ifdef UNICODE
#define RegDeleteValue RegDeleteValueW
#else
#define RegDeleteValue RegDeleteValueA #endif // !UNICODE
LSTATUS
RegEnumKeyA
( );
LSTATUS
RegEnumKeyW
( );
#ifdef UNICODE
#define RegEnumKey RegEnumKeyW
#else
#define RegEnumKey RegEnumKeyA #endif // !UNICODE
LSTATUS
RegEnumKeyExA
( );
LSTATUS
RegEnumKeyExW
( );
#ifdef UNICODE
#define RegEnumKeyEx RegEnumKeyExW
#else
#define RegEnumKeyEx RegEnumKeyExA #endif // !UNICODE
LSTATUS
RegEnumValueA
( );
LSTATUS
RegEnumValueW
( );
#ifdef UNICODE
#define RegEnumValue RegEnumValueW
#else
#define RegEnumValue RegEnumValueA #endif // !UNICODE
LSTATUS
RegFlushKey
( );
LSTATUS
RegGetKeySecurity
( );
LSTATUS
RegLoadKeyA
( );
LSTATUS
RegLoadKeyW
( );
#ifdef UNICODE
#define RegLoadKey RegLoadKeyW
#else
#define RegLoadKey RegLoadKeyA #endif // !UNICODE
LSTATUS
RegNotifyChangeKeyValue
( );
LSTATUS
RegOpenKeyA
( );
LSTATUS
RegOpenKeyW
( );
#ifdef UNICODE
#define RegOpenKey RegOpenKeyW
#else
#define RegOpenKey RegOpenKeyA #endif // !UNICODE
LSTATUS
RegOpenKeyExA
( );
LSTATUS
RegOpenKeyExW
( );
#ifdef UNICODE
#define RegOpenKeyEx RegOpenKeyExW
#else
#define RegOpenKeyEx RegOpenKeyExA #endif // !UNICODE
LSTATUS
RegOpenKeyTransactedA
( );
LSTATUS
RegOpenKeyTransactedW
( );
#ifdef UNICODE
#define RegOpenKeyTransacted RegOpenKeyTransactedW
#else
#define RegOpenKeyTransacted RegOpenKeyTransactedA #endif // !UNICODE
LSTATUS
RegQueryInfoKeyA
( );
LSTATUS
RegQueryInfoKeyW
( );
#ifdef UNICODE
#define RegQueryInfoKey RegQueryInfoKeyW
#else
#define RegQueryInfoKey RegQueryInfoKeyA #endif // !UNICODE
LSTATUS
RegQueryValueA
( );
LSTATUS
RegQueryValueW
( );
#ifdef UNICODE
#define RegQueryValue RegQueryValueW
#else
#define RegQueryValue RegQueryValueA #endif // !UNICODE
#if (WINVER >= 0x0400)
LSTATUS
RegQueryMultipleValuesA
( );
LSTATUS
RegQueryMultipleValuesW
( );
#ifdef UNICODE
#define RegQueryMultipleValues RegQueryMultipleValuesW
#else
#define RegQueryMultipleValues RegQueryMultipleValuesA #endif // !UNICODE
#endif /* WINVER >= 0x0400 */
LSTATUS
RegQueryValueExA
( );
LSTATUS
RegQueryValueExW
( );
#ifdef UNICODE
#define RegQueryValueEx RegQueryValueExW
#else
#define RegQueryValueEx RegQueryValueExA #endif // !UNICODE
LSTATUS
RegReplaceKeyA
( );
LSTATUS
RegReplaceKeyW
( );
#ifdef UNICODE
#define RegReplaceKey RegReplaceKeyW
#else
#define RegReplaceKey RegReplaceKeyA #endif // !UNICODE
LSTATUS
RegRestoreKeyA
( );
LSTATUS
RegRestoreKeyW
( );
#ifdef UNICODE
#define RegRestoreKey RegRestoreKeyW
#else
#define RegRestoreKey RegRestoreKeyA #endif // !UNICODE
#if (WINVER >= 0x0600)
LSTATUS
RegRenameKey
( );
#endif /* WINVER >= 0x0600 */
LSTATUS
RegSaveKeyA
( );
LSTATUS
RegSaveKeyW
( );
#ifdef UNICODE
#define RegSaveKey RegSaveKeyW
#else
#define RegSaveKey RegSaveKeyA #endif // !UNICODE
LSTATUS
RegSetKeySecurity
( );
LSTATUS
RegSetValueA
( );
LSTATUS
RegSetValueW
( );
#ifdef UNICODE
#define RegSetValue RegSetValueW
#else
#define RegSetValue RegSetValueA #endif // !UNICODE
LSTATUS
RegSetValueExA
( );
LSTATUS
RegSetValueExW
( );
#ifdef UNICODE
#define RegSetValueEx RegSetValueExW
#else
#define RegSetValueEx RegSetValueExA #endif // !UNICODE
LSTATUS
RegUnLoadKeyA
( );
LSTATUS
RegUnLoadKeyW
( );
#ifdef UNICODE
#define RegUnLoadKey RegUnLoadKeyW
#else
#define RegUnLoadKey RegUnLoadKeyA #endif // !UNICODE
//
// Utils wrappers
//
#if _WIN32_WINNT >= 0x0600
LSTATUS
RegDeleteKeyValueA
( );
LSTATUS
RegDeleteKeyValueW
( );
#ifdef UNICODE
#define RegDeleteKeyValue RegDeleteKeyValueW
#else
#define RegDeleteKeyValue RegDeleteKeyValueA #endif // !UNICODE
LSTATUS
RegSetKeyValueA
( );
LSTATUS
RegSetKeyValueW
( );
#ifdef UNICODE
#define RegSetKeyValue RegSetKeyValueW
#else
#define RegSetKeyValue RegSetKeyValueA #endif // !UNICODE
LSTATUS
RegDeleteTreeA
( );
LSTATUS
RegDeleteTreeW
( );
#ifdef UNICODE
#define RegDeleteTree RegDeleteTreeW
#else
#define RegDeleteTree RegDeleteTreeA #endif // !UNICODE
LSTATUS
RegCopyTreeA
( );
#ifndef UNICODE
#define RegCopyTree RegCopyTreeA
#endif // !UNICODE
#endif // _WIN32_WINNT >= 0x0600
#if (_WIN32_WINNT >= 0x0502)
LSTATUS
RegGetValueA
(
_When_((dwFlags & 0x7F) == RRF_RT_REG_SZ || (dwFlags & 0x7F) == RRF_RT_REG_EXPAND_SZ || (dwFlags & 0x7F) == (RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ) || *pdwType == REG_SZ || *pdwType == REG_EXPAND_SZ, _Post_z_)
_When_((dwFlags & 0x7F) == RRF_RT_REG_MULTI_SZ || *pdwType == REG_MULTI_SZ, _Post_ _NullNull_terminated_)
);
LSTATUS
RegGetValueW
(
_When_((dwFlags & 0x7F) == RRF_RT_REG_SZ || (dwFlags & 0x7F) == RRF_RT_REG_EXPAND_SZ || (dwFlags & 0x7F) == (RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ) || *pdwType == REG_SZ || *pdwType == REG_EXPAND_SZ, _Post_z_)
_When_((dwFlags & 0x7F) == RRF_RT_REG_MULTI_SZ || *pdwType == REG_MULTI_SZ, _Post_ _NullNull_terminated_)
);
#ifdef UNICODE
#define RegGetValue RegGetValueW
#else
#define RegGetValue RegGetValueA #endif // !UNICODE
#endif // (_WIN32_WINNT >= 0x0502)
#if (_WIN32_WINNT >= 0x0600)
LSTATUS
RegCopyTreeW
( );
#ifdef UNICODE
#define RegCopyTree RegCopyTreeW #endif
LSTATUS
RegLoadMUIStringA
( );
LSTATUS
RegLoadMUIStringW
( );
#ifdef UNICODE
#define RegLoadMUIString RegLoadMUIStringW
#else
#define RegLoadMUIString RegLoadMUIStringA #endif // !UNICODE
LSTATUS
RegLoadAppKeyA
( );
LSTATUS
RegLoadAppKeyW
( );
#ifdef UNICODE
#define RegLoadAppKey RegLoadAppKeyW
#else
#define RegLoadAppKey RegLoadAppKeyA #endif // !UNICODE
#endif // _WIN32_WINNT >= 0x0600
//
// Remoteable System Shutdown APIs
//
__drv_preferredFunction("InitiateSystemShutdownEx", "Legacy API. Rearchitect to avoid Reboot")
BOOL
InitiateSystemShutdownA
( );
__drv_preferredFunction("InitiateSystemShutdownEx", "Legacy API. Rearchitect to avoid Reboot")
BOOL
InitiateSystemShutdownW
( );
#ifdef UNICODE
#define InitiateSystemShutdown InitiateSystemShutdownW
#else
#define InitiateSystemShutdown InitiateSystemShutdownA #endif // !UNICODE
BOOL
AbortSystemShutdownA
( );
BOOL
AbortSystemShutdownW
( );
#ifdef UNICODE
#define AbortSystemShutdown AbortSystemShutdownW
#else
#define AbortSystemShutdown AbortSystemShutdownA #endif // !UNICODE
//
// defines for InitiateSystemShutdownEx reason codes
//
#include <reason.h> // 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)
__drv_preferredFunction("a design alternative", "Rearchitect to avoid Reboot")
_When_(((dwReason==0 && lpMessage==0)) || dwReason>=0xd0000000, __drv_reportError("Requires a valid dwReason or lpMessage"))
BOOL
InitiateSystemShutdownExA
( );
__drv_preferredFunction("a design alternative", "Rearchitect to avoid Reboot")
_When_(((dwReason==0 && lpMessage==0)) || dwReason>=0xd0000000, __drv_reportError("Requires a valid dwReason or lpMessage"))
BOOL
InitiateSystemShutdownExW
( );
#ifdef UNICODE
#define InitiateSystemShutdownEx InitiateSystemShutdownExW
#else
#define InitiateSystemShutdownEx InitiateSystemShutdownExA #endif // !UNICODE
//
// Shutdown flags
//
#define SHUTDOWN_FORCE_OTHERS 0x00000001
#define SHUTDOWN_FORCE_SELF 0x00000002
#define SHUTDOWN_RESTART 0x00000004
#define SHUTDOWN_POWEROFF 0x00000008
#define SHUTDOWN_NOREBOOT 0x00000010
#define SHUTDOWN_GRACE_OVERRIDE 0x00000020
#define SHUTDOWN_INSTALL_UPDATES 0x00000040
#define SHUTDOWN_RESTARTAPPS 0x00000080
#define SHUTDOWN_SKIP_SVC_PRESHUTDOWN 0x00000100
#define SHUTDOWN_HYBRID 0x00000200
#define SHUTDOWN_RESTART_BOOTOPTIONS 0x00000400
#define SHUTDOWN_SOFT_REBOOT 0x00000800
#define SHUTDOWN_MOBILE_UI 0x00001000
DWORD
InitiateShutdownA
( );
DWORD
InitiateShutdownW
( );
#ifdef UNICODE
#define InitiateShutdown InitiateShutdownW
#else
#define InitiateShutdown InitiateShutdownA #endif // !UNICODE
DWORD
CheckForHiberboot
( );
LSTATUS
RegSaveKeyExA
( );
LSTATUS
RegSaveKeyExW
( );
#ifdef UNICODE
#define RegSaveKeyEx RegSaveKeyExW
#else
#define RegSaveKeyEx RegSaveKeyExA #endif // !UNICODE
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#pragma endregion
#if _MSC_VER >= 1200
#pragma warning(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // _WINREG_