ReactOS 0.4.15-dev-6057-gd708c79
CRegFolder Class Reference
Inheritance diagram for CRegFolder:
Collaboration diagram for CRegFolder:

Public Member Functions

 CRegFolder ()
 
 ~CRegFolder ()
 
HRESULT WINAPI Initialize (const GUID *pGuid, LPCITEMIDLIST pidlRoot, LPCWSTR lpszPath, LPCWSTR lpszEnumKeyName)
 
virtual HRESULT WINAPI ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten, PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes)
 
virtual HRESULT WINAPI EnumObjects (HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
 
virtual HRESULT WINAPI BindToObject (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
 
virtual HRESULT WINAPI BindToStorage (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
 
virtual HRESULT WINAPI CompareIDs (LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
 
virtual HRESULT WINAPI CreateViewObject (HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
 
virtual HRESULT WINAPI GetAttributesOf (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
 
virtual HRESULT WINAPI GetUIObjectOf (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut)
 
virtual HRESULT WINAPI GetDisplayNameOf (PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
 
virtual HRESULT WINAPI SetNameOf (HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
 
virtual HRESULT WINAPI GetDefaultSearchGUID (GUID *pguid)
 
virtual HRESULT WINAPI EnumSearches (IEnumExtraSearch **ppenum)
 
virtual HRESULT WINAPI GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
 
virtual HRESULT WINAPI GetDefaultColumnState (UINT iColumn, DWORD *pcsFlags)
 
virtual HRESULT WINAPI GetDetailsEx (PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
 
virtual HRESULT WINAPI GetDetailsOf (PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
 
virtual HRESULT WINAPI MapColumnToSCID (UINT column, SHCOLUMNID *pscid)
 
- 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 ()
 

Private Member Functions

HRESULT GetGuidItemAttributes (LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
 

Private Attributes

GUID m_guid
 
CAtlStringW m_rootPath
 
CAtlStringW m_enumKeyName
 
CComHeapPtr< ITEMIDLISTm_pidlRoot
 

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
 
- 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 284 of file CRegFolder.cpp.

Constructor & Destructor Documentation

◆ CRegFolder()

CRegFolder::CRegFolder ( )

Definition at line 331 of file CRegFolder.cpp.

332{
333}

◆ ~CRegFolder()

CRegFolder::~CRegFolder ( )

Definition at line 335 of file CRegFolder.cpp.

336{
337}

Member Function Documentation

◆ BindToObject()

HRESULT WINAPI CRegFolder::BindToObject ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
virtual

Definition at line 430 of file CRegFolder.cpp.

431{
432 CComPtr<IPersistFolder> pFolder;
433 HRESULT hr;
434
435 if (!ppvOut || !pidl || !pidl->mkid.cb)
436 return E_INVALIDARG;
437
438 *ppvOut = NULL;
439
440 GUID *pGUID = _ILGetGUIDPointer(pidl);
441 if (!pGUID)
442 {
443 ERR("CRegFolder::BindToObject called for non guid item!\n");
444 return E_INVALIDARG;
445 }
446
447 hr = SHELL32_BindToSF(m_pidlRoot, NULL, pidl, pGUID, riid, ppvOut);
449 return hr;
450
451 return S_OK;
452}
#define ERR(fmt,...)
Definition: debug.h:110
CComHeapPtr< ITEMIDLIST > m_pidlRoot
Definition: CRegFolder.cpp:292
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2329
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
HRESULT SHELL32_BindToSF(LPCITEMIDLIST pidlRoot, PERSIST_FOLDER_TARGET_INFO *ppfti, LPCITEMIDLIST pidl, const GUID *clsid, REFIID riid, LPVOID *ppvOut)
Definition: shlfolder.cpp:160
HRESULT hr
Definition: shlfolder.c:183

◆ BindToStorage()

HRESULT WINAPI CRegFolder::BindToStorage ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
virtual

Definition at line 454 of file CRegFolder.cpp.

455{
456 return E_NOTIMPL;
457}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ CompareIDs()

HRESULT WINAPI CRegFolder::CompareIDs ( LPARAM  lParam,
PCUIDLIST_RELATIVE  pidl1,
PCUIDLIST_RELATIVE  pidl2 
)
virtual

Implements IShellFolder.

Definition at line 459 of file CRegFolder.cpp.

460{
461 if (!pidl1 || !pidl2 || pidl1->mkid.cb == 0 || pidl2->mkid.cb == 0)
462 {
463 ERR("Got an empty pidl!\n");
464 return E_INVALIDARG;
465 }
466
467 GUID const *clsid1 = _ILGetGUIDPointer (pidl1);
468 GUID const *clsid2 = _ILGetGUIDPointer (pidl2);
469
470 if (!clsid1 && !clsid2)
471 {
472 ERR("Got no guid pidl!\n");
473 return E_INVALIDARG;
474 }
475 else if (clsid1 && clsid2)
476 {
477 if (memcmp(clsid1, clsid2, sizeof(GUID)) == 0)
478 return SHELL32_CompareChildren(this, lParam, pidl1, pidl2);
479
480 return SHELL32_CompareDetails(this, lParam, pidl1, pidl2);
481 }
482
483 /* Guid folders come first compared to everything else */
484 /* And Drives come before folders in My Computer */
486 {
487 return MAKE_COMPARE_HRESULT(clsid1 ? 1 : -1);
488 }
489 else
490 {
491 return MAKE_COMPARE_HRESULT(clsid1 ? -1 : 1);
492 }
493}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
LPARAM lParam
Definition: combotst.c:139
BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
Definition: pidl.c:1935
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:561
HRESULT SHELL32_CompareChildren(IShellFolder2 *psf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:216
HRESULT SHELL32_CompareDetails(IShellFolder2 *isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: shlfolder.cpp:239

◆ CreateViewObject()

HRESULT WINAPI CRegFolder::CreateViewObject ( HWND  hwndOwner,
REFIID  riid,
LPVOID ppvOut 
)
virtual

Definition at line 495 of file CRegFolder.cpp.

496{
497 return E_NOTIMPL;
498}

◆ EnumObjects()

HRESULT WINAPI CRegFolder::EnumObjects ( HWND  hwndOwner,
DWORD  dwFlags,
LPENUMIDLIST *  ppEnumIDList 
)
virtual

Definition at line 425 of file CRegFolder.cpp.

426{
427 return ShellObjectCreatorInit<CRegFolderEnum>(m_enumKeyName, dwFlags, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
428}
CAtlStringW m_enumKeyName
Definition: CRegFolder.cpp:291
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
#define IID_PPV_ARG(Itype, ppType)

◆ EnumSearches()

HRESULT WINAPI CRegFolder::EnumSearches ( IEnumExtraSearch **  ppenum)
virtual

Implements IShellFolder2.

Definition at line 717 of file CRegFolder.cpp.

718{
719 return E_NOTIMPL;
720}

◆ GetAttributesOf()

HRESULT WINAPI CRegFolder::GetAttributesOf ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
DWORD rgfInOut 
)
virtual

Definition at line 500 of file CRegFolder.cpp.

501{
502 if (!rgfInOut || !cidl || !apidl)
503 return E_INVALIDARG;
504
505 if (*rgfInOut == 0)
506 *rgfInOut = ~0;
507
508 while(cidl > 0 && *apidl)
509 {
510 if (_ILIsSpecialFolder(*apidl))
511 GetGuidItemAttributes(*apidl, rgfInOut);
512 else
513 ERR("Got an unkown pidl here!\n");
514 apidl++;
515 cidl--;
516 }
517
518 /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
519 *rgfInOut &= ~SFGAO_VALIDATE;
520
521 return S_OK;
522}
HRESULT GetGuidItemAttributes(LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
Definition: CRegFolder.cpp:358
static BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)

◆ GetDefaultColumn()

HRESULT WINAPI CRegFolder::GetDefaultColumn ( DWORD  dwRes,
ULONG pSort,
ULONG pDisplay 
)
virtual

Implements IShellFolder2.

Definition at line 722 of file CRegFolder.cpp.

723{
724 if (pSort)
725 *pSort = 0;
726 if (pDisplay)
727 *pDisplay = 0;
728
729 return S_OK;
730}

◆ GetDefaultColumnState()

HRESULT WINAPI CRegFolder::GetDefaultColumnState ( UINT  iColumn,
DWORD pcsFlags 
)
virtual

Implements IShellFolder2.

Definition at line 732 of file CRegFolder.cpp.

733{
734 if (iColumn >= REGISTRY_COL_COUNT)
735 return E_INVALIDARG;
737 return S_OK;
738}
@ REGISTRY_COL_COUNT
Definition: CRegFolder.cpp:220
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125

◆ GetDefaultSearchGUID()

HRESULT WINAPI CRegFolder::GetDefaultSearchGUID ( GUID pguid)
virtual

Implements IShellFolder2.

Definition at line 712 of file CRegFolder.cpp.

713{
714 return E_NOTIMPL;
715}

◆ GetDetailsEx()

HRESULT WINAPI CRegFolder::GetDetailsEx ( PCUITEMID_CHILD  pidl,
const SHCOLUMNID pscid,
VARIANT pv 
)
virtual

Implements IShellFolder2.

Definition at line 740 of file CRegFolder.cpp.

741{
742 return E_NOTIMPL;
743}

◆ GetDetailsOf()

HRESULT WINAPI CRegFolder::GetDetailsOf ( PCUITEMID_CHILD  pidl,
UINT  iColumn,
SHELLDETAILS psd 
)
virtual

Implements IShellFolder2.

Definition at line 745 of file CRegFolder.cpp.

746{
747 if (!psd)
748 return E_INVALIDARG;
749
750 GUID const *clsid = _ILGetGUIDPointer (pidl);
751
752 if (!clsid)
753 {
754 ERR("Pidl is not reg item!\n");
755 return E_INVALIDARG;
756 }
757
758 switch(iColumn)
759 {
761 return GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
763 return SHSetStrRet(&psd->str, IDS_SYSTEMFOLDER);
765 HKEY hKey;
767 return SHSetStrRet(&psd->str, "");
768
769 psd->str.cStr[0] = 0x00;
770 psd->str.uType = STRRET_CSTR;
771 RegLoadMUIStringA(hKey, "InfoTip", psd->str.cStr, MAX_PATH, NULL, 0, NULL);
773 return S_OK;
774 default:
775 /* Return an empty string when we area asked for a column we don't support.
776 Only the regfolder is supposed to do this as it supports less columns compared to other folder
777 and its contents are supposed to be presented alongside items that support more columns. */
778 return SHSetStrRet(&psd->str, "");
779 }
780 return E_FAIL;
781}
@ REGISTRY_COL_TYPE
Definition: CRegFolder.cpp:218
@ REGISTRY_COL_NAME
Definition: CRegFolder.cpp:217
@ REGISTRY_COL_VALUE
Definition: CRegFolder.cpp:219
LONG WINAPI RegLoadMUIStringA(IN HKEY hKey, IN LPCSTR pszValue OPTIONAL, OUT LPSTR pszOutBuf, IN DWORD cbOutBuf, OUT LPDWORD pcbData OPTIONAL, IN DWORD Flags, IN LPCSTR pszDirectory OPTIONAL)
#define RegCloseKey(hKey)
Definition: registry.h:47
virtual HRESULT WINAPI GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: CRegFolder.cpp:563
#define E_FAIL
Definition: ddrawi.h:102
#define MAX_PATH
Definition: compat.h:34
FxAutoRegKey hKey
REFCLSID clsid
Definition: msctf.c:82
BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
Definition: classes.c:227
#define IDS_SYSTEMFOLDER
Definition: shresdef.h:331
@ 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

◆ GetDisplayNameOf()

HRESULT WINAPI CRegFolder::GetDisplayNameOf ( PCUITEMID_CHILD  pidl,
DWORD  dwFlags,
LPSTRRET  strRet 
)
virtual

Definition at line 563 of file CRegFolder.cpp.

564{
565 if (!strRet || (!_ILIsSpecialFolder(pidl) && pidl != NULL))
566 return E_INVALIDARG;
567
568 if (!pidl || !pidl->mkid.cb)
569 {
571 {
572 LPWSTR pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
573 if (!pszPath)
574 return E_OUTOFMEMORY;
575
576 /* parsing name like ::{...} */
577 pszPath[0] = ':';
578 pszPath[1] = ':';
579 SHELL32_GUIDToStringW(m_guid, &pszPath[2]);
580
581 strRet->uType = STRRET_WSTR;
582 strRet->pOleStr = pszPath;
583
584 return S_OK;
585 }
586 else
587 {
588 BOOL bRet;
589 WCHAR wstrName[MAX_PATH+1];
590 bRet = HCR_GetClassNameW(m_guid, wstrName, MAX_PATH);
591 if (!bRet)
592 return E_FAIL;
593
594 return SHSetStrRet(strRet, wstrName);
595
596 }
597 }
598
599 HRESULT hr;
600 GUID const *clsid = _ILGetGUIDPointer (pidl);
601
602 /* First of all check if we need to query the name from the child item */
605 {
606 int bWantsForParsing = FALSE;
607
608 /*
609 * We can only get a filesystem path from a shellfolder if the
610 * value WantsFORPARSING in CLSID\\{...}\\shellfolder exists.
611 *
612 * Exception: The MyComputer folder doesn't have this key,
613 * but any other filesystem backed folder it needs it.
614 */
615 if (IsEqualIID (*clsid, CLSID_MyComputer))
616 {
617 bWantsForParsing = TRUE;
618 }
619 else
620 {
621 HKEY hkeyClass;
622 if (HCR_RegOpenClassIDKey(*clsid, &hkeyClass))
623 {
624 LONG res = SHGetValueW(hkeyClass, L"Shellfolder", L"WantsForParsing", NULL, NULL, NULL);
625 bWantsForParsing = (res == ERROR_SUCCESS);
626 RegCloseKey(hkeyClass);
627 }
628 }
629
630 if (bWantsForParsing)
631 {
632 /*
633 * we need the filesystem path to the destination folder.
634 * Only the folder itself can know it
635 */
636 return SHELL32_GetDisplayNameOfChild (this, pidl, dwFlags, strRet);
637 }
638 }
639
640 /* Allocate the buffer for the result */
641 LPWSTR pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
642 if (!pszPath)
643 return E_OUTOFMEMORY;
644
645 hr = S_OK;
646
648 {
649 wcscpy(pszPath, m_rootPath);
650 PWCHAR pItemName = &pszPath[wcslen(pszPath)];
651
652 /* parsing name like ::{...} */
653 pItemName[0] = ':';
654 pItemName[1] = ':';
655 SHELL32_GUIDToStringW (*clsid, &pItemName[2]);
656 }
657 else
658 {
659 /* user friendly name */
660 if (!HCR_GetClassNameW (*clsid, pszPath, MAX_PATH))
661 hr = E_FAIL;
662 }
663
664 if (SUCCEEDED(hr))
665 {
666 strRet->uType = STRRET_WSTR;
667 strRet->pOleStr = pszPath;
668 }
669 else
670 {
671 CoTaskMemFree(pszPath);
672 }
673
674 return hr;
675}
CAtlStringW m_rootPath
Definition: CRegFolder.cpp:290
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define ERROR_SUCCESS
Definition: deptool.c:10
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GET_SHGDN_RELATION(dwFlags)
Definition: precomp.h:53
#define GET_SHGDN_FOR(dwFlags)
Definition: precomp.h:52
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint res
Definition: glext.h:9613
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 L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len)
Definition: classes.c:342
HRESULT SHELL32_GetDisplayNameOfChild(IShellFolder2 *psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: shlfolder.cpp:198
static __inline int SHELL32_GUIDToStringW(REFGUID guid, LPWSTR str)
Definition: shfldr.h:81
@ STRRET_WSTR
Definition: shtypes.idl:85
LPWSTR pOleStr
Definition: shtypes.idl:96
uint16_t * PWCHAR
Definition: typedefs.h:56
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by GetDetailsOf().

◆ GetGuidItemAttributes()

HRESULT CRegFolder::GetGuidItemAttributes ( LPCITEMIDLIST  pidl,
LPDWORD  pdwAttributes 
)
private

Definition at line 358 of file CRegFolder.cpp.

359{
360 DWORD dwAttributes = *pdwAttributes;
361
362 /* First try to get them from the registry */
363 if (!HCR_GetFolderAttributes(pidl, pdwAttributes))
364 {
365 /* We couldn't get anything */
366 *pdwAttributes = 0;
367 }
368
369 /* Items have more attributes when on desktop */
371 {
372 *pdwAttributes |= (dwAttributes & (SFGAO_CANLINK|SFGAO_CANDELETE|SFGAO_CANRENAME|SFGAO_HASPROPSHEET));
373 }
374
375 /* In any case, links can be created */
376 if (*pdwAttributes == NULL)
377 {
378 *pdwAttributes |= (dwAttributes & SFGAO_CANLINK);
379 }
380 return S_OK;
381}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD pdwAttributes)
Definition: classes.c:510
DWORD dwAttributes
Definition: vdmdbg.h:34

Referenced by GetAttributesOf(), and ParseDisplayName().

◆ GetUIObjectOf()

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

Definition at line 524 of file CRegFolder.cpp.

526{
527 LPVOID pObj = NULL;
529
530 if (!ppvOut)
531 return hr;
532
533 *ppvOut = NULL;
534
535 if ((IsEqualIID (riid, IID_IExtractIconA) || IsEqualIID (riid, IID_IExtractIconW)) && (cidl == 1))
536 {
537 hr = CGuidItemExtractIcon_CreateInstance(apidl[0], riid, &pObj);
538 }
539 else if (IsEqualIID (riid, IID_IContextMenu) && (cidl >= 1))
540 {
541 if (!_ILGetGUIDPointer (apidl[0]))
542 {
543 ERR("Got non guid item!\n");
544 return E_FAIL;
545 }
546
547 hr = CGuidItemContextMenu_CreateInstance(m_pidlRoot, hwndOwner, cidl, apidl, static_cast<IShellFolder*>(this), (IContextMenu**)&pObj);
548 }
549 else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1))
550 {
551 hr = IDataObject_Constructor (hwndOwner, m_pidlRoot, apidl, cidl, TRUE, (IDataObject **)&pObj);
552 }
553 else
554 {
556 }
557
558 *ppvOut = pObj;
559 return hr;
560
561}
HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, BOOL bExtendedObject, IDataObject **dataObject)
HRESULT CGuidItemExtractIcon_CreateInstance(LPCITEMIDLIST pidl, REFIID iid, LPVOID *ppvOut)
Definition: CRegFolder.cpp:126
HRESULT CGuidItemContextMenu_CreateInstance(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, IContextMenu **ppcm)
Definition: CRegFolder.cpp:97
const GUID IID_IDataObject
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ Initialize()

HRESULT WINAPI CRegFolder::Initialize ( const GUID pGuid,
LPCITEMIDLIST  pidlRoot,
LPCWSTR  lpszPath,
LPCWSTR  lpszEnumKeyName 
)

Definition at line 339 of file CRegFolder.cpp.

340{
341 memcpy(&m_guid, pGuid, sizeof(m_guid));
342
343 m_rootPath = lpszPath;
344 if (!m_rootPath)
345 return E_OUTOFMEMORY;
346
347 m_enumKeyName = lpszEnumKeyName;
348 if (!m_enumKeyName)
349 return E_OUTOFMEMORY;
350
351 m_pidlRoot.Attach(ILClone(pidlRoot));
352 if (!m_pidlRoot)
353 return E_OUTOFMEMORY;
354
355 return S_OK;
356}
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228

◆ MapColumnToSCID()

HRESULT WINAPI CRegFolder::MapColumnToSCID ( UINT  column,
SHCOLUMNID pscid 
)
virtual

Implements IShellFolder2.

Definition at line 783 of file CRegFolder.cpp.

784{
785 return E_NOTIMPL;
786}

◆ ParseDisplayName()

HRESULT WINAPI CRegFolder::ParseDisplayName ( HWND  hwndOwner,
LPBC  pbc,
LPOLESTR  lpszDisplayName,
ULONG pchEaten,
PIDLIST_RELATIVE ppidl,
ULONG pdwAttributes 
)
virtual

Implements IShellFolder.

Definition at line 383 of file CRegFolder.cpp.

385{
386 LPITEMIDLIST pidl;
387
388 if (!lpszDisplayName || !ppidl)
389 return E_INVALIDARG;
390
391 *ppidl = 0;
392
393 if (pchEaten)
394 *pchEaten = 0;
395
396 UINT cch = wcslen(lpszDisplayName);
397 if (cch < 39 || lpszDisplayName[0] != L':' || lpszDisplayName[1] != L':')
398 return E_FAIL;
399
400 pidl = _ILCreateGuidFromStrW(lpszDisplayName + 2);
401 if (pidl == NULL)
402 return E_FAIL;
403
404 if (cch < 41)
405 {
406 *ppidl = pidl;
407 if (pdwAttributes && *pdwAttributes)
408 {
409 GetGuidItemAttributes(*ppidl, pdwAttributes);
410 }
411 }
412 else
413 {
414 HRESULT hr = SHELL32_ParseNextElement(this, hwndOwner, pbc, &pidl, lpszDisplayName + 41, pchEaten, pdwAttributes);
415 if (SUCCEEDED(hr))
416 {
417 *ppidl = pidl;
418 }
419 return hr;
420 }
421
422 return S_OK;
423}
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
unsigned int UINT
Definition: ndis.h:50
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
Definition: pidl.c:1729
HRESULT SHELL32_ParseNextElement(IShellFolder2 *psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST *pidlInOut, LPOLESTR szNext, DWORD *pEaten, DWORD *pdwAttributes)
Definition: shlfolder.cpp:71
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41

◆ SetNameOf()

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

Implements IShellFolder.

Definition at line 677 of file CRegFolder.cpp.

679{
680 GUID const *clsid = _ILGetGUIDPointer (pidl);
681 LPOLESTR pStr;
682 HRESULT hr;
683 WCHAR szName[100];
684
685 if (!clsid)
686 {
687 ERR("Pidl is not reg item!\n");
688 return E_FAIL;
689 }
690
691 hr = StringFromCLSID(*clsid, &pStr);
693 return hr;
694
695 swprintf(szName, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\%s", pStr);
696
697 DWORD cbData = (wcslen(lpName) + 1) * sizeof(WCHAR);
699
700 CoTaskMemFree(pStr);
701
702 if (res == ERROR_SUCCESS)
703 {
704 *pPidlOut = ILClone(pidl);
705 return S_OK;
706 }
707
708 return E_FAIL;
709}
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
Definition: compobj.c:2412
#define RRF_RT_REG_SZ
Definition: driver.c:575
DWORD WINAPI SHSetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD dwType, LPCVOID pvData, DWORD cbData)
Definition: reg.c:1306
#define swprintf
Definition: precomp.h:40
static LPOLESTR
Definition: stg_prop.c:27
static const WCHAR szName[]
Definition: powrprof.c:45
_In_ LPCSTR lpName
Definition: winbase.h:2776
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Member Data Documentation

◆ m_enumKeyName

CAtlStringW CRegFolder::m_enumKeyName
private

Definition at line 291 of file CRegFolder.cpp.

Referenced by EnumObjects(), and Initialize().

◆ m_guid

GUID CRegFolder::m_guid
private

Definition at line 289 of file CRegFolder.cpp.

Referenced by GetDisplayNameOf(), and Initialize().

◆ m_pidlRoot

CComHeapPtr<ITEMIDLIST> CRegFolder::m_pidlRoot
private

◆ m_rootPath

CAtlStringW CRegFolder::m_rootPath
private

Definition at line 290 of file CRegFolder.cpp.

Referenced by GetDisplayNameOf(), and Initialize().


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