30#define NO_SHLWAPI_STREAM
35#include "wine/unicode.h"
73 static const WCHAR szkeyW[] = {
74 'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
75 'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'\\',
76 'I',
'n',
't',
'e',
'r',
'n',
'e',
't',
' ',
'E',
'x',
'p',
'l',
'o',
'r',
'e',
'r',
'\\',
77 'I',
'n',
't',
'e',
'r',
'n',
'a',
't',
'i',
'o',
'n',
'a',
'l',0};
79 'A',
'c',
'c',
'e',
'p',
't',
'L',
'a',
'n',
'g',
'u',
'a',
'g',
'e',0};
80 DWORD mystrlen, mytype;
87 TRACE(
"(%p, %p) *%p: %d\n", langbuf, buflen, buflen, buflen ? *buflen : -1);
89 if(!langbuf || !buflen || !*buflen)
92 mystrlen = (*buflen > 20) ? *buflen : 20 ;
101 if (!lres && (*buflen >
len)) {
133 DWORD buflenW, convlen;
136 TRACE(
"(%p, %p) *%p: %d\n", langbuf, buflen, buflen, buflen ? *buflen : -1);
138 if(!langbuf || !buflen || !*buflen)
return E_FAIL;
152 if (convlen < *buflen)
154 langbuf[convlen] = 0;
162 *buflen = buflenW ? convlen : 0;
311 while (xmove->
piid) {
315 TRACE(
"matched, returning (%p)\n", a_vtbl);
317 IUnknown_AddRef(a_vtbl);
325 TRACE(
"returning first for IUnknown (%p)\n", a_vtbl);
327 IUnknown_AddRef(a_vtbl);
350#define REG_HKLM FALSE
403 phNewUSKey, fIgnoreHKCU);
414 LONG ret2, ret1 = ~ERROR_SUCCESS;
418 hRelativeUSKey, phNewUSKey, fIgnoreHKCU);
454 TRACE(
"one or more opens failed: HKCU=%d HKLM=%d\n", ret1, ret2);
553 relative_key, new_uskey,
flags);
583 *new_uskey = ret_key;
681 TRACE(
"(%p, 0x%08x, %p, %p, %p, %p, %p, 0x%08x)\n", hUSKey, dwIndex,
687 return RegEnumValueA(dokey, dwIndex, pszValueName, pcchValueNameLen,
694 return RegEnumValueA(dokey, dwIndex, pszValueName, pcchValueNameLen,
697 FIXME(
"no support for SHREGENUM_BOTH\n");
712 TRACE(
"(%p, 0x%08x, %p, %p, %p, %p, %p, 0x%08x)\n", hUSKey, dwIndex,
718 return RegEnumValueW(dokey, dwIndex, pszValueName, pcchValueNameLen,
725 return RegEnumValueW(dokey, dwIndex, pszValueName, pcchValueNameLen,
728 FIXME(
"no support for SHREGENUM_BOTH\n");
760 TRACE(
"HKCU RegQueryValue returned %08x\n",
ret);
768 TRACE(
"HKLM RegQueryValue returned %08x\n",
ret);
777 for(
i=0;
i<maxmove;
i++) *
dst++ = *
src++;
779 TRACE(
"setting default data\n");
811 TRACE(
"HKCU RegQueryValue returned %08x\n",
ret);
819 TRACE(
"HKLM RegQueryValue returned %08x\n",
ret);
828 for(
i=0;
i<maxmove;
i++) *
dst++ = *
src++;
830 TRACE(
"setting default data\n");
857 DWORD wDefaultDataSize)
863 TRACE(
"key '%s', value '%s', datalen %d, %s\n",
865 (flagIgnoreHKCU) ?
"Ignoring HKCU" :
"Tries HKCU then HKLM");
870 pcbData, flagIgnoreHKCU, pDefaultData,
890 DWORD wDefaultDataSize)
896 TRACE(
"key '%s', value '%s', datalen %d, %s\n",
898 (flagIgnoreHKCU) ?
"Ignoring HKCU" :
"Tries HKCU then HKLM");
903 pcbData, flagIgnoreHKCU, pDefaultData,
1012 TRACE(
"key '%s', value '%s', %s\n",
1014 (fIgnoreHKCU) ?
"Ignoring HKCU" :
"Tries HKCU then HKLM");
1019 fIgnoreHKCU, 0, 0)) {
1039 FIXME(
"Unsupported registry data type %d\n",
type);
1042 TRACE(
"got value (type=%d), returning <%s>\n",
type,
1043 (
ret) ?
"TRUE" :
"FALSE");
1047 TRACE(
"returning default data <%s>\n",
1048 (
ret) ?
"TRUE" :
"FALSE");
1064 static const WCHAR wYES[]= {
'Y',
'E',
'S',
'\0'};
1065 static const WCHAR wTRUE[]= {
'T',
'R',
'U',
'E',
'\0'};
1066 static const WCHAR wNO[]= {
'N',
'O',
'\0'};
1067 static const WCHAR wFALSE[]={
'F',
'A',
'L',
'S',
'E',
'\0'};
1072 TRACE(
"key '%s', value '%s', %s\n",
1074 (fIgnoreHKCU) ?
"Ignoring HKCU" :
"Tries HKCU then HKLM");
1079 fIgnoreHKCU, 0, 0)) {
1099 FIXME(
"Unsupported registry data type %d\n",
type);
1102 TRACE(
"got value (type=%d), returning <%s>\n",
type,
1103 (
ret) ?
"TRUE" :
"FALSE");
1107 TRACE(
"returning default data <%s>\n",
1108 (
ret) ?
"TRUE" :
"FALSE");
1133 TRACE(
"(%p,%p,%p,%p,%p,%d)\n",
1134 hUSKey,pcSubKeys,pcchMaxSubKeyLen,pcValues,
1135 pcchMaxValueNameLen,enumRegFlags);
1142 pcSubKeys, pcchMaxSubKeyLen, 0,
1143 pcValues, pcchMaxValueNameLen, 0, 0, 0);
1152 pcSubKeys, pcchMaxSubKeyLen, 0,
1153 pcValues, pcchMaxValueNameLen, 0, 0, 0);
1174 TRACE(
"(%p,%p,%p,%p,%p,%d)\n",
1175 hUSKey,pcSubKeys,pcchMaxSubKeyLen,pcValues,
1176 pcchMaxValueNameLen,enumRegFlags);
1183 pcSubKeys, pcchMaxSubKeyLen, 0,
1184 pcValues, pcchMaxValueNameLen, 0, 0, 0);
1193 pcSubKeys, pcchMaxSubKeyLen, 0,
1194 pcValues, pcchMaxValueNameLen, 0, 0, 0);
1217 TRACE(
"(%p,%d,%p,%p(%d),%d)\n",
1218 hUSKey, dwIndex, pszName, pcchValueNameLen,
1219 *pcchValueNameLen, enumRegFlags);
1224 return RegEnumKeyExA(dokey, dwIndex, pszName, pcchValueNameLen,
1231 return RegEnumKeyExA(dokey, dwIndex, pszName, pcchValueNameLen,
1234 FIXME(
"no support for SHREGENUM_BOTH\n");
1252 TRACE(
"(%p,%d,%p,%p(%d),%d)\n",
1253 hUSKey, dwIndex, pszName, pcchValueNameLen,
1254 *pcchValueNameLen, enumRegFlags);
1259 return RegEnumKeyExW(dokey, dwIndex, pszName, pcchValueNameLen,
1266 return RegEnumKeyExW(dokey, dwIndex, pszName, pcchValueNameLen,
1269 FIXME(
"no support for SHREGENUM_BOTH\n");
1332 TRACE(
"Creating HKCU key, ret = %d\n",
ret);
1347 TRACE(
"Writing HKCU value, ret = %d\n",
ret);
1358 TRACE(
"Creating HKLM key, ret = %d\n",
ret);
1373 TRACE(
"Writing HKLM value, ret = %d\n",
ret);
PRTL_UNICODE_STRING_BUFFER Path
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define RegCloseKey(hKey)
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INVALID_FUNCTION
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryInfoKeyA(HKEY hKey, LPSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegEnumValueA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpdwReserved, _Out_opt_ LPDWORD lpdwType, _Out_opt_ LPBYTE lpData, _Inout_opt_ LPDWORD lpcbData)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
LONG WINAPI RegEnumKeyExA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define HeapFree(x, y, z)
#define WideCharToMultiByte
#define MultiByteToWideChar
BOOL NTAPI IsBadWritePtr(IN LPVOID lp, IN UINT_PTR ucb)
BOOL WINAPI GetStringTypeA(LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
BOOL WINAPI GetStringTypeW(DWORD type, LPCWSTR src, INT count, LPWORD chartype)
LCID WINAPI GetUserDefaultLCID(void)
LCID WINAPI GetSystemDefaultLCID(void)
HRESULT WINAPI LcidToRfc1766W(LCID lcid, LPWSTR pszRfc1766, INT nChar)
HKEY WINAPI SHRegDuplicateHKey(HKEY hKey)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
int const JOCTET unsigned int datalen
BOOL WINAPI IsCharXDigitW(WCHAR wc)
LONG WINAPI SHRegOpenUSKeyW(LPCWSTR Path, REGSAM AccessType, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU)
LONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY hUSKey, LPDWORD pcSubKeys, LPDWORD pcchMaxSubKeyLen, LPDWORD pcValues, LPDWORD pcchMaxValueNameLen, SHREGENUM_FLAGS enumRegFlags)
struct SHUSKEY * LPSHUSKEY
HRESULT WINAPI GetAcceptLanguagesA(LPSTR langbuf, LPDWORD buflen)
LONG WINAPI SHRegQueryUSValueA(HUSKEY hUSKey, LPCSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize)
static HKEY REG_GetHKEYFromHUSKEY(HUSKEY hUSKey, BOOL which)
LONG WINAPI SHRegEnumUSKeyA(HUSKEY hUSKey, DWORD dwIndex, LPSTR pszName, LPDWORD pcchValueNameLen, SHREGENUM_FLAGS enumRegFlags)
LONG WINAPI SHRegGetUSValueA(LPCSTR pSubKey, LPCSTR pValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData, BOOL flagIgnoreHKCU, LPVOID pDefaultData, DWORD wDefaultDataSize)
BOOL WINAPI IsCharSpaceA(CHAR c)
LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY hUSKey, LPCSTR pszValue, SHREGDEL_FLAGS delRegFlags)
LONG WINAPI SHRegWriteUSValueA(HUSKEY hUSKey, LPCSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
LONG WINAPI SHRegEnumUSKeyW(HUSKEY hUSKey, DWORD dwIndex, LPWSTR pszName, LPDWORD pcchValueNameLen, SHREGENUM_FLAGS enumRegFlags)
LONG WINAPI SHRegSetUSValueW(LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
LONG WINAPI SHRegOpenUSKeyA(LPCSTR Path, REGSAM AccessType, HUSKEY hRelativeUSKey, PHUSKEY phNewUSKey, BOOL fIgnoreHKCU)
LONG WINAPI SHRegCreateUSKeyA(LPCSTR path, REGSAM samDesired, HUSKEY relative_key, PHUSKEY new_uskey, DWORD flags)
LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY hUSKey, LPCWSTR pszValue, SHREGDEL_FLAGS delRegFlags)
BOOL WINAPI IsCharCntrlW(WCHAR wc)
LONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY hUSKey, LPDWORD pcSubKeys, LPDWORD pcchMaxSubKeyLen, LPDWORD pcValues, LPDWORD pcchMaxValueNameLen, SHREGENUM_FLAGS enumRegFlags)
LONG WINAPI SHRegWriteUSValueW(HUSKEY hUSKey, LPCWSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
LONG WINAPI SHRegSetUSValueA(LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwType, LPVOID pvData, DWORD cbData, DWORD dwFlags)
LONG WINAPI SHRegCloseUSKey(HUSKEY hUSKey)
LONG WINAPI SHRegCreateUSKeyW(LPCWSTR path, REGSAM samDesired, HUSKEY relative_key, PHUSKEY new_uskey, DWORD flags)
BOOL WINAPI SHRegGetBoolUSValueA(LPCSTR pszSubKey, LPCSTR pszValue, BOOL fIgnoreHKCU, BOOL fDefault)
static WCHAR * heap_strdupAtoW(LPCSTR str)
HRESULT WINAPI QISearch(void *base, const QITAB *table, REFIID riid, void **ppv)
BOOL WINAPI IsCharDigitW(WCHAR wc)
BOOL WINAPI IsCharBlankW(WCHAR wc)
LONG WINAPI SHRegGetUSValueW(LPCWSTR pSubKey, LPCWSTR pValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData, BOOL flagIgnoreHKCU, LPVOID pDefaultData, DWORD wDefaultDataSize)
LONG WINAPI SHRegEnumUSValueW(HUSKEY hUSKey, DWORD dwIndex, LPWSTR pszValueName, LPDWORD pcchValueNameLen, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, SHREGENUM_FLAGS enumRegFlags)
BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR pszSubKey, LPCWSTR pszValue, BOOL fIgnoreHKCU, BOOL fDefault)
LONG WINAPI SHRegEnumUSValueA(HUSKEY hUSKey, DWORD dwIndex, LPSTR pszValueName, LPDWORD pcchValueNameLen, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, SHREGENUM_FLAGS enumRegFlags)
BOOL WINAPI IsCharPunctW(WCHAR wc)
LONG WINAPI SHRegDeleteUSValueA(HUSKEY hUSKey, LPCSTR pszValue, SHREGDEL_FLAGS delRegFlags)
HRESULT WINAPI GetAcceptLanguagesW(LPWSTR langbuf, LPDWORD buflen)
LONG WINAPI SHRegQueryUSValueW(HUSKEY hUSKey, LPCWSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData, BOOL fIgnoreHKCU, LPVOID pvDefaultData, DWORD dwDefaultDataSize)
LONG WINAPI SHRegDeleteUSValueW(HUSKEY hUSKey, LPCWSTR pszValue, SHREGDEL_FLAGS delRegFlags)
BOOL WINAPI IsCharSpaceW(WCHAR wc)
#define memcpy(s1, s2, n)
static const WCHAR pathW[]
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
#define IsEqualIID(riid1, riid2)
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
#define SHREGSET_FORCE_HKLM
_In_opt_ LPCSTR _In_opt_ LPCSTR _In_ SRRF _Out_opt_ LPDWORD pdwType
_In_opt_ _Inout_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD _In_ _In_ DWORD dwDefaultDataSize
_In_ _Out_writes_opt_ pcchValueName _Inout_opt_ LPDWORD _Out_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD pcbData
_In_opt_ LPCSTR pszSubKey
#define SHREGSET_FORCE_HKCU
_In_opt_ LPCSTR _In_opt_ LPCSTR pszValue
#define E_NOT_SUFFICIENT_BUFFER
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_CONFIG
#define HKEY_CURRENT_USER
#define HKEY_PERFORMANCE_DATA
#define HKEY_CLASSES_ROOT