ReactOS 0.4.17-dev-769-g1500a35
CAssocShellElement Class Reference
Inheritance diagram for CAssocShellElement:
Collaboration diagram for CAssocShellElement:

Public Member Functions

 ~CAssocShellElement ()
 
STDMETHODIMP QueryInterface (REFIID riid, PVOID *ppv) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
STDMETHODIMP QueryString (ASSOCQUERY query, PCWSTR key, PWSTR *ppszValue) override
 
STDMETHODIMP QueryDword (ASSOCQUERY query, PCWSTR key, DWORD *pdwValue) override
 
STDMETHODIMP QueryExists (ASSOCQUERY query, PCWSTR key) override
 
STDMETHODIMP QueryDirect (ASSOCQUERY query, PCWSTR key, FLAGGED_BYTE_BLOB **ppBlob) override
 
STDMETHODIMP QueryObject (ASSOCQUERY query, PCWSTR key, REFIID riid, PVOID *ppvObj) override
 
STDMETHODIMP GetClassID (CLSID *pClassID) override
 
STDMETHODIMP SetString (PCWSTR psz) override
 
STDMETHODIMP GetString (PWSTR *ppsz) override
 
virtual BOOL _UseEnumForDefaultVerb ()
 
virtual HRESULT _InitSource ()
 
virtual BOOL _IsAppSource ()
 
virtual HRESULT _GetVerbDelegate (PCWSTR pszSrc, IAssociationElementOld **ppElement)
 
- Public Member Functions inherited from CAssocElement
virtual ~CAssocElement ()
 
STDMETHODIMP QueryInterface (REFIID riid, PVOID *ppv) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
STDMETHODIMP SetSource (IQuerySourceOld *pSource) override
 
STDMETHODIMP GetSource (REFIID riid, PVOID *ppSource) override
 
STDMETHODIMP QueryString (ASSOCQUERY query, PCWSTR key, PWSTR *ppszValue) override
 
STDMETHODIMP QueryDword (ASSOCQUERY query, PCWSTR key, DWORD *pdwValue) override
 
STDMETHODIMP QueryExists (ASSOCQUERY query, PCWSTR key) override
 
STDMETHODIMP QueryDirect (ASSOCQUERY query, PCWSTR key, FLAGGED_BYTE_BLOB **ppBlob) override
 
STDMETHODIMP QueryObject (ASSOCQUERY query, PCWSTR key, REFIID riid, PVOID *ppvObj) override
 

Protected Member Functions

UINT _GetQueryKeyVal (const QUERYKEYVAL **ppItems) override
 
HRESULT _DefaultVerbSource (IQuerySourceOld **ppSource)
 
- Protected Member Functions inherited from CAssocElement
HRESULT _QueryKeyValAny (QUERY_CALLBACK callback, const QUERYKEYVAL *pItems, UINT cItems, IQuerySourceOld *pQS, ASSOCQUERY query, PCWSTR valueName, PVOID pValue)
 
HRESULT _QuerySourceAny (QUERY_CALLBACK callback, IQuerySourceOld *pSource, DWORD dwFlags, ASSOCQUERY query, PCWSTR valueName, PVOID pValue)
 
virtual UINT _GetQueryKeyVal (const QUERYKEYVAL **ppItems)
 

Protected Attributes

PWSTR m_pszName = NULL
 
WCHAR m_szBuff [64] = L""
 
- Protected Attributes inherited from CAssocElement
LONG m_cRefs = 1
 
IQuerySourceOld * m_pSource = NULL
 

Detailed Description

Definition at line 426 of file elements.cpp.

Constructor & Destructor Documentation

◆ ~CAssocShellElement()

CAssocShellElement::~CAssocShellElement ( )

Definition at line 777 of file elements.cpp.

778{
779 if (m_pszName && m_pszName != m_szBuff)
781}
WCHAR m_szBuff[64]
Definition: elements.cpp:432
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594

Member Function Documentation

◆ _DefaultVerbSource()

HRESULT CAssocShellElement::_DefaultVerbSource ( IQuerySourceOld **  ppSource)
protected

Definition at line 982 of file elements.cpp.

983{
984 IQuerySourceOld* pShellSource;
985 HRESULT hr = m_pSource->OpenSource(L"shell", FALSE, &pShellSource);
987 return hr;
988
990 PCWSTR pszVerb = L"open";
991 if (SUCCEEDED(pShellSource->QueryValueString(NULL, NULL, &pszValue)))
992 pszVerb = pszValue;
993
994 hr = pShellSource->OpenSource(pszVerb, FALSE, ppSource);
996 {
997 if (pszValue)
998 {
999 INT nDelim = StrCSpnW(pszValue, L" ,");
1000 if (nDelim != lstrlenW(pszValue))
1001 {
1002 pszValue[nDelim] = UNICODE_NULL;
1003 hr = pShellSource->OpenSource(pszValue, FALSE, ppSource);
1004 }
1005 }
1006 else
1007 {
1008 IEnumString* pEnum;
1009 if (_UseEnumForDefaultVerb() && SUCCEEDED(pShellSource->EnumSources(&pEnum)))
1010 {
1011 PWSTR pszFirst = NULL;
1012 ULONG cFetched = 0;
1013 if (SUCCEEDED(pEnum->Next(1, &pszFirst, &cFetched)))
1014 {
1015 hr = pShellSource->OpenSource(pszFirst, FALSE, ppSource);
1016 CoTaskMemFree(pszFirst);
1017 }
1018 pEnum->Release();
1019 }
1020 }
1021 }
1022
1023 if (pszValue)
1025
1026 pShellSource->Release();
1027 return hr;
1028}
IQuerySourceOld * m_pSource
Definition: elements.cpp:383
virtual BOOL _UseEnumForDefaultVerb()
Definition: elements.cpp:821
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
int WINAPI StrCSpnW(LPCWSTR lpszStr, LPCWSTR lpszMatch)
Definition: string.c:839
#define lstrlenW
Definition: compat.h:750
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
#define L(x)
Definition: resources.c:13
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLESTR *rgelt, [out] ULONG *pceltFetched)
ULONG Release()
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define UNICODE_NULL
_In_opt_ LPCSTR _In_opt_ LPCSTR pszValue
Definition: shlwapi.h:783
uint16_t * PWSTR
Definition: typedefs.h:56
const uint16_t * PCWSTR
Definition: typedefs.h:57
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59

Referenced by _GetVerbDelegate().

◆ _GetQueryKeyVal()

UINT CAssocShellElement::_GetQueryKeyVal ( const QUERYKEYVAL **  ppItems)
overrideprotectedvirtual

Reimplemented from CAssocElement.

Reimplemented in CAssocApplicationElement, and CAssocPerceivedElement.

Definition at line 815 of file elements.cpp.

816{
817 *ppItems = g_shellKeyVals;
818 return _countof(g_shellKeyVals);
819}
static const QUERYKEYVAL g_shellKeyVals[]
Definition: elements.cpp:43
#define _countof(array)
Definition: sndvol32.h:70

◆ _GetVerbDelegate()

HRESULT CAssocShellElement::_GetVerbDelegate ( PCWSTR  pszSrc,
IAssociationElementOld **  ppElement 
)
virtual

Reimplemented in CAssocPerceivedElement.

Definition at line 831 of file elements.cpp.

832{
833 if (!m_pSource)
834 return E_FAIL;
835
836 HRESULT hr;
837 IQuerySourceOld* pSource;
838 if (pszSrc)
839 hr = QSOpen2(m_pSource, L"shell", pszSrc, 0, &pSource);
840 else
841 hr = _DefaultVerbSource(&pSource);
842
844 return hr;
845
846 BOOL bAppSource = _IsAppSource();
847 auto pElement = new(std::nothrow) CAssocShellVerbElement(bAppSource);
848 if (!pElement)
849 {
850 ERR("E_OUTOFMEMORY\n");
851 pSource->Release();
852 return E_OUTOFMEMORY;
853 }
854
855 hr = pElement->SetSource(pSource);
856 *ppElement = static_cast<IAssociationElementOld*>(pElement);
857 pSource->Release();
858 return hr;
859}
#define ERR(fmt,...)
Definition: precomp.h:57
virtual BOOL _IsAppSource()
Definition: elements.cpp:826
HRESULT _DefaultVerbSource(IQuerySourceOld **ppSource)
Definition: elements.cpp:982
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_FAIL
Definition: ddrawi.h:102
static HRESULT QSOpen2(IQuerySourceOld *pSource, PCWSTR key, PCWSTR pszSrc, BOOL bCreate, IQuerySourceOld **ppSource)
Definition: elements.cpp:106
unsigned int BOOL
Definition: ntddk_ex.h:94

Referenced by CAssocPerceivedElement::_GetVerbDelegate(), QueryDirect(), QueryDword(), QueryExists(), QueryObject(), QueryString(), and CAssocClientElement::QueryString().

◆ _InitSource()

HRESULT CAssocShellElement::_InitSource ( )
virtual

Reimplemented in CAssocApplicationElement, CAssocProgidElement, CAssocClsidElement, CAssocSystemExtElement, CAssocFolderElement, CAssocStarElement, CAssocPerceivedElement, and CAssocClientElement.

Definition at line 810 of file elements.cpp.

811{
813}
static HRESULT _QuerySourceCreateFromKey(HKEY hKey, PCWSTR lpSubKey, BOOL bCreate, IQuerySourceOld **ppSource)
Definition: elements.cpp:205
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by SetString().

◆ _IsAppSource()

BOOL CAssocShellElement::_IsAppSource ( )
virtual

Definition at line 826 of file elements.cpp.

827{
828 return FALSE;
829}

Referenced by _GetVerbDelegate().

◆ _UseEnumForDefaultVerb()

BOOL CAssocShellElement::_UseEnumForDefaultVerb ( )
virtual

Reimplemented in CAssocProgidElement.

Definition at line 821 of file elements.cpp.

822{
823 return FALSE;
824}

Referenced by _DefaultVerbSource().

◆ GetClassID()

STDMETHODIMP CAssocShellElement::GetClassID ( CLSID pClassID)
override

Definition at line 945 of file elements.cpp.

946{
947 *pClassID = CLSID_AssocShellElement;
948 return S_OK;
949}
#define S_OK
Definition: intsafe.h:52

◆ GetString()

STDMETHODIMP CAssocShellElement::GetString ( PWSTR ppsz)
override

Definition at line 977 of file elements.cpp.

978{
979 return SHStrDupW(m_pszName, ppsz);
980}
HRESULT WINAPI SHStrDupW(const WCHAR *src, WCHAR **dest)
Definition: main.c:1692

◆ QueryDirect()

STDMETHODIMP CAssocShellElement::QueryDirect ( ASSOCQUERY  query,
PCWSTR  key,
FLAGGED_BYTE_BLOB **  ppBlob 
)
override

Definition at line 907 of file elements.cpp.

908{
910 return CAssocElement::QueryDirect(query, key, ppBlob);
911
912 IAssociationElementOld* pDelegate;
913 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
915 return hr;
916
917 hr = pDelegate->QueryDirect(query, NULL, ppBlob);
918 pDelegate->Release();
919 return hr;
920}
STDMETHODIMP QueryDirect(ASSOCQUERY query, PCWSTR key, FLAGGED_BYTE_BLOB **ppBlob) override
Definition: elements.cpp:761
virtual HRESULT _GetVerbDelegate(PCWSTR pszSrc, IAssociationElementOld **ppElement)
Definition: elements.cpp:831
#define ASSOCQUERY_EXTRA_VERB
Definition: shlobj_undoc.h:43
Definition: copy.c:22

◆ QueryDword()

STDMETHODIMP CAssocShellElement::QueryDword ( ASSOCQUERY  query,
PCWSTR  key,
DWORD pdwValue 
)
override

Definition at line 876 of file elements.cpp.

877{
879 return CAssocElement::QueryDword(query, key, pdwValue);
880
881 IAssociationElementOld* pDelegate;
882 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
884 return hr;
885
886 hr = pDelegate->QueryDword(query, NULL, pdwValue);
887 pDelegate->Release();
888 return hr;
889}
STDMETHODIMP QueryDword(ASSOCQUERY query, PCWSTR key, DWORD *pdwValue) override
Definition: elements.cpp:749

◆ QueryExists()

STDMETHODIMP CAssocShellElement::QueryExists ( ASSOCQUERY  query,
PCWSTR  key 
)
override

Definition at line 891 of file elements.cpp.

892{
895
896 IAssociationElementOld* pDelegate;
897 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
899 return hr;
900
901 hr = pDelegate->QueryExists(query, NULL);
902 pDelegate->Release();
903 return hr;
904}
STDMETHODIMP QueryExists(ASSOCQUERY query, PCWSTR key) override
Definition: elements.cpp:755

Referenced by CAssocClientElement::_InitSourceFromKey().

◆ QueryInterface()

STDMETHODIMP CAssocShellElement::QueryInterface ( REFIID  riid,
PVOID ppv 
)
override

Definition at line 783 of file elements.cpp.

784{
785 if (riid == IID_IPersist)
786 {
787 *ppv = static_cast<IPersist*>(this);
788 AddRef();
789 return S_OK;
790 }
791 if (riid == IID_IPersistString2)
792 {
793 *ppv = static_cast<IPersistString2*>(this);
794 AddRef();
795 return S_OK;
796 }
798}
STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppv) override
Definition: elements.cpp:691
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:83
const GUID IID_IPersist
Definition: proxy.cpp:14

◆ QueryObject()

STDMETHODIMP CAssocShellElement::QueryObject ( ASSOCQUERY  query,
PCWSTR  key,
REFIID  riid,
PVOID ppvObj 
)
override

Definition at line 923 of file elements.cpp.

924{
926 {
927 *ppvObj = NULL;
928 return E_INVALIDARG;
929 }
930
931 IAssociationElementOld* pDelegate;
932 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
934 return hr;
935
937 hr = pDelegate->QueryInterface(riid, ppvObj);
938 else
939 hr = pDelegate->QueryObject(query, NULL, riid, ppvObj);
940
941 pDelegate->Release();
942 return hr;
943}
#define E_INVALIDARG
Definition: ddrawi.h:101
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define ASSOCQUERY_OBJECT
Definition: shlobj_undoc.h:40

Referenced by CAssocApplicationElement::QueryObject().

◆ QueryString()

STDMETHODIMP CAssocShellElement::QueryString ( ASSOCQUERY  query,
PCWSTR  key,
PWSTR ppszValue 
)
override

Definition at line 861 of file elements.cpp.

862{
864 return CAssocElement::QueryString(query, key, ppszValue);
865
866 IAssociationElementOld* pDelegate;
867 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
869 return hr;
870
871 hr = pDelegate->QueryString(query, NULL, ppszValue);
872 pDelegate->Release();
873 return hr;
874}
STDMETHODIMP QueryString(ASSOCQUERY query, PCWSTR key, PWSTR *ppszValue) override
Definition: elements.cpp:742

Referenced by CAssocApplicationElement::QueryString(), CAssocProgidElement::QueryString(), CAssocFolderElement::QueryString(), CAssocStarElement::QueryString(), and CAssocClientElement::QueryString().

◆ SetString()

STDMETHODIMP CAssocShellElement::SetString ( PCWSTR  psz)
override

Definition at line 951 of file elements.cpp.

952{
953 if (m_pszName)
954 return E_UNEXPECTED;
955
956 UINT cchBuff, cchString = lstrlenW(psz);
957 PWSTR pszBuff;
958 if (cchString >= _countof(m_szBuff))
959 {
960 cchBuff = cchString + 1;
961 pszBuff = (PWSTR)LocalAlloc(LPTR, cchBuff * sizeof(WCHAR));
962 }
963 else
964 {
965 pszBuff = m_szBuff;
966 cchBuff = _countof(m_szBuff);
967 }
968
969 m_pszName = pszBuff;
970 if (!m_pszName)
971 return E_UNEXPECTED;
972
973 StringCchCopyW(pszBuff, cchBuff, psz);
974 return _InitSource();
975}
virtual HRESULT _InitSource()
Definition: elements.cpp:810
unsigned int UINT
Definition: sysinfo.c:13
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
#define LPTR
Definition: minwinbase.h:93
short WCHAR
Definition: pedump.c:58
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
#define E_UNEXPECTED
Definition: winerror.h:3528

◆ STDMETHODIMP_() [1/2]

CAssocShellElement::STDMETHODIMP_ ( ULONG  )
override

◆ STDMETHODIMP_() [2/2]

CAssocShellElement::STDMETHODIMP_ ( ULONG  )
override

Member Data Documentation

◆ m_pszName

◆ m_szBuff

WCHAR CAssocShellElement::m_szBuff[64] = L""
protected

Definition at line 432 of file elements.cpp.

Referenced by SetString(), and ~CAssocShellElement().


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