mirror of
https://github.com/reactos/reactos.git
synced 2025-04-25 08:00:24 +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");
|
||||
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;
|
||||
|
|
Loading…
Reference in a new issue