2 * Shell Registry Access
4 * Copyright 2000 Juergen Schmied
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
32 #include "undocshell.h"
33 #include "wine/winbase16.h"
34 #include "shell32_main.h"
36 #include "wine/debug.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(shell);
40 /*************************************************************************
41 * SHRegOpenKeyA [SHELL32.506]
44 HRESULT WINAPI SHRegOpenKeyA(
49 TRACE("(0x%08x, %s, %p)\n", hKey, debugstr_a(lpSubKey), phkResult);
50 return RegOpenKeyA(hKey, lpSubKey, phkResult);
53 /*************************************************************************
54 * SHRegOpenKeyW [SHELL32.507] NT 4.0
57 HRESULT WINAPI SHRegOpenKeyW (
62 WARN("0x%04x %s %p\n",hkey,debugstr_w(lpszSubKey),retkey);
63 return RegOpenKeyW( hkey, lpszSubKey, retkey );
66 /*************************************************************************
67 * SHRegQueryValueExA [SHELL32.509]
70 HRESULT WINAPI SHRegQueryValueExA(
78 TRACE("0x%04x %s %p %p %p %p\n", hkey, lpValueName, lpReserved, lpType, lpData, lpcbData);
79 return RegQueryValueExA (hkey, lpValueName, lpReserved, lpType, lpData, lpcbData);
82 /*************************************************************************
83 * SHRegQueryValueW [SHELL32.510] NT4.0
86 HRESULT WINAPI SHRegQueryValueW(
92 WARN("0x%04x %s %p %p semi-stub\n",
93 hkey, debugstr_w(lpszSubKey), lpszData, lpcbData);
94 return RegQueryValueW( hkey, lpszSubKey, lpszData, lpcbData );
97 /*************************************************************************
98 * SHRegQueryValueExW [SHELL32.511] NT4.0
101 * if the datatype REG_EXPAND_SZ then expand the string and change
102 * *pdwType to REG_SZ.
104 HRESULT WINAPI SHRegQueryValueExW (
113 WARN("0x%04x %s %p %p %p %p semi-stub\n",
114 hkey, debugstr_w(pszValue), pdwReserved, pdwType, pvData, pcbData);
115 ret = RegQueryValueExW ( hkey, pszValue, pdwReserved, pdwType, pvData, pcbData);
119 /*************************************************************************
120 * SHRegDeleteKeyA [SHELL32.?]
122 HRESULT WINAPI SHRegDeleteKeyA(
126 FIXME("hkey=0x%08x, %s\n", hkey, debugstr_a(pszSubKey));
130 /*************************************************************************
131 * SHRegDeleteKeyW [SHELL32.512]
133 HRESULT WINAPI SHRegDeleteKeyW(
137 FIXME("hkey=0x%08x, %s\n", hkey, debugstr_w(pszSubKey));
141 /*************************************************************************
142 * SHRegCloseKey [SHELL32.505] NT 4.0
145 HRESULT WINAPI SHRegCloseKey (HKEY hkey)
147 TRACE("0x%04x\n",hkey);
148 return RegCloseKey( hkey );
152 /* 16-bit functions */
154 /* 0 and 1 are valid rootkeys in win16 shell.dll and are used by
155 * some programs. Do not remove those cases. -MM
157 static inline void fix_win16_hkey( HKEY *hkey )
159 if (*hkey == 0 || *hkey == 1) *hkey = HKEY_CLASSES_ROOT;
162 /******************************************************************************
163 * RegOpenKey [SHELL.1]
165 DWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, LPHKEY retkey )
167 fix_win16_hkey( &hkey );
168 return RegOpenKeyA( hkey, name, retkey );
171 /******************************************************************************
172 * RegCreateKey [SHELL.2]
174 DWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, LPHKEY retkey )
176 fix_win16_hkey( &hkey );
177 return RegCreateKeyA( hkey, name, retkey );
180 /******************************************************************************
181 * RegCloseKey [SHELL.3]
183 DWORD WINAPI RegCloseKey16( HKEY hkey )
185 fix_win16_hkey( &hkey );
186 return RegCloseKey( hkey );
189 /******************************************************************************
190 * RegDeleteKey [SHELL.4]
192 DWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name )
194 fix_win16_hkey( &hkey );
195 return RegDeleteKeyA( hkey, name );
198 /******************************************************************************
199 * RegSetValue [SHELL.5]
201 DWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count )
203 fix_win16_hkey( &hkey );
204 return RegSetValueA( hkey, name, type, data, count );
207 /******************************************************************************
208 * RegQueryValue [SHELL.6]
211 * Is this HACK still applicable?
214 * The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just
215 * mask out the high 16 bit. This (not so much incidently) hopefully fixes
218 DWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count )
220 fix_win16_hkey( &hkey );
221 if (count) *count &= 0xffff;
222 return RegQueryValueA( hkey, name, data, count );
225 /******************************************************************************
226 * RegEnumKey [SHELL.7]
228 DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len )
230 fix_win16_hkey( &hkey );
231 return RegEnumKeyA( hkey, index, name, name_len );