mirror of
https://github.com/reactos/reactos.git
synced 2025-04-26 16:40:27 +00:00
[SHELL32] Respect the REST_NODRIVES restriction (#7907)
This is the "My Computer => Drives" setting in TweakUI.
This commit is contained in:
parent
fb6191b71a
commit
73b019a390
3 changed files with 26 additions and 10 deletions
|
@ -2923,8 +2923,8 @@ LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &
|
||||||
ERR("hLock == NULL\n");
|
ERR("hLock == NULL\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
lEvent &= ~SHCNE_INTERRUPT;
|
||||||
TRACE("(%p)(%p,%p,%p)\n", this, Pidls[0], Pidls[1], lParam);
|
TRACE("(%p)(%p,%p,%p) %#x\n", this, Pidls[0], Pidls[1], lParam, lEvent);
|
||||||
|
|
||||||
if (_DoFolderViewCB(SFVM_FSNOTIFY, (WPARAM)Pidls, lEvent) == S_FALSE)
|
if (_DoFolderViewCB(SFVM_FSNOTIFY, (WPARAM)Pidls, lEvent) == S_FALSE)
|
||||||
{
|
{
|
||||||
|
@ -2934,7 +2934,6 @@ LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &
|
||||||
|
|
||||||
// Translate child IDLs.
|
// Translate child IDLs.
|
||||||
// SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes)
|
// SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes)
|
||||||
lEvent &= ~SHCNE_INTERRUPT;
|
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
PITEMID_CHILD child0 = NULL, child1 = NULL;
|
PITEMID_CHILD child0 = NULL, child1 = NULL;
|
||||||
CComHeapPtr<ITEMIDLIST_RELATIVE> pidl0Temp, pidl1Temp;
|
CComHeapPtr<ITEMIDLIST_RELATIVE> pidl0Temp, pidl1Temp;
|
||||||
|
|
|
@ -563,14 +563,12 @@ class CDrivesFolderEnum :
|
||||||
if (dwFlags & SHCONTF_FOLDERS)
|
if (dwFlags & SHCONTF_FOLDERS)
|
||||||
{
|
{
|
||||||
WCHAR wszDriveName[] = {'A', ':', '\\', '\0'};
|
WCHAR wszDriveName[] = {'A', ':', '\\', '\0'};
|
||||||
DWORD dwDrivemap = GetLogicalDrives();
|
DWORD dwDrivemap = GetLogicalDrives() & ~SHRestricted(REST_NODRIVES);
|
||||||
|
for (; wszDriveName[0] <= 'Z'; wszDriveName[0]++)
|
||||||
while (wszDriveName[0] <= 'Z')
|
|
||||||
{
|
{
|
||||||
if(dwDrivemap & 0x00000001L)
|
if (dwDrivemap & 1)
|
||||||
AddToEnumList(_ILCreateDrive(wszDriveName));
|
AddToEnumList(_ILCreateDrive(wszDriveName));
|
||||||
wszDriveName[0]++;
|
dwDrivemap >>= 1;
|
||||||
dwDrivemap = dwDrivemap >> 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1284,6 +1282,25 @@ HRESULT WINAPI CDrivesFolder::ShouldShow(IShellFolder *psf, PCIDLIST_ABSOLUTE pi
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* CDrivesFolder::MessageSFVCB (IShellFolderViewCB)
|
||||||
|
*/
|
||||||
|
STDMETHODIMP CDrivesFolder::MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case SFVM_FSNOTIFY:
|
||||||
|
if (lParam == SHCNE_DRIVEADD && wParam)
|
||||||
|
{
|
||||||
|
INT8 drive = GetDriveNumber(((PIDLIST_ABSOLUTE*)wParam)[0]);
|
||||||
|
if (drive >= 0 && ((1UL << drive) & SHRestricted(REST_NODRIVES)))
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
/* IContextMenuCB interface */
|
/* IContextMenuCB interface */
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ class CDrivesFolder :
|
||||||
STDMETHOD(CallBack)(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
|
STDMETHOD(CallBack)(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
|
||||||
|
|
||||||
// IShellFolderViewCB
|
// IShellFolderViewCB
|
||||||
STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override { return E_NOTIMPL; }
|
STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override;
|
||||||
|
|
||||||
// IFolderFilter
|
// IFolderFilter
|
||||||
STDMETHOD(ShouldShow)(IShellFolder *psf, PCIDLIST_ABSOLUTE pidlFolder, PCUITEMID_CHILD pidlItem) override;
|
STDMETHOD(ShouldShow)(IShellFolder *psf, PCIDLIST_ABSOLUTE pidlFolder, PCUITEMID_CHILD pidlItem) override;
|
||||||
|
|
Loading…
Reference in a new issue