From 7a138bc11f4218bc7221d3515af6a0985d2fcf85 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Mon, 7 Aug 2017 10:09:30 +0000 Subject: [PATCH] [SHELL32] -Restore some code I incorrectly removed in r75360. CORE-13564 svn path=/trunk/; revision=75500 --- .../win32/shell32/folders/CDesktopFolder.cpp | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp b/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp index 92553374144..3db5604f5c8 100644 --- a/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -85,6 +85,44 @@ class CDesktopFolderEnum : // CComPtr fDesktopEnumerator; // CComPtr fCommonDesktopEnumerator; public: + + void AddItemsFromClassicStartMenuKey(HKEY hKeyRoot) + { + DWORD dwResult; + HKEY hkey; + DWORD j = 0, dwVal, Val, dwType, dwIID; + LONG r; + WCHAR iid[50]; + LPITEMIDLIST pidl; + + dwResult = RegOpenKeyExW(hKeyRoot, ClassicStartMenuW, 0, KEY_READ, &hkey); + if (dwResult != ERROR_SUCCESS) + return; + + while(1) + { + dwVal = sizeof(Val); + dwIID = sizeof(iid) / sizeof(WCHAR); + + r = RegEnumValueW(hkey, j++, iid, &dwIID, NULL, &dwType, (LPBYTE)&Val, &dwVal); + if (r != ERROR_SUCCESS) + break; + + if (Val == 0 && dwType == REG_DWORD) + { + pidl = _ILCreateGuidFromStrW(iid); + if (pidl != NULL) + { + if (!HasItemWithCLSID(pidl)) + AddToEnumList(pidl); + else + SHFree(pidl); + } + } + } + RegCloseKey(hkey); + } + HRESULT WINAPI Initialize(DWORD dwFlags,IEnumIDList * pRegEnumerator, IEnumIDList *pDesktopEnumerator, IEnumIDList *pCommonDesktopEnumerator) { BOOL ret = TRUE; @@ -112,6 +150,8 @@ class CDesktopFolderEnum : SHFree(pidl); } } + AddItemsFromClassicStartMenuKey(HKEY_LOCAL_MACHINE); + AddItemsFromClassicStartMenuKey(HKEY_CURRENT_USER); } /* Enumerate the items in the two fs folders */