ReactOS 0.4.17-dev-444-g71ee754
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 449 of file elements.cpp.

Constructor & Destructor Documentation

◆ ~CAssocShellElement()

CAssocShellElement::~CAssocShellElement ( )

Definition at line 800 of file elements.cpp.

801{
802 if (m_pszName && m_pszName != m_szBuff)
804}
WCHAR m_szBuff[64]
Definition: elements.cpp:455
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594

Member Function Documentation

◆ _DefaultVerbSource()

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

Definition at line 1005 of file elements.cpp.

1006{
1007 IQuerySourceOld* pShellSource;
1008 HRESULT hr = m_pSource->OpenSource(L"shell", FALSE, &pShellSource);
1010 return hr;
1011
1013 PCWSTR pszVerb = L"open";
1014 if (SUCCEEDED(pShellSource->QueryValueString(NULL, NULL, &pszValue)))
1015 pszVerb = pszValue;
1016
1017 hr = pShellSource->OpenSource(pszVerb, FALSE, ppSource);
1019 {
1020 if (pszValue)
1021 {
1022 INT nDelim = StrCSpnW(pszValue, L" ,");
1023 if (nDelim != lstrlenW(pszValue))
1024 {
1025 pszValue[nDelim] = UNICODE_NULL;
1026 hr = pShellSource->OpenSource(pszValue, FALSE, ppSource);
1027 }
1028 }
1029 else
1030 {
1031 IEnumString* pEnum;
1032 if (_UseEnumForDefaultVerb() && SUCCEEDED(pShellSource->EnumSources(&pEnum)))
1033 {
1034 PWSTR pszFirst = NULL;
1035 ULONG cFetched = 0;
1036 if (SUCCEEDED(pEnum->Next(1, &pszFirst, &cFetched)))
1037 {
1038 hr = pShellSource->OpenSource(pszFirst, FALSE, ppSource);
1039 CoTaskMemFree(pszFirst);
1040 }
1041 pEnum->Release();
1042 }
1043 }
1044 }
1045
1046 if (pszValue)
1048
1049 pShellSource->Release();
1050 return hr;
1051}
IQuerySourceOld * m_pSource
Definition: elements.cpp:406
virtual BOOL _UseEnumForDefaultVerb()
Definition: elements.cpp:844
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 838 of file elements.cpp.

839{
840 *ppItems = g_shellKeyVals;
841 return _countof(g_shellKeyVals);
842}
static const QUERYKEYVAL g_shellKeyVals[]
Definition: elements.cpp:66
#define _countof(array)
Definition: sndvol32.h:70

◆ _GetVerbDelegate()

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

Reimplemented in CAssocPerceivedElement.

Definition at line 854 of file elements.cpp.

855{
856 if (!m_pSource)
857 return E_FAIL;
858
859 HRESULT hr;
860 IQuerySourceOld* pSource;
861 if (pszSrc)
862 hr = QSOpen2(m_pSource, L"shell", pszSrc, 0, &pSource);
863 else
864 hr = _DefaultVerbSource(&pSource);
865
867 return hr;
868
869 BOOL bAppSource = _IsAppSource();
870 auto pElement = new(std::nothrow) CAssocShellVerbElement(bAppSource);
871 if (!pElement)
872 {
873 ERR("E_OUTOFMEMORY\n");
874 pSource->Release();
875 return E_OUTOFMEMORY;
876 }
877
878 hr = pElement->SetSource(pSource);
879 *ppElement = static_cast<IAssociationElementOld*>(pElement);
880 pSource->Release();
881 return hr;
882}
#define ERR(fmt,...)
Definition: precomp.h:57
virtual BOOL _IsAppSource()
Definition: elements.cpp:849
HRESULT _DefaultVerbSource(IQuerySourceOld **ppSource)
Definition: elements.cpp:1005
#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:129
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 833 of file elements.cpp.

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

Referenced by SetString().

◆ _IsAppSource()

BOOL CAssocShellElement::_IsAppSource ( )
virtual

Definition at line 849 of file elements.cpp.

850{
851 return FALSE;
852}

Referenced by _GetVerbDelegate().

◆ _UseEnumForDefaultVerb()

BOOL CAssocShellElement::_UseEnumForDefaultVerb ( )
virtual

Reimplemented in CAssocProgidElement.

Definition at line 844 of file elements.cpp.

845{
846 return FALSE;
847}

Referenced by _DefaultVerbSource().

◆ GetClassID()

STDMETHODIMP CAssocShellElement::GetClassID ( CLSID pClassID)
override

Definition at line 968 of file elements.cpp.

969{
970 *pClassID = CLSID_AssocShellElement;
971 return S_OK;
972}
#define S_OK
Definition: intsafe.h:52

◆ GetString()

STDMETHODIMP CAssocShellElement::GetString ( PWSTR ppsz)
override

Definition at line 1000 of file elements.cpp.

1001{
1002 return SHStrDupW(m_pszName, ppsz);
1003}
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 930 of file elements.cpp.

931{
933 return CAssocElement::QueryDirect(query, key, ppBlob);
934
935 IAssociationElementOld* pDelegate;
936 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
938 return hr;
939
940 hr = pDelegate->QueryDirect(query, NULL, ppBlob);
941 pDelegate->Release();
942 return hr;
943}
STDMETHODIMP QueryDirect(ASSOCQUERY query, PCWSTR key, FLAGGED_BYTE_BLOB **ppBlob) override
Definition: elements.cpp:784
virtual HRESULT _GetVerbDelegate(PCWSTR pszSrc, IAssociationElementOld **ppElement)
Definition: elements.cpp:854
#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 899 of file elements.cpp.

900{
902 return CAssocElement::QueryDword(query, key, pdwValue);
903
904 IAssociationElementOld* pDelegate;
905 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
907 return hr;
908
909 hr = pDelegate->QueryDword(query, NULL, pdwValue);
910 pDelegate->Release();
911 return hr;
912}
STDMETHODIMP QueryDword(ASSOCQUERY query, PCWSTR key, DWORD *pdwValue) override
Definition: elements.cpp:772

◆ QueryExists()

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

Definition at line 914 of file elements.cpp.

915{
918
919 IAssociationElementOld* pDelegate;
920 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
922 return hr;
923
924 hr = pDelegate->QueryExists(query, NULL);
925 pDelegate->Release();
926 return hr;
927}
STDMETHODIMP QueryExists(ASSOCQUERY query, PCWSTR key) override
Definition: elements.cpp:778

Referenced by CAssocClientElement::_InitSourceFromKey().

◆ QueryInterface()

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

Definition at line 806 of file elements.cpp.

807{
808 if (riid == IID_IPersist)
809 {
810 *ppv = static_cast<IPersist*>(this);
811 AddRef();
812 return S_OK;
813 }
814 if (riid == IID_IPersistString2)
815 {
816 *ppv = static_cast<IPersistString2*>(this);
817 AddRef();
818 return S_OK;
819 }
821}
STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppv) override
Definition: elements.cpp:714
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 946 of file elements.cpp.

947{
949 {
950 *ppvObj = NULL;
951 return E_INVALIDARG;
952 }
953
954 IAssociationElementOld* pDelegate;
955 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
957 return hr;
958
960 hr = pDelegate->QueryInterface(riid, ppvObj);
961 else
962 hr = pDelegate->QueryObject(query, NULL, riid, ppvObj);
963
964 pDelegate->Release();
965 return hr;
966}
#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 884 of file elements.cpp.

885{
887 return CAssocElement::QueryString(query, key, ppszValue);
888
889 IAssociationElementOld* pDelegate;
890 HRESULT hr = _GetVerbDelegate(key, &pDelegate);
892 return hr;
893
894 hr = pDelegate->QueryString(query, NULL, ppszValue);
895 pDelegate->Release();
896 return hr;
897}
STDMETHODIMP QueryString(ASSOCQUERY query, PCWSTR key, PWSTR *ppszValue) override
Definition: elements.cpp:765

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

◆ SetString()

STDMETHODIMP CAssocShellElement::SetString ( PCWSTR  psz)
override

Definition at line 974 of file elements.cpp.

975{
976 if (m_pszName)
977 return E_UNEXPECTED;
978
979 UINT cchBuff, cchString = lstrlenW(psz);
980 PWSTR pszBuff;
981 if (cchString >= _countof(m_szBuff))
982 {
983 cchBuff = cchString + 1;
984 pszBuff = (PWSTR)LocalAlloc(LPTR, cchBuff * sizeof(WCHAR));
985 }
986 else
987 {
988 pszBuff = m_szBuff;
989 cchBuff = _countof(m_szBuff);
990 }
991
992 m_pszName = pszBuff;
993 if (!m_pszName)
994 return E_UNEXPECTED;
995
996 StringCchCopyW(pszBuff, cchBuff, psz);
997 return _InitSource();
998}
virtual HRESULT _InitSource()
Definition: elements.cpp:833
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 455 of file elements.cpp.

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


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