Author: gadamopoulos
Date: Wed Aug 30 12:49:59 2017
New Revision: 75713
URL:
http://svn.reactos.org/svn/reactos?rev=75713&view=rev
Log:
[SHELL32] -SHChangeNotifyRegister: Don't call CreateFileW with something that is not a
filesystem path as this will obviously fail like when we are browsing My Computer.
Modified:
trunk/reactos/dll/win32/shell32/wine/changenotify.c
Modified: trunk/reactos/dll/win32/shell32/wine/changenotify.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/wine/cha…
==============================================================================
--- trunk/reactos/dll/win32/shell32/wine/changenotify.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/wine/changenotify.c [iso-8859-1] Wed Aug 30 12:49:59
2017
@@ -647,25 +647,38 @@
BOOL _OpenDirectory(LPNOTIFYREGISTER item)
{
STRRET strFile;
- IShellFolder *psfDesktop;
+ IShellFolder *psf;
HRESULT hr;
+ LPCITEMIDLIST child;
+ ULONG ulAttrs;
// Makes function idempotent
if (item->hDirectory && !(item->hDirectory == INVALID_HANDLE_VALUE))
return TRUE;
- hr = SHGetDesktopFolder(&psfDesktop);
+ hr = SHBindToParent(item->pidl, &IID_IShellFolder, (LPVOID*)&psf,
&child);
if (FAILED_UNEXPECTEDLY(hr))
- return FALSE;
-
- hr = IShellFolder_GetDisplayNameOf(psfDesktop, item->pidl, SHGDN_FORPARSING,
&strFile);
- IShellFolder_Release(psfDesktop);
+ return hr;
+
+ ulAttrs = SFGAO_FILESYSTEM | SFGAO_FOLDER;
+ hr = IShellFolder_GetAttributesOf(psf, 1, (LPCITEMIDLIST*)&child, &ulAttrs);
+ if (SUCCEEDED(hr))
+ hr = IShellFolder_GetDisplayNameOf(psf, child, SHGDN_FORPARSING, &strFile);
+
+ IShellFolder_Release(psf);
if (FAILED_UNEXPECTEDLY(hr))
return FALSE;
hr = StrRetToBufW(&strFile, NULL, item->wstrDirectory,
_countof(item->wstrDirectory));
if (FAILED_UNEXPECTEDLY(hr))
return FALSE;
+
+ if ((ulAttrs & (SFGAO_FILESYSTEM | SFGAO_FOLDER)) != (SFGAO_FILESYSTEM |
SFGAO_FOLDER))
+ {
+ TRACE("_OpenDirectory ignoring %s\n",
debugstr_w(item->wstrDirectory));
+ item->hDirectory = INVALID_HANDLE_VALUE;
+ return FALSE;
+ }
TRACE("_OpenDirectory %s\n", debugstr_w(item->wstrDirectory));