* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include <precomp.h>
+#include "precomp.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
return ret;
}
-/***************************************************************************************
-* HCR_GetDefaultIcon [internal]
-*
-* Gets the icon for a filetype
-*/
static BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
{
WCHAR xriid[50];
return (RegOpenKeyExW(HKEY_CLASSES_ROOT, xriid, 0, KEY_READ, hkey) == ERROR_SUCCESS);
}
-static BOOL HCR_RegGetDefaultIconW(HKEY hkey, LPWSTR szDest, DWORD len, int* picon_idx)
+/***************************************************************************************
+* HCR_GetIcon [internal]
+*
+* Gets the icon for a filetype, szName can be NULL, in which case the default icon is loaded
+*/
+static BOOL HCR_RegGetIconW(HKEY hkey, LPWSTR szDest, LPCWSTR szName, DWORD len, int* picon_idx)
{
DWORD dwType;
WCHAR sTemp[MAX_PATH];
WCHAR sNum[7];
- if (!RegQueryValueExW(hkey, NULL, 0, &dwType, (LPBYTE)szDest, &len))
+ if (!RegQueryValueExW(hkey, szName, 0, &dwType, (LPBYTE)szDest, &len))
{
if (dwType == REG_EXPAND_SZ)
{
return FALSE;
}
-static BOOL HCR_RegGetDefaultIconA(HKEY hkey, LPSTR szDest, DWORD len, int* picon_idx)
+static BOOL HCR_RegGetIconA(HKEY hkey, LPSTR szDest, LPCSTR szName, DWORD len, int* picon_idx)
{
DWORD dwType;
char sTemp[MAX_PATH];
char sNum[5];
- if (!RegQueryValueExA(hkey, NULL, 0, &dwType, (LPBYTE)szDest, &len))
+ if (!RegQueryValueExA(hkey, szName, 0, &dwType, (LPBYTE)szDest, &len))
{
if (dwType == REG_EXPAND_SZ)
{
return FALSE;
}
-BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, int* picon_idx)
+BOOL HCR_GetIconW(LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int* picon_idx)
{
static const WCHAR swDefaultIcon[] = L"\\DefaultIcon";
HKEY hKey;
if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, sTemp, 0, KEY_READ, &hKey))
{
- ret = HCR_RegGetDefaultIconW(hKey, szDest, len, picon_idx);
+ ret = HCR_RegGetIconW(hKey, szDest, szName, len, picon_idx);
RegCloseKey(hKey);
}
return ret;
}
-BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, int* picon_idx)
+BOOL HCR_GetIconA(LPCSTR szClass, LPSTR szDest, LPCSTR szName, DWORD len, int* picon_idx)
{
HKEY hKey;
char sTemp[MAX_PATH];
if (!RegOpenKeyExA(HKEY_CLASSES_ROOT, sTemp, 0, KEY_READ, &hKey))
{
- ret = HCR_RegGetDefaultIconA(hKey, szDest, len, picon_idx);
+ ret = HCR_RegGetIconA(hKey, szDest, szName, len, picon_idx);
RegCloseKey(hKey);
}
TRACE("-- %s %i\n", szDest, *picon_idx);
return ret;
}
-BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, int* picon_idx)
+BOOL HCR_GetIconFromGUIDW(REFIID riid, LPWSTR szDest, LPWSTR szName, DWORD len, int* picon_idx)
{
HKEY hKey;
BOOL ret = FALSE;
if (HCR_RegOpenClassIDKey(riid, &hKey))
{
- ret = HCR_RegGetDefaultIconW(hKey, szDest, len, picon_idx);
+ ret = HCR_RegGetIconW(hKey, szDest, szName, len, picon_idx);
RegCloseKey(hKey);
}
TRACE("-- %s %i\n", debugstr_w(szDest), *picon_idx);
lResult = RegOpenKeyExW(HKEY_CLASSES_ROOT, wszShellFolderKey, 0, KEY_READ, &hSFKey);
if (lResult != ERROR_SUCCESS)
+ {
+ ERR("Cannot open key: %ls\n", wszShellFolderKey);
return FALSE;
+ }
dwLen = sizeof(DWORD);
lResult = RegQueryValueExW(hSFKey, wszCallForAttributes, 0, NULL, (LPBYTE)&dwTemp, &dwLen);
hr = SHGetDesktopFolder(&psfDesktop);
if (SUCCEEDED(hr))
{
- hr = psfDesktop->BindToObject(pidlFolder, NULL, IID_IShellFolder,
- (LPVOID*)&psfFolder);
+ hr = psfDesktop->BindToObject(pidlFolder, NULL, IID_PPV_ARG(IShellFolder,&psfFolder));
if (SUCCEEDED(hr))
hr = psfFolder->GetAttributesOf(0, NULL, pdwAttributes);
}