mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-26 19:33:31 +00:00
[SHELL32] Respect the REST_NODRIVES restriction (#7907)
This is the "My Computer => Drives" setting in TweakUI.
This commit is contained in:
@@ -2923,8 +2923,8 @@ LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &
|
||||
ERR("hLock == NULL\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
TRACE("(%p)(%p,%p,%p)\n", this, Pidls[0], Pidls[1], lParam);
|
||||
lEvent &= ~SHCNE_INTERRUPT;
|
||||
TRACE("(%p)(%p,%p,%p) %#x\n", this, Pidls[0], Pidls[1], lParam, lEvent);
|
||||
|
||||
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.
|
||||
// SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes)
|
||||
lEvent &= ~SHCNE_INTERRUPT;
|
||||
HRESULT hr;
|
||||
PITEMID_CHILD child0 = NULL, child1 = NULL;
|
||||
CComHeapPtr<ITEMIDLIST_RELATIVE> pidl0Temp, pidl1Temp;
|
||||
|
||||
@@ -563,14 +563,12 @@ class CDrivesFolderEnum :
|
||||
if (dwFlags & SHCONTF_FOLDERS)
|
||||
{
|
||||
WCHAR wszDriveName[] = {'A', ':', '\\', '\0'};
|
||||
DWORD dwDrivemap = GetLogicalDrives();
|
||||
|
||||
while (wszDriveName[0] <= 'Z')
|
||||
DWORD dwDrivemap = GetLogicalDrives() & ~SHRestricted(REST_NODRIVES);
|
||||
for (; wszDriveName[0] <= 'Z'; wszDriveName[0]++)
|
||||
{
|
||||
if(dwDrivemap & 0x00000001L)
|
||||
if (dwDrivemap & 1)
|
||||
AddToEnumList(_ILCreateDrive(wszDriveName));
|
||||
wszDriveName[0]++;
|
||||
dwDrivemap = dwDrivemap >> 1;
|
||||
dwDrivemap >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1284,6 +1282,25 @@ HRESULT WINAPI CDrivesFolder::ShouldShow(IShellFolder *psf, PCIDLIST_ABSOLUTE pi
|
||||
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 */
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ class CDrivesFolder :
|
||||
STDMETHOD(CallBack)(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
|
||||
|
||||
// IShellFolderViewCB
|
||||
STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override { return E_NOTIMPL; }
|
||||
STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override;
|
||||
|
||||
// IFolderFilter
|
||||
STDMETHOD(ShouldShow)(IShellFolder *psf, PCIDLIST_ABSOLUTE pidlFolder, PCUITEMID_CHILD pidlItem) override;
|
||||
|
||||
Reference in New Issue
Block a user