ReactOS 0.4.17-dev-684-ga6524ef
CQueryAssociations.h
Go to the documentation of this file.
1#pragma once
2
4 public CComCoClass<CQueryAssociations, &CLSID_QueryAssociations>,
5 public CComObjectRootEx<CComMultiThreadModelNoCS>,
6 public IQueryAssociations
7{
8public:
9 struct RegKeyRef
10 {
12
13 RegKeyRef(HKEY hNewKey = NULL) : hKey(hNewKey), hKeyClose(hNewKey) {}
14
16 {
17 Close();
18 }
19
20 void Close()
21 {
22 if (hKeyClose)
25 }
26
27 void Attach(HKEY hNewKey)
28 {
29 Close();
30 hKey = hKeyClose = hNewKey;
31 }
32
34 {
35 HKEY hRet = hKeyClose;
37 return hRet;
38 }
39
40 operator HKEY() { return hKey; }
41 };
42
43private:
46 CComPtr<CQueryAssociations> m_pBaseClass;
49 bool m_SkipBaseClass = false;
50
51 bool EmulateWin2000() const { return false; }
52 bool IsNT5() const { return LOBYTE(GetVersion()) < 6; }
53 void Reset();
57
58 HRESULT OpenShellVerbKey(ASSOCF flags, LPCWSTR pszVerb, LPCWSTR pszSubKey, RegKeyRef &KeyRef);
60 {
61 return OpenShellVerbKey(flags, pszVerb, NULL, KeyRef);
62 }
64 {
65 return OpenShellVerbKey(flags, pszExtra, L"ddeexec", KeyRef);
66 }
67
68 HRESULT GetValue(HKEY hkey, const WCHAR *name, void **data, DWORD *data_size);
70 HRESULT GetExecutable(LPCWSTR pszExtra, LPWSTR path, DWORD pathlen, DWORD *len);
71 HRESULT ReturnData(void *out, DWORD *outlen, const void *data, DWORD datalen);
72 HRESULT ReturnRegData(ASSOCF flags, HKEY hKey, PCWSTR pszName, void *pvOut, DWORD *pcbOut);
75 {
77 SHFree(data);
78 return hr;
79 }
81 {
82 return ReturnAndFreeString(flags, out, outlen, data, lstrlenW(data) + 1);
83 }
84
85public:
88
89 // *** IQueryAssociations methods ***
90 STDMETHOD(Init)(ASSOCF flags, LPCWSTR pwszAssoc, HKEY hkProgid, HWND hwnd) override;
91 STDMETHOD(GetString)(ASSOCF flags, ASSOCSTR str, LPCWSTR pwszExtra, LPWSTR pwszOut, DWORD *pcchOut) override;
92 STDMETHOD(GetKey)(ASSOCF flags, ASSOCKEY key, LPCWSTR pwszExtra, HKEY *phkeyOut) override;
93 STDMETHOD(GetData)(ASSOCF flags, ASSOCDATA data, LPCWSTR pwszExtra, void *pvOut, DWORD *pcbOut) override;
94 STDMETHOD(GetEnum)(ASSOCF cfFlags, ASSOCENUM assocenum, LPCWSTR pszExtra, REFIID riid, LPVOID *ppvOut) override;
95
99
101 COM_INTERFACE_ENTRY_IID(IID_IQueryAssociations, IQueryAssociations)
103};
#define STDMETHOD(m)
Definition: basetyps.h:62
#define RegCloseKey(hKey)
Definition: registry.h:49
HANDLE HKEY
Definition: registry.h:26
CComPtr< CQueryAssociations > m_pBaseClass
HRESULT GetValue(HKEY hkey, const WCHAR *name, void **data, DWORD *data_size)
HRESULT OpenShellVerbKey(ASSOCF flags, LPCWSTR pszVerb, RegKeyRef &KeyRef)
HRESULT OpenDdeKey(ASSOCF flags, LPCWSTR pszExtra, RegKeyRef &KeyRef)
HRESULT ReturnString(ASSOCF flags, LPWSTR out, DWORD *outlen, LPCWSTR data, DWORD datalen)
HKEY GetClassHandle() const
HRESULT ReturnRegData(ASSOCF flags, HKEY hKey, PCWSTR pszName, void *pvOut, DWORD *pcbOut)
HRESULT OpenShellVerbKey(ASSOCF flags, LPCWSTR pszVerb, LPCWSTR pszSubKey, RegKeyRef &KeyRef)
HRESULT GetCommand(const WCHAR *extra, WCHAR **command)
CQueryAssociations * TryBaseClass(ASSOCF flags)
HRESULT ReturnData(void *out, DWORD *outlen, const void *data, DWORD datalen)
HRESULT GetExecutable(LPCWSTR pszExtra, LPWSTR path, DWORD pathlen, DWORD *len)
HRESULT ReturnAndFreeString(ASSOCF flags, LPWSTR out, DWORD *outlen, LPWSTR data)
STDMETHOD() GetEnum(ASSOCF cfFlags, ASSOCENUM assocenum, LPCWSTR pszExtra, REFIID riid, LPVOID *ppvOut) override
STDMETHOD() GetString(ASSOCF flags, ASSOCSTR str, LPCWSTR pwszExtra, LPWSTR pwszOut, DWORD *pcchOut) override
bool EmulateWin2000() const
HRESULT ReturnAndFreeString(ASSOCF flags, LPWSTR out, DWORD *outlen, LPWSTR data, DWORD datalen)
STDMETHOD() GetData(ASSOCF flags, ASSOCDATA data, LPCWSTR pwszExtra, void *pvOut, DWORD *pcbOut) override
STDMETHOD() GetKey(ASSOCF flags, ASSOCKEY key, LPCWSTR pwszExtra, HKEY *phkeyOut) override
HRESULT DuplicateHKey(HKEY hKey, HKEY *phKey)
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define lstrlenW
Definition: compat.h:750
DWORD WINAPI GetVersion(void)
Definition: version.c:1458
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
#define L(x)
Definition: resources.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
GLenum GLsizei len
Definition: glext.h:6722
@ extra
Definition: id3.c:95
REFIID riid
Definition: atlbase.h:39
#define LOBYTE(W)
Definition: jmemdos.c:487
int const JOCTET unsigned int datalen
Definition: jpeglib.h:1033
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:679
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:651
#define DECLARE_REGISTRY_RESOURCEID(x)
Definition: atlcom.h:645
#define END_COM_MAP()
Definition: atlcom.h:592
short WCHAR
Definition: pedump.c:58
#define REFIID
Definition: guiddef.h:118
ASSOCDATA
Definition: shlwapi.h:926
ASSOCSTR
Definition: shlwapi.h:885
ASSOCKEY
Definition: shlwapi.h:918
_In_opt_ LPCSTR pszSubKey
Definition: shlwapi.h:783
DWORD ASSOCF
Definition: shlwapi.h:967
ASSOCENUM
Definition: shlwapi.h:938
const WCHAR * str
#define IDR_QUERYASSOCIATIONS
Definition: shresdef.h:951
Definition: copy.c:22
Definition: name.c:39
const uint16_t * PCWSTR
Definition: typedefs.h:57
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint16_t * LPWSTR
Definition: typedefs.h:56
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
unsigned char BYTE
Definition: xxhash.c:193