+2017-12-20 Sebastián Puebla <spuebla@users.sourceforge.net>
+
+ Update registry management API, per issue [#2262].
+
+ * include/winreg.h: Merge changes from 4.1-dev branch.
+ (REG_LATEST_FORMAT, REG_NO_COMPRESSION, REG_OPTION_BACKUP_RESTORE)
+ (REG_STANDARD_FORMAT, RRF_RT_ANY, RRF_RT_DWORD, RRF_RT_QWORD)
+ (RRF_RT_REG_BINARY, RRF_RT_REG_DWORD, RRF_RT_REG_EXPAND_SZ)
+ (RRF_RT_REG_MULTI_SZ, RRF_RT_REG_NONE, RRF_RT_REG_QWORD, RRF_RT_REG_SZ)
+ (RRF_NOEXPAND, RRF_SUBKEY_WOW6464KEY, RRF_SUBKEY_WOW6432KEY)
+ (RRF_ZEROONFAILURE): New manifest constants; define them.
+ (RegDisablePredefinedCache, RegOpenCurrentUser, RegOpenUserClassesRoot)
+ (RegOverridePredefKey): Add previously omitted function prototypes.
+ [_WIN32_WINNT >= _WIN32_WINNT_WINXP] (RegSaveKeyEx): Define...
+ [!defined UNICODE] (__AW): ...mapping it for SBCS/MBCS case, or...
+ [defined UNICODE] (__AW): ...for UTF-16LE case to either one of...
+ (RegSaveKeyExA, RegSaveKeyExW): ...these, respectively, and...
+ [_WIN32_WINNT >= _WIN32_WINNT_WINXP]: ...declare function prototypes.
+ [_WIN32_WINNT >= _WIN32_WINNT_WS03] (RegDisableReflectionKey)
+ (RegEnableReflectionKey, RegQueryReflectionKey): Declare prototypes.
+ [_WIN32_WINNT >= _WIN32_WINNT_VISTA] (RegCopyTreeA, RegCopyTreeW)
+ (RegCreateKeyTransactedA, RegCreateKeyTransactedW)
+ (RegDeleteKeyTransactedA, RegDeleteKeyTransactedW)
+ (RegDeleteKeyValueA, RegDeleteKeyValueW)
+ (RegDeleteTreeA, RegDeleteTreeW, RegDisablePredefinedCacheEx)
+ (RegGetValueA, RegGetValueW, RegLoadMUIStringA, RegLoadMUIStringW)
+ (RegOpenKeyTransactedA, RegOpenKeyTransactedW)
+ (RegSetKeyValueA, RegSetKeyValueW): Declare prototypes.
+ [_WIN32_WINNT >= _WIN32_WINNT_VISTA] (RegCopyTree)
+ (RegCreateKeyTransacted, RegDeleteKeyTransacted, RegDeleteKeyValue)
+ (RegDeleteTree, RegGetValue, RegLoadMUIString, RegOpenKeyTransacted)
+ (RegSetKeyValue): Define, mapping each to its respective function...
+ [!defined UNICODE] (__AW): ...for the SBCS/MBCS case, or...
+ [defined UNICODE] (__AW): ...for the UTF-16LE case.
+
+ * lib/kernel32.def (RegDeleteTreeA@8, RegDeleteTreeW@8)
+ (RegDisablePredefinedCacheEx@0, RegGetValueA@28, RegGetValueW@28)
+ (RegLoadMUIStringA@28, RegLoadMUIStringW@28, RegSaveKeyExA@16)
+ (RegSaveKeyExW@16): Remove them; relocate them to...
+ * lib/advapi32.def (RegDeleteTreeA@8, RegDeleteTreeW@8)
+ (RegDisablePredefinedCacheEx@0, RegGetValueA@28, RegGetValueW@28)
+ (RegLoadMUIStringA@28, RegLoadMUIStringW@28, RegSaveKeyExA@16)
+ (RegSaveKeyExW@16): ...their correct location, here.
+ (RegCopyTreeA@12, RegCopyTreeW@12, RegQueryReflectionKey@8)
+ (RegCreateKeyTransactedA@44, RegCreateKeyTransactedW@44)
+ (RegDeleteKeyTransactedA@24, RegDeleteKeyTransactedW@24)
+ (RegDeleteKeyValueA@12, RegDeleteKeyValueW@12)
+ (RegDisableReflectionKey@4, RegEnableReflectionKey@4)
+ (RegOpenKeyTransactedA@28, RegOpenKeyTransactedW@28)
+ (RegSetKeyValueA@24, RegSetKeyValueW@24): Add these.
+
2017-12-16 Keith Marshall <keith@users.osdn.me>
Provide default definition for _WIN32_IE feature test macro.
+/**
+ * @file winreg.h
+ * Copyright 2012, 2013 MinGW.org project
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
#ifndef _WINREG_H
-#define _WINREG_H
-#if __GNUC__ >= 3
#pragma GCC system_header
-#endif
+#define _WINREG_H
+#include <_mingw.h>
#ifndef WINADVAPI
#define WINADVAPI
#ifdef __cplusplus
extern "C" {
#endif
+
+#include <reason.h>
+
#define HKEY_CLASSES_ROOT ((HKEY)0x80000000)
#define HKEY_CURRENT_USER ((HKEY)0x80000001)
#define HKEY_LOCAL_MACHINE ((HKEY)0x80000002)
#define HKEY_DYN_DATA ((HKEY)0x80000006)
#define REG_OPTION_VOLATILE 1
#define REG_OPTION_NON_VOLATILE 0
+/* https://msdn.microsoft.com/en-us/library/aa965882%28v=vs.85%29.aspx */
+#define REG_OPTION_BACKUP_RESTORE 4
#define REG_CREATED_NEW_KEY 1
#define REG_OPENED_EXISTING_KEY 2
#define REG_NONE 0
#define REG_NOTIFY_CHANGE_ATTRIBUTES 2
#define REG_NOTIFY_CHANGE_LAST_SET 4
#define REG_NOTIFY_CHANGE_SECURITY 8
+/* https://msdn.microsoft.com/en-us/library/ms724868%28v=vs.85%29.aspx */
+#define RRF_RT_REG_NONE 0x00000001
+#define RRF_RT_REG_SZ 0x00000002
+#define RRF_RT_REG_EXPAND_SZ 0x00000004
+#define RRF_RT_REG_BINARY 0x00000008
+#define RRF_RT_REG_DWORD 0x00000010
+#define RRF_RT_DWORD 0x00000018
+#define RRF_RT_REG_MULTI_SZ 0x00000020
+#define RRF_RT_REG_QWORD 0x00000040
+#define RRF_RT_QWORD 0x00000048
+#define RRF_RT_ANY 0x0000ffff
+#define RRF_SUBKEY_WOW6464KEY 0x00010000
+#define RRF_SUBKEY_WOW6432KEY 0x00020000
+#define RRF_NOEXPAND 0x10000000
+#define RRF_ZEROONFAILURE 0x20000000
+/* https://msdn.microsoft.com/en-us/library/ms724919%28v=vs.85%29.aspx */
+#define REG_STANDARD_FORMAT 1
+#define REG_LATEST_FORMAT 2
+#define REG_NO_COMPRESSION 4
#ifndef RC_INVOKED
typedef ACCESS_MASK REGSAM;
WINADVAPI LONG WINAPI RegCreateKeyW(HKEY,LPCWSTR,PHKEY);
WINADVAPI LONG WINAPI RegDeleteKeyA(HKEY,LPCSTR);
WINADVAPI LONG WINAPI RegDeleteKeyW(HKEY,LPCWSTR);
-#if (WINVER >= 0x0502)
-WINADVAPI LONG WINAPI RegDeleteKeyExA(HKEY,LPCSTR,REGSAM,DWORD);
-WINADVAPI LONG WINAPI RegDeleteKeyExW(HKEY,LPCWSTR,REGSAM,DWORD);
-#endif
+
WINADVAPI LONG WINAPI RegDeleteValueA(HKEY,LPCSTR);
WINADVAPI LONG WINAPI RegDeleteValueW(HKEY,LPCWSTR);
+/* https://msdn.microsoft.com/en-us/library/ms724854%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegDisablePredefinedCache(void);
WINADVAPI LONG WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD);
WINADVAPI LONG WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD);
WINADVAPI LONG WINAPI RegEnumKeyExA(HKEY,DWORD,LPSTR,PDWORD,PDWORD,LPSTR,PDWORD,PFILETIME);
WINADVAPI LONG WINAPI RegLoadKeyA(HKEY,LPCSTR,LPCSTR);
WINADVAPI LONG WINAPI RegLoadKeyW(HKEY,LPCWSTR,LPCWSTR);
WINADVAPI LONG WINAPI RegNotifyChangeKeyValue(HKEY,BOOL,DWORD,HANDLE,BOOL);
+/* https://msdn.microsoft.com/en-us/library/ms724894%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegOpenCurrentUser(REGSAM,PHKEY);
WINADVAPI LONG WINAPI RegOpenKeyA(HKEY,LPCSTR,PHKEY);
WINADVAPI LONG WINAPI RegOpenKeyExA(HKEY,LPCSTR,DWORD,REGSAM,PHKEY);
WINADVAPI LONG WINAPI RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY);
WINADVAPI LONG WINAPI RegOpenKeyW(HKEY,LPCWSTR,PHKEY);
+/* https://msdn.microsoft.com/en-us/library/ms724899%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegOpenUserClassesRoot(HANDLE,DWORD,REGSAM,PHKEY);
+/* https://msdn.microsoft.com/en-us/library/ms724901%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegOverridePredefKey(HKEY,HKEY);
WINADVAPI LONG WINAPI RegQueryInfoKeyA(HKEY,LPSTR,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PFILETIME);
WINADVAPI LONG WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PFILETIME);
WINADVAPI LONG WINAPI RegQueryMultipleValuesA(HKEY,PVALENTA,DWORD,LPSTR,LPDWORD);
WINADVAPI LONG WINAPI RegUnLoadKeyA(HKEY,LPCSTR);
WINADVAPI LONG WINAPI RegUnLoadKeyW(HKEY,LPCWSTR);
-#ifdef UNICODE
-typedef VALENTW VALENT,*PVALENT;
-#define AbortSystemShutdown AbortSystemShutdownW
-#define InitiateSystemShutdown InitiateSystemShutdownW
-#define RegConnectRegistry RegConnectRegistryW
-#define RegCreateKey RegCreateKeyW
-#define RegCreateKeyEx RegCreateKeyExW
-#define RegDeleteKey RegDeleteKeyW
-#if (WINVER >= 0x0502)
-#define RegDeleteKeyEx RegDeleteKeyExW
-#endif
-#define RegDeleteValue RegDeleteValueW
-#define RegEnumKey RegEnumKeyW
-#define RegEnumKeyEx RegEnumKeyExW
-#define RegEnumValue RegEnumValueW
-#define RegLoadKey RegLoadKeyW
-#define RegOpenKey RegOpenKeyW
-#define RegOpenKeyEx RegOpenKeyExW
-#define RegQueryInfoKey RegQueryInfoKeyW
-#define RegQueryMultipleValues RegQueryMultipleValuesW
-#define RegQueryValue RegQueryValueW
-#define RegQueryValueEx RegQueryValueExW
-#define RegReplaceKey RegReplaceKeyW
-#define RegRestoreKey RegRestoreKeyW
-#define RegSaveKey RegSaveKeyW
-#define RegSetValue RegSetValueW
-#define RegSetValueEx RegSetValueExW
-#define RegUnLoadKey RegUnLoadKeyW
-#else
-typedef VALENTA VALENT,*PVALENT;
-#define AbortSystemShutdown AbortSystemShutdownA
-#define InitiateSystemShutdown InitiateSystemShutdownA
-#define RegConnectRegistry RegConnectRegistryA
-#define RegCreateKey RegCreateKeyA
-#define RegCreateKeyEx RegCreateKeyExA
-#define RegDeleteKey RegDeleteKeyA
-#if (WINVER >= 0x0502)
-#define RegDeleteKeyEx RegDeleteKeyExA
-#endif
-#define RegDeleteValue RegDeleteValueA
-#define RegEnumKey RegEnumKeyA
-#define RegEnumKeyEx RegEnumKeyExA
-#define RegEnumValue RegEnumValueA
-#define RegLoadKey RegLoadKeyA
-#define RegOpenKey RegOpenKeyA
-#define RegOpenKeyEx RegOpenKeyExA
-#define RegQueryInfoKey RegQueryInfoKeyA
-#define RegQueryMultipleValues RegQueryMultipleValuesA
-#define RegQueryValue RegQueryValueA
-#define RegQueryValueEx RegQueryValueExA
-#define RegReplaceKey RegReplaceKeyA
-#define RegRestoreKey RegRestoreKeyA
-#define RegSaveKey RegSaveKeyA
-#define RegSetValue RegSetValueA
-#define RegSetValueEx RegSetValueExA
-#define RegUnLoadKey RegUnLoadKeyA
-#endif
-#endif
+typedef __AW(VALENT) VALENT,*PVALENT;
+#define AbortSystemShutdown __AW(AbortSystemShutdown)
+#define InitiateSystemShutdown __AW(InitiateSystemShutdown)
+#define RegConnectRegistry __AW(RegConnectRegistry)
+#define RegCreateKey __AW(RegCreateKey)
+#define RegCreateKeyEx __AW(RegCreateKeyEx)
+#define RegDeleteKey __AW(RegDeleteKey)
+
+#define RegDeleteValue __AW(RegDeleteValue)
+#define RegEnumKey __AW(RegEnumKey)
+#define RegEnumKeyEx __AW(RegEnumKeyEx)
+#define RegEnumValue __AW(RegEnumValue)
+#define RegLoadKey __AW(RegLoadKey)
+#define RegOpenKey __AW(RegOpenKey)
+#define RegOpenKeyEx __AW(RegOpenKeyEx)
+#define RegQueryInfoKey __AW(RegQueryInfoKey)
+#define RegQueryMultipleValues __AW(RegQueryMultipleValues)
+#define RegQueryValue __AW(RegQueryValue)
+#define RegQueryValueEx __AW(RegQueryValueEx)
+#define RegReplaceKey __AW(RegReplaceKey)
+#define RegRestoreKey __AW(RegRestoreKey)
+#define RegSaveKey __AW(RegSaveKey)
+#define RegSetValue __AW(RegSetValue)
+#define RegSetValueEx __AW(RegSetValueEx)
+#define RegUnLoadKey __AW(RegUnLoadKey)
+
+#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
+WINADVAPI LONG WINAPI RegDeleteKeyExA(HKEY,LPCSTR,REGSAM,DWORD);
+WINADVAPI LONG WINAPI RegDeleteKeyExW(HKEY,LPCWSTR,REGSAM,DWORD);
+#define RegDeleteKeyEx __AW(RegDeleteKeyEx)
+#endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN2K) */
+
+#if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
+/* https://msdn.microsoft.com/en-us/library/ms724919%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegSaveKeyExA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES,DWORD);
+WINADVAPI LONG WINAPI RegSaveKeyExW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES,DWORD);
+#define RegSaveKeyEx __AW(RegSaveKeyEx)
+#endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINXP) */
+
+#if (_WIN32_WINNT >= _WIN32_WINNT_WS03)
+/* https://msdn.microsoft.com/en-us/library/ms724858%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegDisableReflectionKey(HKEY);
+/* https://msdn.microsoft.com/en-us/library/ms724859%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegEnableReflectionKey(HKEY);
+/* https://msdn.microsoft.com/en-us/library/ms724907%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegQueryReflectionKey(HKEY,BOOL*);
+#endif /* (_WIN32_WINNT >= _WIN32_WINNT_WS03) */
+
+#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+/* https://msdn.microsoft.com/en-us/library/aa379768%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegCopyTreeA(HKEY,LPCSTR,HKEY);
+WINADVAPI LONG WINAPI RegCopyTreeW(HKEY,LPCWSTR,HKEY);
+/* https://msdn.microsoft.com/en-us/library/aa965882%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegCreateKeyTransactedA(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,const LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD,HANDLE,PVOID);
+WINADVAPI LONG WINAPI RegCreateKeyTransactedW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,const LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD,HANDLE,PVOID);
+/* https://msdn.microsoft.com/en-us/library/aa965883%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegDeleteKeyTransactedA(HKEY,LPCSTR,REGSAM,DWORD,HANDLE,PVOID);
+WINADVAPI LONG WINAPI RegDeleteKeyTransactedW(HKEY,LPCWSTR,REGSAM,DWORD,HANDLE,PVOID);
+/* https://msdn.microsoft.com/en-us/library/ms724848%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegDeleteKeyValueA(HKEY,LPCSTR,LPCSTR);
+WINADVAPI LONG WINAPI RegDeleteKeyValueW(HKEY,LPCWSTR,LPCWSTR);
+/* https://msdn.microsoft.com/en-us/library/aa379776%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegDeleteTreeA(HKEY,LPCSTR);
+WINADVAPI LONG WINAPI RegDeleteTreeW(HKEY,LPCWSTR);
+/* https://msdn.microsoft.com/en-us/library/ms724855%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegDisablePredefinedCacheEx(void);
+/* https://msdn.microsoft.com/en-us/library/ms724868%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegGetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD);
+WINADVAPI LONG WINAPI RegGetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPDWORD,PVOID,LPDWORD);
+/* https://msdn.microsoft.com/en-us/library/ms724890%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegLoadMUIStringA(HKEY,LPCSTR,LPSTR,DWORD,LPDWORD,DWORD,LPCSTR);
+WINADVAPI LONG WINAPI RegLoadMUIStringW(HKEY,LPCWSTR,LPWSTR,DWORD,LPDWORD,DWORD,LPCWSTR);
+/* https://msdn.microsoft.com/en-us/library/aa965886%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegOpenKeyTransactedA(HKEY,LPCSTR,DWORD,REGSAM,PHKEY,HANDLE,PVOID);
+WINADVAPI LONG WINAPI RegOpenKeyTransactedW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY,HANDLE,PVOID);
+/* https://msdn.microsoft.com/en-us/library/ms724921%28v=vs.85%29.aspx */
+WINADVAPI LONG WINAPI RegSetKeyValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD);
+WINADVAPI LONG WINAPI RegSetKeyValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD);
+
+#define RegCopyTree __AW(RegCopyTree)
+#define RegCreateKeyTransacted __AW(RegCreateKeyTransacted)
+#define RegDeleteKeyTransacted __AW(RegDeleteKeyTransacted)
+#define RegDeleteKeyValue __AW(RegDeleteKeyValue)
+#define RegDeleteTree __AW(RegDeleteTree)
+#define RegGetValue __AW(RegGetValue)
+#define RegLoadMUIString __AW(RegLoadMUIString)
+#define RegOpenKeyTransacted __AW(RegOpenKeyTransacted)
+#define RegSetKeyValue __AW(RegSetKeyValue)
+#endif /* (_WIN32_WINNT >= _WIN32_WINNT_VISTA) */
+
+#endif /* ! RC_INVOKED */
+
#ifdef __cplusplus
}
#endif
+
#endif