| /* |
| Shell Registry Access |
| */ |
| #include <string.h> |
| #include <stdio.h> |
| #include "winerror.h" |
| #include "winreg.h" |
| #include "debugtools.h" |
| #include "winnls.h" |
| |
| #include "shellapi.h" |
| #include "shlobj.h" |
| #include "shell32_main.h" |
| #include "wine/undocshell.h" |
| |
| DEFAULT_DEBUG_CHANNEL(shell); |
| |
| /************************************************************************* |
| * SHRegOpenKeyA [SHELL32.506] |
| * |
| */ |
| HRESULT WINAPI SHRegOpenKeyA( |
| HKEY hKey, |
| LPSTR lpSubKey, |
| LPHKEY phkResult) |
| { |
| TRACE("(0x%08x, %s, %p)\n", hKey, debugstr_a(lpSubKey), phkResult); |
| return RegOpenKeyA(hKey, lpSubKey, phkResult); |
| } |
| |
| /************************************************************************* |
| * SHRegOpenKeyW [NT4.0:SHELL32.507] |
| * |
| */ |
| HRESULT WINAPI SHRegOpenKeyW ( |
| HKEY hkey, |
| LPCWSTR lpszSubKey, |
| LPHKEY retkey) |
| { |
| WARN("0x%04x %s %p\n",hkey,debugstr_w(lpszSubKey),retkey); |
| return RegOpenKeyW( hkey, lpszSubKey, retkey ); |
| } |
| |
| /************************************************************************* |
| * SHRegQueryValueExA [SHELL32.509] |
| * |
| */ |
| HRESULT WINAPI SHRegQueryValueExA( |
| HKEY hkey, |
| LPSTR lpValueName, |
| LPDWORD lpReserved, |
| LPDWORD lpType, |
| LPBYTE lpData, |
| LPDWORD lpcbData) |
| { |
| TRACE("0x%04x %s %p %p %p %p\n", hkey, lpValueName, lpReserved, lpType, lpData, lpcbData); |
| return RegQueryValueExA (hkey, lpValueName, lpReserved, lpType, lpData, lpcbData); |
| } |
| |
| /************************************************************************* |
| * SHRegQueryValueW [NT4.0:SHELL32.510] |
| * |
| */ |
| HRESULT WINAPI SHRegQueryValueW( |
| HKEY hkey, |
| LPWSTR lpszSubKey, |
| LPWSTR lpszData, |
| LPDWORD lpcbData ) |
| { |
| WARN("0x%04x %s %p %p semi-stub\n", |
| hkey, debugstr_w(lpszSubKey), lpszData, lpcbData); |
| return RegQueryValueW( hkey, lpszSubKey, lpszData, lpcbData ); |
| } |
| |
| /************************************************************************* |
| * SHRegQueryValueExW [NT4.0:SHELL32.511] |
| * |
| * FIXME |
| * if the datatype REG_EXPAND_SZ then expand the string and change |
| * *pdwType to REG_SZ. |
| */ |
| HRESULT WINAPI SHRegQueryValueExW ( |
| HKEY hkey, |
| LPWSTR pszValue, |
| LPDWORD pdwReserved, |
| LPDWORD pdwType, |
| LPVOID pvData, |
| LPDWORD pcbData) |
| { |
| DWORD ret; |
| WARN("0x%04x %s %p %p %p %p semi-stub\n", |
| hkey, debugstr_w(pszValue), pdwReserved, pdwType, pvData, pcbData); |
| ret = RegQueryValueExW ( hkey, pszValue, pdwReserved, pdwType, pvData, pcbData); |
| return ret; |
| } |
| |
| /************************************************************************* |
| * SHRegDeleteKeyA [SHELL32] |
| */ |
| HRESULT WINAPI SHRegDeleteKeyA( |
| HKEY hkey, |
| LPCSTR pszSubKey) |
| { |
| FIXME("hkey=0x%08x, %s\n", hkey, debugstr_a(pszSubKey)); |
| return 0; |
| } |
| |
| /************************************************************************* |
| * SHRegDeleteKeyW [SHELL32] |
| */ |
| HRESULT WINAPI SHRegDeleteKeyW( |
| HKEY hkey, |
| LPCWSTR pszSubKey) |
| { |
| FIXME("hkey=0x%08x, %s\n", hkey, debugstr_w(pszSubKey)); |
| return 0; |
| } |
| |
| /************************************************************************* |
| * SHRegCloseKey [NT4.0:SHELL32.505] |
| * |
| */ |
| HRESULT WINAPI SHRegCloseKey (HKEY hkey) |
| { |
| TRACE("0x%04x\n",hkey); |
| return RegCloseKey( hkey ); |
| } |
| |
| |
| /* 16-bit functions */ |
| |
| /* 0 and 1 are valid rootkeys in win16 shell.dll and are used by |
| * some programs. Do not remove those cases. -MM |
| */ |
| static inline void fix_win16_hkey( HKEY *hkey ) |
| { |
| if (*hkey == 0 || *hkey == 1) *hkey = HKEY_CLASSES_ROOT; |
| } |
| |
| /****************************************************************************** |
| * RegOpenKey16 [SHELL.1] |
| */ |
| DWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, LPHKEY retkey ) |
| { |
| fix_win16_hkey( &hkey ); |
| return RegOpenKeyA( hkey, name, retkey ); |
| } |
| |
| /****************************************************************************** |
| * RegCreateKey16 [SHELL.2] |
| */ |
| DWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, LPHKEY retkey ) |
| { |
| fix_win16_hkey( &hkey ); |
| return RegCreateKeyA( hkey, name, retkey ); |
| } |
| |
| /****************************************************************************** |
| * RegCloseKey16 [SHELL.3] |
| */ |
| DWORD WINAPI RegCloseKey16( HKEY hkey ) |
| { |
| fix_win16_hkey( &hkey ); |
| return RegCloseKey( hkey ); |
| } |
| |
| /****************************************************************************** |
| * RegDeleteKey16 [SHELL.4] |
| */ |
| DWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name ) |
| { |
| fix_win16_hkey( &hkey ); |
| return RegDeleteKeyA( hkey, name ); |
| } |
| |
| /****************************************************************************** |
| * RegSetValue16 [SHELL.5] |
| */ |
| DWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count ) |
| { |
| fix_win16_hkey( &hkey ); |
| return RegSetValueA( hkey, name, type, data, count ); |
| } |
| |
| /****************************************************************************** |
| * RegQueryValue16 [SHELL.6] |
| * |
| * NOTES |
| * Is this HACK still applicable? |
| * |
| * HACK |
| * The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just |
| * mask out the high 16 bit. This (not so much incidently) hopefully fixes |
| * Aldus FH4) |
| */ |
| DWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count ) |
| { |
| fix_win16_hkey( &hkey ); |
| if (count) *count &= 0xffff; |
| return RegQueryValueA( hkey, name, data, count ); |
| } |
| |
| /****************************************************************************** |
| * RegEnumKey16 [SHELL.7] |
| */ |
| DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len ) |
| { |
| fix_win16_hkey( &hkey ); |
| return RegEnumKeyA( hkey, index, name, name_len ); |
| } |