[SHELL32] - Support keys with readable name and default value set to GUID in MyComputer name space. Fixes a warning about "Controls" not beeing GUID.

svn path=/trunk/; revision=54408
This commit is contained in:
Rafal Harabien 2011-11-17 17:33:22 +00:00
parent 44cac5c127
commit 34a7965726

View file

@ -93,7 +93,7 @@ static const WCHAR MyComputer_NameSpaceW[] = { 'S','O','F','T','W','A','R','E',
BOOL CDrivesFolderEnum::CreateMyCompEnumList(DWORD dwFlags) BOOL CDrivesFolderEnum::CreateMyCompEnumList(DWORD dwFlags)
{ {
BOOL ret = TRUE; BOOL bRet = TRUE;
TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags); TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags);
@ -102,52 +102,57 @@ BOOL CDrivesFolderEnum::CreateMyCompEnumList(DWORD dwFlags)
{ {
WCHAR wszDriveName[] = {'A', ':', '\\', '\0'}; WCHAR wszDriveName[] = {'A', ':', '\\', '\0'};
DWORD dwDrivemap = GetLogicalDrives(); DWORD dwDrivemap = GetLogicalDrives();
HKEY hkey; HKEY hKey;
UINT i; UINT i;
while (ret && wszDriveName[0]<='Z') while (bRet && wszDriveName[0]<='Z')
{ {
if(dwDrivemap & 0x00000001L) if(dwDrivemap & 0x00000001L)
ret = AddToEnumList(_ILCreateDrive(wszDriveName)); bRet = AddToEnumList(_ILCreateDrive(wszDriveName));
wszDriveName[0]++; wszDriveName[0]++;
dwDrivemap = dwDrivemap >> 1; dwDrivemap = dwDrivemap >> 1;
} }
TRACE("-- (%p)-> enumerate (mycomputer shell extensions)\n", this); TRACE("-- (%p)-> enumerate (mycomputer shell extensions)\n", this);
for (i=0; i<2; i++) for (i = 0; i < 2; i++)
{ {
if (ret && !RegOpenKeyExW(i == 0 ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, if (bRet && ERROR_SUCCESS == RegOpenKeyExW(i == 0 ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
MyComputer_NameSpaceW, 0, KEY_READ, &hkey)) MyComputer_NameSpaceW, 0, KEY_READ, &hKey))
{ {
WCHAR iid[50]; WCHAR wszBuf[50];
int i=0; DWORD dwSize, j = 0;
LONG ErrorCode;
LPITEMIDLIST pidl;
while (ret) while (bRet)
{ {
DWORD size; dwSize = sizeof(wszBuf) / sizeof(wszBuf[0]);
LONG r; ErrorCode = RegEnumKeyExW(hKey, j, wszBuf, &dwSize, 0, NULL, NULL, NULL);
if (ERROR_SUCCESS == ErrorCode)
size = sizeof(iid) / sizeof(iid[0]);
r = RegEnumKeyExW(hkey, i, iid, &size, 0, NULL, NULL, NULL);
if (ERROR_SUCCESS == r)
{ {
if (wszBuf[0] != L'{')
{
dwSize = sizeof(wszBuf);
RegGetValueW(hKey, wszBuf, NULL, RRF_RT_REG_SZ, NULL, wszBuf, &dwSize);
}
/* FIXME: shell extensions, shouldn't the type be /* FIXME: shell extensions, shouldn't the type be
* PT_SHELLEXT? */ * PT_SHELLEXT? */
LPITEMIDLIST pidl = _ILCreateGuidFromStrW(iid); pidl = _ILCreateGuidFromStrW(wszBuf);
if (pidl != NULL) if (pidl != NULL)
ret = AddToEnumList(pidl); bRet = AddToEnumList(pidl);
i++; j++;
} }
else if (ERROR_NO_MORE_ITEMS == r) else if (ERROR_NO_MORE_ITEMS == ErrorCode)
break; break;
else else
ret = FALSE; bRet = FALSE;
} }
RegCloseKey(hkey); RegCloseKey(hKey);
} }
} }
} }
return ret; return bRet;
} }
CDrivesFolder::CDrivesFolder() CDrivesFolder::CDrivesFolder()