- Fix multiple bugs in HCR_GetDefaultVerbW

svn path=/trunk/; revision=35641
This commit is contained in:
Johannes Anderwald 2008-08-25 20:16:42 +00:00
parent fac43bb581
commit d0e1f5701b

View file

@ -143,13 +143,13 @@ BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD l
size=len; size=len;
*szDest='\0'; *szDest='\0';
if (!RegQueryValueW(hkeyClass, swShell, szDest, &size) && *szDest) if (!RegQueryValueW(hkeyClass, L"shell", szDest, &size) && *szDest)
{ {
/* The MSDN says to first try the default verb */ /* The MSDN says to first try the default verb */
lstrcpyW(sTemp, swShell); lstrcpyW(sTemp, swShell);
lstrcatW(sTemp, szDest); lstrcatW(sTemp, szDest);
lstrcatW(sTemp, swCommand); lstrcatW(sTemp, swCommand);
if (!RegOpenKeyExW(hkeyClass, sTemp, 0, 0, &hkey)) if (!RegOpenKeyExW(hkeyClass, sTemp, 0, KEY_READ, &hkey))
{ {
RegCloseKey(hkey); RegCloseKey(hkey);
TRACE("default verb=%s\n", debugstr_w(szDest)); TRACE("default verb=%s\n", debugstr_w(szDest));
@ -161,7 +161,7 @@ BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD l
lstrcpyW(sTemp, swShell); lstrcpyW(sTemp, swShell);
lstrcatW(sTemp, swOpen); lstrcatW(sTemp, swOpen);
lstrcatW(sTemp, swCommand); lstrcatW(sTemp, swCommand);
if (!RegOpenKeyExW(hkeyClass, sTemp, 0, 0, &hkey)) if (!RegOpenKeyExW(hkeyClass, sTemp, 0, KEY_READ, &hkey))
{ {
RegCloseKey(hkey); RegCloseKey(hkey);
lstrcpynW(szDest, swOpen, len); lstrcpynW(szDest, swOpen, len);
@ -170,11 +170,17 @@ BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD l
} }
/* and then just use the first verb on Windows >= 2000 */ /* and then just use the first verb on Windows >= 2000 */
if (!RegEnumKeyW(hkeyClass, 0, szDest, len) && *szDest) if (!RegOpenKeyExW(hkeyClass, L"shell", 0, KEY_READ, &hkey))
{
if (!RegEnumKeyW(hkey, 0, szDest, len) && *szDest)
{ {
TRACE("default verb=first verb=%s\n", debugstr_w(szDest)); TRACE("default verb=first verb=%s\n", debugstr_w(szDest));
RegCloseKey(hkey);
return TRUE; return TRUE;
} }
RegCloseKey(hkey);
}
TRACE("no default verb!\n"); TRACE("no default verb!\n");
return FALSE; return FALSE;