ReactOS 0.4.16-dev-737-g3368adc
CDrivesFolder Class Reference

#include <CDrivesFolder.h>

Inheritance diagram for CDrivesFolder:
Collaboration diagram for CDrivesFolder:

Public Member Functions

 CDrivesFolder ()
 
 ~CDrivesFolder ()
 
HRESULT WINAPI FinalConstruct ()
 
STDMETHOD() ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override
 
STDMETHOD() EnumObjects (HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
 
STDMETHOD() BindToObject (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
 
STDMETHOD() BindToStorage (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
 
STDMETHOD() CompareIDs (LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
 
STDMETHOD() CreateViewObject (HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
 
STDMETHOD() GetAttributesOf (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
 
STDMETHOD() GetUIObjectOf (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
 
STDMETHOD() GetDisplayNameOf (PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
 
STDMETHOD() SetNameOf (HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
 
STDMETHOD() GetDefaultSearchGUID (GUID *pguid) override
 
STDMETHOD() EnumSearches (IEnumExtraSearch **ppenum) override
 
STDMETHOD() GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
 
STDMETHOD() GetDefaultColumnState (UINT iColumn, DWORD *pcsFlags) override
 
STDMETHOD() GetDetailsEx (PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
 
STDMETHOD() GetDetailsOf (PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
 
STDMETHOD() MapColumnToSCID (UINT column, SHCOLUMNID *pscid) override
 
STDMETHOD() GetClassID (CLSID *lpClassId) override
 
STDMETHOD() Initialize (PCIDLIST_ABSOLUTE pidl) override
 
STDMETHOD() GetCurFolder (PIDLIST_ABSOLUTE *pidl) override
 
STDMETHOD() CallBack (IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) override
 
STDMETHODIMP MessageSFVCB (UINT uMsg, WPARAM wParam, LPARAM lParam) override
 
STDMETHOD() ShouldShow (IShellFolder *psf, PCIDLIST_ABSOLUTE pidlFolder, PCUITEMID_CHILD pidlItem) override
 
STDMETHODIMP GetEnumFlags (IShellFolder *, PCIDLIST_ABSOLUTE, HWND *, DWORD *) override
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT GetDefaultSearchGUID ([out] GUID *lpguid)
 
HRESULT EnumSearches ([out] IEnumExtraSearch **ppenum)
 
HRESULT GetDefaultColumn ([in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay)
 
HRESULT GetDefaultColumnState ([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
 
HRESULT GetDetailsEx ([in] PCUITEMID_CHILD pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv)
 
HRESULT GetDetailsOf ([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
 
HRESULT MapColumnToSCID ([in] UINT iColumn, [in] SHCOLUMNID *pscid)
 
- Public Member Functions inherited from IShellFolder
HRESULT ParseDisplayName ([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
 
HRESULT EnumObjects ([in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList)
 
HRESULT BindToObject ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT BindToStorage ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj)
 
HRESULT CompareIDs ([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
 
HRESULT CreateViewObject ([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetAttributesOf ([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
 
HRESULT GetUIObjectOf ([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetDisplayNameOf ([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
 
HRESULT SetNameOf ([in] HWND hwnd, [in] PCUITEMID_CHILD pidl, [in, string] LPCOLESTR lpszName, [in] SHGDNF uFlags, [out] PITEMID_CHILD *ppidlOut)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT GetCurFolder ([out] PIDLIST_ABSOLUTE *ppidl)
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidl)
 
HRESULT GetClassID ([out] CLSID *pClassID)
 
HRESULT CallBack ([in] IShellFolder *psf, [in] HWND hwndOwner, [in] IDataObject *pdtobj, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam)
 
HRESULT ShouldShow ([in] IShellFolder *psf, [in, unique] PCIDLIST_ABSOLUTE pidlFolder, [in] PCUITEMID_CHILD pidlItem)
 
HRESULT GetEnumFlags ([in] IShellFolder *psf, [in] PCIDLIST_ABSOLUTE pidlFolder, [out] HWND *phwnd, [in, out] DWORD *pgrfFlags)
 

Private Attributes

LPITEMIDLIST pidlRoot
 
CComPtr< IShellFolder2m_regFolder
 

Additional Inherited Members

- Public Types inherited from IShellFolder2
typedef struct IShellFolder2::SHCOLUMNIDLPSHCOLUMNID
 
typedef const SHCOLUMNIDLPCSHCOLUMNID
 
- Public Types inherited from IShellFolder
enum  tagSHGDN {
  SHGDN_NORMAL = 0 , SHGDN_INFOLDER = 1 , SHGDN_FOREDITING = 0x1000 , SHGDN_INCLUDE_NONFILESYS = 0x2000 ,
  SHGDN_FORADDRESSBAR = 0x4000 , SHGDN_FORPARSING = 0x8000
}
 
enum  tagSHCONTF {
  SHCONTF_FOLDERS = 32 , SHCONTF_NONFOLDERS = 64 , SHCONTF_INCLUDEHIDDEN = 128 , SHCONTF_INIT_ON_FIRST_NEXT = 256 ,
  SHCONTF_NETPRINTERSRCH = 512 , SHCONTF_SHAREABLE = 1024 , SHCONTF_STORAGE = 2048 , SHCONTF_NAVIGATION_ENUM = 0x01000 ,
  SHCONTF_FASTITEMS = 0x02000 , SHCONTF_FLATLIST = 0x04000 , SHCONTF_ENABLE_ASYNC = 0x08000 , SHCONTF_INCLUDESUPERHIDDEN = 0x10000
}
 
typedef IShellFolderLPSHELLFOLDER
 
typedef enum IShellFolder::tagSHGDN SHGNO
 
typedef DWORD SHGDNF
 
typedef DWORD SHCONTF
 
typedef ULONG SFGAOF
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IPersistFolder2
typedef IPersistFolder2LPPERSISTFOLDER2
 
- Public Types inherited from IPersistFolder
typedef IPersistFolderLPPERSISTFOLDER
 
- Public Types inherited from IPersist
typedef IPersistLPPERSIST
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 26 of file CDrivesFolder.h.

Constructor & Destructor Documentation

◆ CDrivesFolder()

CDrivesFolder::CDrivesFolder ( )

Definition at line 562 of file CDrivesFolder.cpp.

563{
564 pidlRoot = NULL;
565}
LPITEMIDLIST pidlRoot
Definition: CDrivesFolder.h:37
#define NULL
Definition: types.h:112

◆ ~CDrivesFolder()

CDrivesFolder::~CDrivesFolder ( )

Definition at line 567 of file CDrivesFolder.cpp.

568{
569 TRACE("-- destroying IShellFolder(%p)\n", this);
571}
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
#define TRACE(s)
Definition: solgame.cpp:4

Member Function Documentation

◆ BindToObject()

HRESULT WINAPI CDrivesFolder::BindToObject ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
override

Definition at line 676 of file CDrivesFolder.cpp.

677{
678 TRACE("(%p)->(pidl=%p,%p,%s,%p)\n", this,
679 pidl, pbcReserved, shdebugstr_guid(&riid), ppvOut);
680
681 if (!pidl)
682 return E_INVALIDARG;
683
684 if (_ILIsSpecialFolder(pidl))
685 return m_regFolder->BindToObject(pidl, pbcReserved, riid, ppvOut);
686
687 CHAR* pchDrive = _ILGetDataPointer(pidl)->u.drive.szDriveName;
688
689 PERSIST_FOLDER_TARGET_INFO pfti = {0};
690 pfti.dwAttributes = -1;
691 pfti.csidl = -1;
692 pfti.szTargetParsingName[0] = *pchDrive;
693 pfti.szTargetParsingName[1] = L':';
694 pfti.szTargetParsingName[2] = L'\\';
695
697 &pfti,
698 pidl,
699 &CLSID_ShellFSFolder,
700 riid,
701 ppvOut);
703 return hr;
704
705 return S_OK;
706}
CComPtr< IShellFolder2 > m_regFolder
Definition: CDrivesFolder.h:38
#define E_INVALIDARG
Definition: ddrawi.h:101
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:438
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define L(x)
Definition: ntvdm.h:50
LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2254
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2102
HRESULT SHELL32_BindToSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: shlfolder.cpp:196
HRESULT hr
Definition: shlfolder.c:183
struct tagDriveStruct drive
Definition: pidl.h:210
union tagPIDLDATA::@563 u
char CHAR
Definition: xmlstorage.h:175

Referenced by GetUIObjectOf(), and ParseDisplayName().

◆ BindToStorage()

HRESULT WINAPI CDrivesFolder::BindToStorage ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
override

Definition at line 711 of file CDrivesFolder.cpp.

712{
713 FIXME("(%p)->(pidl=%p,%p,%s,%p) stub\n", this,
714 pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
715
716 *ppvOut = NULL;
717 return E_NOTIMPL;
718}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ CallBack()

HRESULT WINAPI CDrivesFolder::CallBack ( IShellFolder psf,
HWND  hwndOwner,
IDataObject pdtobj,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
override

Implements IContextMenuCB.

Definition at line 1242 of file CDrivesFolder.cpp.

1243{
1244 enum { IDC_PROPERTIES };
1245 /* no data object means no selection */
1246 if (!pdtobj)
1247 {
1248 if (uMsg == DFM_INVOKECOMMAND && wParam == IDC_PROPERTIES)
1249 {
1250 // "System" properties
1251 return SHELL_ExecuteControlPanelCPL(hwndOwner, L"sysdm.cpl") ? S_OK : E_FAIL;
1252 }
1253 else if (uMsg == DFM_MERGECONTEXTMENU) // TODO: DFM_MERGECONTEXTMENU_BOTTOM
1254 {
1255 QCMINFO *pqcminfo = (QCMINFO *)lParam;
1256 HMENU hpopup = CreatePopupMenu();
1258 pqcminfo->idCmdFirst = Shell_MergeMenus(pqcminfo->hmenu, hpopup, pqcminfo->indexMenu, pqcminfo->idCmdFirst, pqcminfo->idCmdLast, MM_ADDSEPARATOR);
1259 DestroyMenu(hpopup);
1260 return S_OK;
1261 }
1262 }
1263 return SHELL32_DefaultContextMenuCallBack(psf, pdtobj, uMsg);
1264}
#define IDS_PROPERTIES
Definition: resource.h:102
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_FAIL
Definition: ddrawi.h:102
#define TRUE
Definition: types.h:120
#define IDC_PROPERTIES
Definition: resource.h:32
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
#define SHELL_ExecuteControlPanelCPL(hwnd, cpl)
Definition: precomp.h:185
HRESULT SHELL32_DefaultContextMenuCallBack(IShellFolder *psf, IDataObject *pdo, UINT msg)
Definition: shlfolder.cpp:525
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
Definition: shlmenu.c:856
#define MM_ADDSEPARATOR
Definition: shlobj.h:2528
HMENU hmenu
Definition: shlobj.h:1390
UINT idCmdLast
Definition: shlobj.h:1393
UINT idCmdFirst
Definition: shlobj.h:1392
UINT indexMenu
Definition: shlobj.h:1391
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define MFS_ENABLED
Definition: winuser.h:753
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MFT_STRING
Definition: winuser.h:749
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

◆ CompareIDs()

HRESULT WINAPI CDrivesFolder::CompareIDs ( LPARAM  lParam,
PCUIDLIST_RELATIVE  pidl1,
PCUIDLIST_RELATIVE  pidl2 
)
override

Implements IShellFolder.

Definition at line 724 of file CDrivesFolder.cpp.

725{
727
728 if (!pidl1 || !pidl2)
729 {
730 ERR("Got null pidl pointer (%Ix %p %p)!\n", lParam, pidl1, pidl2);
731 return E_INVALIDARG;
732 }
733
734 if (_ILIsSpecialFolder(pidl1) || _ILIsSpecialFolder(pidl2))
735 return m_regFolder->CompareIDs(lParam, pidl1, pidl2);
736
737 UINT iColumn = LOWORD(lParam);
738 if (!_ILIsDrive(pidl1) || !_ILIsDrive(pidl2) || iColumn >= _countof(MyComputerSFHeader))
739 return E_INVALIDARG;
740
741 CHAR* pszDrive1 = _ILGetDataPointer(pidl1)->u.drive.szDriveName;
742 CHAR* pszDrive2 = _ILGetDataPointer(pidl2)->u.drive.szDriveName;
743
744 int result;
745 switch (MyComputerSFHeader[iColumn].colnameid)
746 {
748 {
749 result = _stricmp(pszDrive1, pszDrive2);
751 break;
752 }
754 {
755 /* We want to return immediately because SHELL32_CompareDetails also compares children. */
756 return SHELL32_CompareDetails(this, lParam, pidl1, pidl2);
757 }
760 {
761 ULARGE_INTEGER Drive1Available, Drive1Total, Drive2Available, Drive2Total;
762
763 if (GetVolumeInformationA(pszDrive1, NULL, 0, NULL, NULL, NULL, NULL, 0))
764 GetDiskFreeSpaceExA(pszDrive1, &Drive1Available, &Drive1Total, NULL);
765 else
766 Drive1Available.QuadPart = Drive1Total.QuadPart = 0;
767
768 if (GetVolumeInformationA(pszDrive2, NULL, 0, NULL, NULL, NULL, NULL, 0))
769 GetDiskFreeSpaceExA(pszDrive2, &Drive2Available, &Drive2Total, NULL);
770 else
771 Drive2Available.QuadPart = Drive2Total.QuadPart = 0;
772
773 LARGE_INTEGER Diff;
774 if (lParam == 3) /* Size */
775 Diff.QuadPart = Drive1Total.QuadPart - Drive2Total.QuadPart;
776 else /* Size available */
777 Diff.QuadPart = Drive1Available.QuadPart - Drive2Available.QuadPart;
778
780 break;
781 }
784 break;
786 }
787
788 if (HRESULT_CODE(hres) == 0)
789 return SHELL32_CompareChildren(this, lParam, pidl1, pidl2);
790
791 return hres;
792}
static const shvheader MyComputerSFHeader[]
#define ERR(fmt,...)
Definition: precomp.h:57
#define _stricmp
Definition: cat.c:22
#define IDS_SHV_COLUMN_TYPE
Definition: resource.h:75
#define IDS_SHV_COLUMN_NAME
Definition: resource.h:74
BOOL WINAPI GetDiskFreeSpaceExA(IN LPCSTR lpDirectoryName OPTIONAL, OUT PULARGE_INTEGER lpFreeBytesAvailableToCaller, OUT PULARGE_INTEGER lpTotalNumberOfBytes, OUT PULARGE_INTEGER lpTotalNumberOfFreeBytes)
Definition: disk.c:313
BOOL WINAPI GetVolumeInformationA(IN LPCSTR lpRootPathName, IN LPSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
Definition: volume.c:32
GLuint64EXT * result
Definition: glext.h:11304
HRESULT hres
Definition: protocol.c:465
unsigned int UINT
Definition: ndis.h:50
#define DEFAULT_UNREACHABLE
#define LOWORD(l)
Definition: pedump.c:82
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:2113
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:619
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:252
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:275
#define IDS_SHV_COLUMN_DISK_AVAILABLE
Definition: shresdef.h:55
#define IDS_SHV_COLUMN_DISK_CAPACITY
Definition: shresdef.h:54
#define IDS_SHV_COLUMN_COMMENTS
Definition: shresdef.h:67
#define _countof(array)
Definition: sndvol32.h:70
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
LONGLONG QuadPart
Definition: typedefs.h:114
#define HRESULT_CODE(hr)
Definition: winerror.h:76

◆ CreateViewObject()

HRESULT WINAPI CDrivesFolder::CreateViewObject ( HWND  hwndOwner,
REFIID  riid,
LPVOID ppvOut 
)
override

Definition at line 797 of file CDrivesFolder.cpp.

798{
799 CComPtr<IShellView> pShellView;
801
802 TRACE("(%p)->(hwnd=%p,%s,%p)\n", this,
803 hwndOwner, shdebugstr_guid (&riid), ppvOut);
804
805 if (!ppvOut)
806 return hr;
807
808 *ppvOut = NULL;
809
810 if (IsEqualIID(riid, IID_IDropTarget))
811 {
812 WARN("IDropTarget not implemented\n");
813 hr = E_NOTIMPL;
814 }
815 else if (IsEqualIID(riid, IID_IContextMenu))
816 {
817 DEFCONTEXTMENU dcm = { hwndOwner, this, pidlRoot, this };
818 hr = SHCreateDefaultContextMenu(&dcm, riid, ppvOut);
819 }
820 else if (IsEqualIID(riid, IID_IShellView))
821 {
822 SFV_CREATE sfvparams = { sizeof(SFV_CREATE), this, NULL, static_cast<IShellFolderViewCB*>(this) };
823 hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppvOut);
824 }
825 TRACE("-- (%p)->(interface=%p)\n", this, ppvOut);
826 return hr;
827}
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4677
HRESULT WINAPI SHCreateDefaultContextMenu(const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv)
#define WARN(fmt,...)
Definition: precomp.h:61
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
struct _SFV_CREATE SFV_CREATE

◆ EnumObjects()

HRESULT WINAPI CDrivesFolder::EnumObjects ( HWND  hwndOwner,
DWORD  dwFlags,
LPENUMIDLIST *  ppEnumIDList 
)
override

Definition at line 665 of file CDrivesFolder.cpp.

666{
667 CComPtr<IEnumIDList> pRegEnumerator;
668 m_regFolder->EnumObjects(hwndOwner, dwFlags, &pRegEnumerator);
669
670 return ShellObjectCreatorInit<CDrivesFolderEnum>(hwndOwner, dwFlags, pRegEnumerator, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
671}
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
#define IID_PPV_ARG(Itype, ppType)

◆ EnumSearches()

HRESULT WINAPI CDrivesFolder::EnumSearches ( IEnumExtraSearch **  ppenum)
override

Implements IShellFolder2.

Definition at line 1079 of file CDrivesFolder.cpp.

1080{
1081 FIXME("(%p)\n", this);
1082 return E_NOTIMPL;
1083}

◆ FinalConstruct()

HRESULT WINAPI CDrivesFolder::FinalConstruct ( )

Definition at line 573 of file CDrivesFolder.cpp.

574{
575 pidlRoot = _ILCreateMyComputer(); /* my qualified pidl */
576 if (pidlRoot == NULL)
577 return E_OUTOFMEMORY;
578
579 REGFOLDERINITDATA RegInit = { static_cast<IShellFolder*>(this), &g_RegFolderInfo };
581 pidlRoot,
583
584 return hr;
585}
static const REGFOLDERINFO g_RegFolderInfo
HRESULT CRegFolder_CreateInstance(PREGFOLDERINITDATA pInit, LPCITEMIDLIST pidlRoot, REFIID riid, void **ppv)
Definition: CRegFolder.cpp:951
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
LPITEMIDLIST _ILCreateMyComputer(void)
Definition: pidl.c:1758

◆ GetAttributesOf()

HRESULT WINAPI CDrivesFolder::GetAttributesOf ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
DWORD rgfInOut 
)
override

Definition at line 832 of file CDrivesFolder.cpp.

833{
834 TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
835 this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
836
837 if (cidl && !apidl)
838 return E_INVALIDARG;
839
840 if (*rgfInOut == 0)
841 *rgfInOut = ~0;
842
843 /* FIXME: always add SFGAO_CANLINK */
844 if(cidl == 0)
845 *rgfInOut &= dwComputerAttributes;
846 else
847 {
848 for (UINT i = 0; i < cidl; ++i)
849 {
850 if (_ILIsDrive(apidl[i]))
851 {
852 *rgfInOut &= dwDriveAttributes;
853
854 if (_ILGetDriveType(apidl[i]) == DRIVE_CDROM)
855 *rgfInOut &= ~SFGAO_CANRENAME; // CD-ROM drive cannot rename
856 }
857 else if (_ILIsControlPanel(apidl[i]))
858 {
859 *rgfInOut &= dwControlPanelAttributes;
860 }
861 else if (_ILIsSpecialFolder(*apidl))
862 {
863 m_regFolder->GetAttributesOf(1, &apidl[i], rgfInOut);
864 }
865 else
866 {
867 ERR("Got unknown pidl type!\n");
868 }
869 }
870 }
871
872 /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
873 *rgfInOut &= ~SFGAO_VALIDATE;
874
875 TRACE("-- result=0x%08x\n", *rgfInOut);
876 return S_OK;
877}
BOOL _ILGetDriveType(LPCITEMIDLIST pidl)
static const DWORD dwComputerAttributes
static const DWORD dwDriveAttributes
static const DWORD dwControlPanelAttributes
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define DRIVE_CDROM
Definition: machpc98.h:119
BOOL _ILIsControlPanel(LPCITEMIDLIST pidl)
Definition: pidl.c:2069

Referenced by ParseDisplayName().

◆ GetClassID()

HRESULT WINAPI CDrivesFolder::GetClassID ( CLSID lpClassId)
override

Implements IPersist.

Definition at line 1194 of file CDrivesFolder.cpp.

1195{
1196 TRACE("(%p)\n", this);
1197
1198 if (!lpClassId)
1199 return E_POINTER;
1200
1201 *lpClassId = CLSID_MyComputer;
1202 return S_OK;
1203}
#define E_POINTER
Definition: winerror.h:2365

◆ GetCurFolder()

HRESULT WINAPI CDrivesFolder::GetCurFolder ( PIDLIST_ABSOLUTE pidl)
override

Implements IPersistFolder2.

Definition at line 1218 of file CDrivesFolder.cpp.

1219{
1220 TRACE("(%p)->(%p)\n", this, pidl);
1221
1222 if (!pidl)
1223 return E_INVALIDARG; /* xp doesn't have this check and crashes on NULL */
1224
1225 *pidl = ILClone(pidlRoot);
1226 return S_OK;
1227}
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237

◆ GetDefaultColumn()

HRESULT WINAPI CDrivesFolder::GetDefaultColumn ( DWORD  dwRes,
ULONG pSort,
ULONG pDisplay 
)
override

Implements IShellFolder2.

Definition at line 1085 of file CDrivesFolder.cpp.

1086{
1087 TRACE("(%p)\n", this);
1088
1089 if (pSort)
1090 *pSort = 0;
1091 if (pDisplay)
1092 *pDisplay = 0;
1093 return S_OK;
1094}

◆ GetDefaultColumnState()

HRESULT WINAPI CDrivesFolder::GetDefaultColumnState ( UINT  iColumn,
DWORD pcsFlags 
)
override

Implements IShellFolder2.

Definition at line 1096 of file CDrivesFolder.cpp.

1097{
1098 TRACE("(%p)\n", this);
1099
1100 if (!pcsFlags || iColumn >= _countof(MyComputerSFHeader))
1101 return E_INVALIDARG;
1102 *pcsFlags = MyComputerSFHeader[iColumn].colstate;
1103 return S_OK;
1104}
WORD colstate
Definition: shfldr.h:31

◆ GetDefaultSearchGUID()

HRESULT WINAPI CDrivesFolder::GetDefaultSearchGUID ( GUID pguid)
override

Implements IShellFolder2.

Definition at line 1073 of file CDrivesFolder.cpp.

1074{
1075 FIXME("(%p)\n", this);
1076 return E_NOTIMPL;
1077}

◆ GetDetailsEx()

HRESULT WINAPI CDrivesFolder::GetDetailsEx ( PCUITEMID_CHILD  pidl,
const SHCOLUMNID pscid,
VARIANT pv 
)
override

Implements IShellFolder2.

Definition at line 1106 of file CDrivesFolder.cpp.

1107{
1108 FIXME("(%p)\n", this);
1109 return E_NOTIMPL;
1110}

◆ GetDetailsOf()

HRESULT WINAPI CDrivesFolder::GetDetailsOf ( PCUITEMID_CHILD  pidl,
UINT  iColumn,
SHELLDETAILS psd 
)
override

Implements IShellFolder2.

Definition at line 1112 of file CDrivesFolder.cpp.

1113{
1114 HRESULT hr;
1115
1116 TRACE("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd);
1117
1118 if (!psd || iColumn >= _countof(MyComputerSFHeader))
1119 return E_INVALIDARG;
1120
1121 if (!pidl)
1122 {
1123 psd->fmt = MyComputerSFHeader[iColumn].fmt;
1124 psd->cxChar = MyComputerSFHeader[iColumn].cxChar;
1125 return SHSetStrRet(&psd->str, MyComputerSFHeader[iColumn].colnameid);
1126 }
1127 else if (!_ILIsDrive(pidl))
1128 {
1129 switch (MyComputerSFHeader[iColumn].colnameid)
1130 {
1133 return m_regFolder->GetDetailsOf(pidl, iColumn, psd);
1136 return SHSetStrRet(&psd->str, ""); /* blank col */
1138 return m_regFolder->GetDetailsOf(pidl, 2, psd); /* 2 = comments */
1140 }
1141 }
1142 else
1143 {
1144 ULARGE_INTEGER ulTotalBytes, ulFreeBytes;
1145 CHAR* pszDrive = _ILGetDataPointer(pidl)->u.drive.szDriveName;
1146 UINT DriveType = GetDriveTypeA(pszDrive);
1149
1150 switch (MyComputerSFHeader[iColumn].colnameid)
1151 {
1154 break;
1156 if (DriveType == DRIVE_REMOVABLE && !IsDriveFloppyA(pszDrive))
1157 hr = SHSetStrRet(&psd->str, IDS_DRIVE_REMOVABLE);
1158 else
1159 hr = SHSetStrRet(&psd->str, iDriveTypeIds[DriveType]);
1160 break;
1163 psd->str.cStr[0] = 0x00;
1164 psd->str.uType = STRRET_CSTR;
1165 if (GetVolumeInformationA(pszDrive, NULL, 0, NULL, NULL, NULL, NULL, 0))
1166 {
1167 GetDiskFreeSpaceExA(pszDrive, &ulFreeBytes, &ulTotalBytes, NULL);
1168 if (iColumn == 2)
1169 StrFormatByteSize64A(ulTotalBytes.QuadPart, psd->str.cStr, MAX_PATH);
1170 else
1171 StrFormatByteSize64A(ulFreeBytes.QuadPart, psd->str.cStr, MAX_PATH);
1172 }
1173 hr = S_OK;
1174 break;
1176 hr = SHSetStrRet(&psd->str, ""); /* FIXME: comments */
1177 break;
1179 }
1180 }
1181
1182 return hr;
1183}
static int iDriveTypeIds[7]
UINT DriveType
STDMETHOD() GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
#define MAX_PATH
Definition: compat.h:34
UINT WINAPI GetDriveTypeA(IN LPCSTR lpRootPathName)
Definition: disk.c:468
LPSTR WINAPI StrFormatByteSize64A(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:2502
BOOL IsDriveFloppyA(LPCSTR pszDriveRoot)
Definition: drvdefext.cpp:386
#define IDS_DRIVE_REMOVABLE
Definition: shresdef.h:115
@ STRRET_CSTR
Definition: shtypes.idl:87
STRRET str
Definition: shtypes.idl:108
char cStr[MAX_PATH]
Definition: shtypes.idl:98
UINT uType
Definition: shtypes.idl:93
#define DRIVE_RAMDISK
Definition: winbase.h:281
#define DRIVE_FIXED
Definition: winbase.h:278
#define DRIVE_REMOVABLE
Definition: winbase.h:277

◆ GetDisplayNameOf()

HRESULT WINAPI CDrivesFolder::GetDisplayNameOf ( PCUITEMID_CHILD  pidl,
DWORD  dwFlags,
LPSTRRET  strRet 
)
override

Definition at line 948 of file CDrivesFolder.cpp.

949{
950 LPWSTR pszPath;
951 HRESULT hr = S_OK;
952
953 TRACE("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet);
954 pdump (pidl);
955
956 if (!strRet)
957 return E_INVALIDARG;
958
959 if (!_ILIsPidlSimple (pidl))
960 {
961 return SHELL32_GetDisplayNameOfChild(this, pidl, dwFlags, strRet);
962 }
963 else if (_ILIsSpecialFolder(pidl))
964 {
965 return m_regFolder->GetDisplayNameOf(pidl, dwFlags, strRet);
966 }
967 else if (!_ILIsDrive(pidl))
968 {
969 ERR("Wrong pidl type\n");
970 return E_INVALIDARG;
971 }
972
973 pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
974 if (!pszPath)
975 return E_OUTOFMEMORY;
976
977 pszPath[0] = 0;
978
979 _ILSimpleGetTextW(pidl, pszPath, MAX_PATH); /* append my own path */
980 /* long view "lw_name (C:)" */
981 if (!(dwFlags & SHGDN_FORPARSING))
982 {
983 WCHAR wszDrive[18] = {0};
984
985 lstrcpynW(wszDrive, pszPath, 4);
986 pszPath[0] = L'\0';
987
988 if (!SUCCEEDED(getLabelForDrive(wszDrive, pszPath)))
989 {
990 DWORD dwVolumeSerialNumber, dwMaximumComponentLength, dwFileSystemFlags;
991
992 GetVolumeInformationW(wszDrive, pszPath,
993 MAX_PATH - 7,
994 &dwVolumeSerialNumber,
995 &dwMaximumComponentLength, &dwFileSystemFlags, NULL, 0);
996 pszPath[MAX_PATH-1] = L'\0';
997
998 if (!wcslen(pszPath))
999 {
1001 DriveType = GetDriveTypeW(wszDrive);
1002
1003 switch (DriveType)
1004 {
1005 case DRIVE_FIXED:
1007 break;
1008 case DRIVE_REMOTE:
1010 break;
1011 case DRIVE_CDROM:
1013 break;
1014 default:
1015 ResourceId = 0;
1016 }
1017
1018 if (ResourceId)
1019 {
1020 dwFileSystemFlags = LoadStringW(shell32_hInstance, ResourceId, pszPath, MAX_PATH);
1021 if (dwFileSystemFlags > MAX_PATH - 7)
1022 pszPath[MAX_PATH-7] = L'\0';
1023 }
1024 }
1025 }
1026 wcscat(pszPath, L" (");
1027 wszDrive[2] = L'\0';
1028 wcscat(pszPath, wszDrive);
1029 wcscat(pszPath, L")");
1030 }
1031
1032 if (SUCCEEDED(hr))
1033 {
1034 strRet->uType = STRRET_WSTR;
1035 strRet->pOleStr = pszPath;
1036 }
1037 else
1038 CoTaskMemFree(pszPath);
1039
1040 TRACE("-- (%p)->(%s)\n", this, strRet->uType == STRRET_CSTR ? strRet->cStr : debugstr_w(strRet->pOleStr));
1041 return hr;
1042}
static HRESULT getLabelForDrive(LPWSTR wszPath, LPWSTR wszLabel)
INT ResourceId
Definition: LoadImageGCC.c:72
#define shell32_hInstance
wcscat
void pdump(LPCITEMIDLIST pidl)
Definition: debughlp.cpp:322
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
#define lstrcpynW
Definition: compat.h:738
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497
BOOL WINAPI GetVolumeInformationW(IN LPCWSTR lpRootPathName, IN LPWSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPWSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
Definition: volume.c:226
unsigned long DWORD
Definition: ntddk_ex.h:95
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define debugstr_w
Definition: kernel32.h:32
DWORD _ILSimpleGetTextW(LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
Definition: pidl.c:2174
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: shlfolder.cpp:234
#define IDS_DRIVE_CDROM
Definition: shresdef.h:112
#define IDS_DRIVE_FIXED
Definition: shresdef.h:111
#define IDS_DRIVE_NETWORK
Definition: shresdef.h:113
@ STRRET_WSTR
Definition: shtypes.idl:85
LPWSTR pOleStr
Definition: shtypes.idl:96
#define DRIVE_REMOTE
Definition: winbase.h:279
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by GetDetailsOf().

◆ GetEnumFlags()

STDMETHODIMP CDrivesFolder::GetEnumFlags ( IShellFolder ,
PCIDLIST_ABSOLUTE  ,
HWND ,
DWORD  
)
inlineoverride

Implements IFolderFilter.

Definition at line 83 of file CDrivesFolder.h.

83{ return E_NOTIMPL; }

◆ GetUIObjectOf()

HRESULT WINAPI CDrivesFolder::GetUIObjectOf ( HWND  hwndOwner,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
REFIID  riid,
UINT prgfInOut,
LPVOID ppvOut 
)
override

Definition at line 891 of file CDrivesFolder.cpp.

894{
895 LPVOID pObj = NULL;
897
898 TRACE("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", this,
899 hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
900
901 if (!ppvOut)
902 return hr;
903
904 *ppvOut = NULL;
905
906 if (IsEqualIID (riid, IID_IContextMenu) && (cidl >= 1))
907 {
908 if (_ILIsDrive(apidl[0]))
909 hr = CDrivesContextMenu_CreateInstance(pidlRoot, hwndOwner, cidl, apidl, static_cast<IShellFolder*>(this), (IContextMenu**)&pObj);
910 else
911 hr = m_regFolder->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, &pObj);
912 }
913 else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1))
914 {
915 hr = IDataObject_Constructor(hwndOwner,
916 pidlRoot, apidl, cidl, TRUE, (IDataObject **)&pObj);
917 }
918 else if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID (riid, IID_IExtractIconW)) && (cidl == 1))
919 {
920 if (_ILIsDrive(apidl[0]))
921 hr = CDrivesExtractIcon_CreateInstance(this, apidl[0], riid, &pObj);
922 else
923 hr = m_regFolder->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, &pObj);
924 }
925 else if (IsEqualIID (riid, IID_IDropTarget) && (cidl == 1))
926 {
927 CComPtr<IShellFolder> psfChild;
928 hr = this->BindToObject(apidl[0], NULL, IID_PPV_ARG(IShellFolder, &psfChild));
930 return hr;
931
932 return psfChild->CreateViewObject(NULL, riid, ppvOut);
933 }
934 else
936
937 if (SUCCEEDED(hr) && !pObj)
939
940 *ppvOut = pObj;
941 TRACE("(%p)->hr=0x%08x\n", this, hr);
942 return hr;
943}
HRESULT CDrivesContextMenu_CreateInstance(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, IContextMenu **ppcm)
HRESULT CDrivesExtractIcon_CreateInstance(IShellFolder *psf, LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut)
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, BOOL bExtendedObject, IDataObject **dataObject)
STDMETHOD() BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
const GUID IID_IDataObject
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ Initialize()

HRESULT WINAPI CDrivesFolder::Initialize ( PCIDLIST_ABSOLUTE  pidl)
override

Implements IPersistFolder.

Definition at line 1210 of file CDrivesFolder.cpp.

1211{
1212 return S_OK;
1213}

◆ MapColumnToSCID()

HRESULT WINAPI CDrivesFolder::MapColumnToSCID ( UINT  column,
SHCOLUMNID pscid 
)
override

Implements IShellFolder2.

Definition at line 1185 of file CDrivesFolder.cpp.

1186{
1187 FIXME("(%p)\n", this);
1188 return E_NOTIMPL;
1189}

◆ MessageSFVCB()

STDMETHODIMP CDrivesFolder::MessageSFVCB ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inlineoverride

Definition at line 79 of file CDrivesFolder.h.

79{ return E_NOTIMPL; }

◆ ParseDisplayName()

HRESULT WINAPI CDrivesFolder::ParseDisplayName ( HWND  hwndOwner,
LPBC  pbc,
LPOLESTR  lpszDisplayName,
DWORD pchEaten,
PIDLIST_RELATIVE ppidl,
DWORD pdwAttributes 
)
override

Definition at line 590 of file CDrivesFolder.cpp.

592{
594
595 TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this,
596 hwndOwner, pbc, lpszDisplayName, debugstr_w (lpszDisplayName),
597 pchEaten, ppidl, pdwAttributes);
598
599 if (!ppidl)
600 return hr;
601
602 *ppidl = NULL;
603
604 if (!lpszDisplayName)
605 return hr;
606
607 /* handle CLSID paths */
608 if (lpszDisplayName[0] == L':' && lpszDisplayName[1] == L':')
609 {
610 return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl,
611 pdwAttributes);
612 }
613
614 if (((L'A' <= lpszDisplayName[0] && lpszDisplayName[0] <= L'Z') ||
615 (L'a' <= lpszDisplayName[0] && lpszDisplayName[0] <= L'z')) &&
616 lpszDisplayName[1] == L':' && (lpszDisplayName[2] == L'\\' || !lpszDisplayName[2]))
617 {
618 // "C:\..."
619 WCHAR szRoot[8];
620 PathBuildRootW(szRoot, ((*lpszDisplayName - 1) & 0x1F));
621
622 if (SHIsFileSysBindCtx(pbc, NULL) != S_OK && !(BindCtx_GetMode(pbc, 0) & STGM_CREATE))
623 {
624 if (::GetDriveType(szRoot) == DRIVE_NO_ROOT_DIR)
626 }
627
628 CComHeapPtr<ITEMIDLIST> pidlTemp(_ILCreateDrive(szRoot));
629 if (!pidlTemp)
630 return E_OUTOFMEMORY;
631
632 if (lpszDisplayName[2] && lpszDisplayName[3])
633 {
634 CComPtr<IShellFolder> pChildFolder;
635 hr = BindToObject(pidlTemp, pbc, IID_PPV_ARG(IShellFolder, &pChildFolder));
637 return hr;
638
639 ULONG chEaten;
640 CComHeapPtr<ITEMIDLIST> pidlChild;
641 hr = pChildFolder->ParseDisplayName(hwndOwner, pbc, &lpszDisplayName[3], &chEaten,
642 &pidlChild, pdwAttributes);
644 return hr;
645
646 hr = SHILCombine(pidlTemp, pidlChild, ppidl);
647 }
648 else
649 {
650 *ppidl = pidlTemp.Detach();
651 if (pdwAttributes && *pdwAttributes)
652 GetAttributesOf(1, (PCUITEMID_CHILD_ARRAY)ppidl, pdwAttributes);
653 hr = S_OK;
654 }
655 }
656
657 TRACE("(%p)->(-- ret=0x%08x)\n", this, hr);
658
659 return hr;
660}
STDMETHOD() GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
DWORD BindCtx_GetMode(_In_ IBindCtx *pbc, _In_ DWORD dwDefault)
Definition: utils.cpp:278
HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW *pFindData)
Definition: utils.cpp:303
LPWSTR WINAPI PathBuildRootW(LPWSTR lpszPath, int drive)
Definition: path.c:348
#define STGM_CREATE
Definition: objbase.h:926
LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
Definition: pidl.c:1961
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
uint32_t ULONG
Definition: typedefs.h:59
#define DRIVE_NO_ROOT_DIR
Definition: winbase.h:283
#define GetDriveType
Definition: winbase.h:3837
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

◆ SetNameOf()

HRESULT WINAPI CDrivesFolder::SetNameOf ( HWND  hwndOwner,
PCUITEMID_CHILD  pidl,
LPCOLESTR  lpName,
DWORD  dwFlags,
PITEMID_CHILD pPidlOut 
)
override

Implements IShellFolder.

Definition at line 1056 of file CDrivesFolder.cpp.

1058{
1059 WCHAR szName[30];
1060
1061 if (_ILIsDrive(pidl))
1062 {
1065 if (pPidlOut)
1066 *pPidlOut = _ILCreateDrive(szName);
1067 return S_OK;
1068 }
1069
1070 return m_regFolder->SetNameOf(hwndOwner, pidl, lpName, dwFlags, pPidlOut);
1071}
BOOL WINAPI SetVolumeLabelW(IN LPCWSTR lpRootPathName, IN LPCWSTR lpVolumeName OPTIONAL)
Definition: volume.c:503
static const WCHAR szName[]
Definition: powrprof.c:45
_In_ LPCSTR lpName
Definition: winbase.h:2814

◆ ShouldShow()

HRESULT WINAPI CDrivesFolder::ShouldShow ( IShellFolder psf,
PCIDLIST_ABSOLUTE  pidlFolder,
PCUITEMID_CHILD  pidlItem 
)
override

Implements IFolderFilter.

Definition at line 1232 of file CDrivesFolder.cpp.

1233{
1234 if (const CLSID* pClsid = IsRegItem(pidlItem))
1235 return SHELL32_IsShellFolderNamespaceItemHidden(L"HideMyComputerIcons", *pClsid) ? S_FALSE : S_OK;
1236 return S_OK;
1237}
static const CLSID * IsRegItem(PCUITEMID_CHILD pidl)
BOOL SHELL32_IsShellFolderNamespaceItemHidden(LPCWSTR SubKey, REFCLSID Clsid)
#define S_FALSE
Definition: winerror.h:2357

Member Data Documentation

◆ m_regFolder

◆ pidlRoot

LPITEMIDLIST CDrivesFolder::pidlRoot
private

The documentation for this class was generated from the following files: