ReactOS 0.4.17-dev-444-g71ee754
elements.cpp File Reference
#include <windef.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <undocshell.h>
#include <shlobj_undoc.h>
#include <shlguid_undoc.h>
#include <shlwapi_undoc.h>
#include <pathcch.h>
#include <strsafe.h>
#include <shellutils.h>
#include <new>
#include "evalcmd.h"
#include "resource.h"
#include <wine/debug.h>
Include dependency graph for elements.cpp:

Go to the source code of this file.

Classes

struct  QUERYKEYVAL
 
class  CAssocElement
 
class  CAssocShellElement
 
class  CAssocShellVerbElement
 
class  CAssocApplicationElement
 
class  CAssocProgidElement
 
class  CAssocClsidElement
 
class  CAssocSystemExtElement
 
class  CAssocFolderElement
 
class  CAssocStarElement
 
class  CAssocPerceivedElement
 
class  CAssocClientElement
 

Macros

#define ASSOCQUERY_DE   (ASSOCQUERY_DIRECT | ASSOCQUERY_EXISTS)
 
#define ASSOCQUERY_SDE   (ASSOCQUERY_STRING | ASSOCQUERY_DE)
 
#define ASSOCQUERY_SDED   (ASSOCQUERY_SDE | ASSOCQUERY_DWORD)
 
#define ASSOCQUERY_SDEI   (ASSOCQUERY_SDE | ASSOCQUERY_INDIRECT)
 
#define ASSOCQUERY_SDEEV   (ASSOCQUERY_SDE | ASSOCQUERY_EXTRA_VERB)
 
#define ASSOCQUERY_DEFAULTICON   (ASSOCQUERY_SDE | 0x1)
 
#define ASSOCQUERY_CLSID   (ASSOCQUERY_SDE | 0x3)
 
#define ASSOCQUERY_PROGID   (ASSOCQUERY_SDE | 0x4)
 
#define ASSOCQUERY_SHELLEX   (ASSOCQUERY_SDE | ASSOCQUERY_FALLBACK | ASSOCQUERY_EXTRA_NON_VERB | 0x2)
 
#define ASSOCQUERY_NOACTIVATEHANDLER   (ASSOCQUERY_DE | ASSOCQUERY_EXTRA_VERB | 0x5)
 
#define ASSOCQUERY_COMMAND_COMMAND   (ASSOCQUERY_DE | ASSOCQUERY_EXTRA_VERB | 0x6)
 
#define ASSOCQUERY_FRIENDLYAPPNAME   ASSOCQUERY_SDEI
 
#define ASSOCQUERY_VERB_FRIENDLYAPPNAME   (ASSOCQUERY_SDEI | ASSOCQUERY_EXTRA_VERB | 0x8)
 
#define ASSOCQUERY_COMMAND   ASSOCQUERY_SDEEV
 
#define ASSOCQUERY_DDEEXEC   (ASSOCQUERY_SDEEV | 0x1)
 
#define ASSOCQUERY_DDEEXEC_IFEXEC   (ASSOCQUERY_SDEEV | 0x2)
 
#define ASSOCQUERY_DDEEXEC_APPLICATION   (ASSOCQUERY_SDEEV | 0x3)
 
#define ASSOCQUERY_DDEEXEC_TOPIC   (ASSOCQUERY_SDEEV | 0x4)
 
#define ASSOCQUERY_LOCALIZEDSTRING   (ASSOCQUERY_SDEI | ASSOCQUERY_EXTRA_NON_VERB | 0x1)
 
#define ASSOCQUERY_SEV_7   (ASSOCQUERY_STRING | ASSOCQUERY_EXTRA_VERB | 0x7)
 
#define ASSOCQUERY_APPKEY_FRIENDLYAPPNAME   (ASSOCQUERY_SDEEV | ASSOCQUERY_INDIRECT | 0x8)
 
#define ASSOCQUERY_CONTENT_TYPE   (ASSOCQUERY_SDE | ASSOCQUERY_FALLBACK | 0x2)
 
#define ASSOCQUERY_DELEGATE   (ASSOCQUERY_STRING | ASSOCQUERY_EXTRA_VERB | 0x7)
 
#define ASSOCQUERY_OBJECT_EV_1   (ASSOCQUERY_OBJECT | ASSOCQUERY_EXTRA_VERB | 0x1)
 

Typedefs

typedef HRESULT(CALLBACKQUERY_CALLBACK) (IQuerySourceOld *, ASSOCQUERY query, PCWSTR keyName, PCWSTR valueName, PVOID pValue)
 
typedef struct QUERYKEYVAL QUERYKEYVAL
 
typedef struct QUERYKEYVALPQUERYKEYVAL
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (evalcmd)
 
static const QUERYKEYVAL_FindKeyVal (ASSOCQUERY query, const QUERYKEYVAL *pItems, UINT cItems)
 
static HRESULT SHAllocMUI (PWSTR *ppwsz)
 
static HRESULT _SHAllocLoadString (HINSTANCE hInstance, UINT uID, PWSTR *ppwsz)
 
static HRESULT QSOpen2 (IQuerySourceOld *pSource, PCWSTR key, PCWSTR pszSrc, BOOL bCreate, IQuerySourceOld **ppSource)
 
static HRESULT _GetFileTypeName (PWSTR lpsz, PWSTR *ppwsz)
 
static LSTATUS _RegQueryString (HKEY hKey, PCWSTR lpSubKey, PWSTR lpData, LONG cchData)
 
static LSTATUS _RegSetVolatileString (HKEY hKey, PCWSTR lpSubKey, PCWSTR lpString)
 
static HRESULT CALLBACK _QuerySourceDirect (IQuerySourceOld *pSource, ASSOCQUERY query, PCWSTR keyName, PCWSTR valueName, PVOID pValue)
 
static HRESULT CALLBACK _QuerySourceDword (IQuerySourceOld *pSource, ASSOCQUERY query, PCWSTR keyName, PCWSTR valueName, PVOID pValue)
 
static HRESULT CALLBACK _QuerySourceExists (IQuerySourceOld *pSource, ASSOCQUERY query, PCWSTR keyName, PCWSTR valueName, PVOID pValue)
 
static HRESULT CALLBACK _QuerySourceString (IQuerySourceOld *pSource, ASSOCQUERY query, PCWSTR keyName, PCWSTR valueName, PVOID pValue)
 
static HRESULT _QuerySourceCreateFromKey (HKEY hKey, PCWSTR lpSubKey, BOOL bCreate, IQuerySourceOld **ppSource)
 
static HRESULT _QuerySourceCreateFromKey2 (HKEY hKey, PCWSTR key1, PCWSTR key2, IQuerySourceOld **ppSource)
 
static HRESULT _AssocOpenRegKey (HKEY hKey, PCWSTR lpSubKey, PHKEY phkResult, BOOL bCreate)
 
static HKEY _OpenProgidKey (PCWSTR psz)
 
static void _MakeApplicationsKey (PCWSTR pszPath, PWSTR pszDest, UINT cchDest)
 
static BOOL _ParamIsApp (PCWSTR psz)
 
static HRESULT _PathFileExists (PCWSTR lpFileName)
 
static HRESULT _ExeFromCmd (PCWSTR pszCmdTemplate, PWSTR *ppszApplication)
 
 STDMETHODIMP_ (ULONG) CAssocElement
 
EXTERN_C HRESULT WINAPI AssocCreateElement (_In_ REFCLSID rclsid, _In_ REFIID riid, _Outptr_ PVOID *ppvObj)
 

Variables

static const QUERYKEYVAL g_perceivedKeyVals []
 
static const QUERYKEYVAL g_shellKeyVals []
 
static const QUERYKEYVAL g_shellVerbKeyVals []
 
static const QUERYKEYVAL g_shellAppKeyVals []
 
static const QUERYKEYVAL g_progidKeyVals [2]
 

Macro Definition Documentation

◆ ASSOCQUERY_APPKEY_FRIENDLYAPPNAME

#define ASSOCQUERY_APPKEY_FRIENDLYAPPNAME   (ASSOCQUERY_SDEEV | ASSOCQUERY_INDIRECT | 0x8)

Definition at line 55 of file elements.cpp.

◆ ASSOCQUERY_CLSID

#define ASSOCQUERY_CLSID   (ASSOCQUERY_SDE | 0x3)

Definition at line 41 of file elements.cpp.

◆ ASSOCQUERY_COMMAND

#define ASSOCQUERY_COMMAND   ASSOCQUERY_SDEEV

Definition at line 48 of file elements.cpp.

◆ ASSOCQUERY_COMMAND_COMMAND

#define ASSOCQUERY_COMMAND_COMMAND   (ASSOCQUERY_DE | ASSOCQUERY_EXTRA_VERB | 0x6)

Definition at line 45 of file elements.cpp.

◆ ASSOCQUERY_CONTENT_TYPE

#define ASSOCQUERY_CONTENT_TYPE   (ASSOCQUERY_SDE | ASSOCQUERY_FALLBACK | 0x2)

Definition at line 56 of file elements.cpp.

◆ ASSOCQUERY_DDEEXEC

#define ASSOCQUERY_DDEEXEC   (ASSOCQUERY_SDEEV | 0x1)

Definition at line 49 of file elements.cpp.

◆ ASSOCQUERY_DDEEXEC_APPLICATION

#define ASSOCQUERY_DDEEXEC_APPLICATION   (ASSOCQUERY_SDEEV | 0x3)

Definition at line 51 of file elements.cpp.

◆ ASSOCQUERY_DDEEXEC_IFEXEC

#define ASSOCQUERY_DDEEXEC_IFEXEC   (ASSOCQUERY_SDEEV | 0x2)

Definition at line 50 of file elements.cpp.

◆ ASSOCQUERY_DDEEXEC_TOPIC

#define ASSOCQUERY_DDEEXEC_TOPIC   (ASSOCQUERY_SDEEV | 0x4)

Definition at line 52 of file elements.cpp.

◆ ASSOCQUERY_DE

#define ASSOCQUERY_DE   (ASSOCQUERY_DIRECT | ASSOCQUERY_EXISTS)

Definition at line 34 of file elements.cpp.

◆ ASSOCQUERY_DEFAULTICON

#define ASSOCQUERY_DEFAULTICON   (ASSOCQUERY_SDE | 0x1)

Definition at line 40 of file elements.cpp.

◆ ASSOCQUERY_DELEGATE

#define ASSOCQUERY_DELEGATE   (ASSOCQUERY_STRING | ASSOCQUERY_EXTRA_VERB | 0x7)

Definition at line 57 of file elements.cpp.

◆ ASSOCQUERY_FRIENDLYAPPNAME

#define ASSOCQUERY_FRIENDLYAPPNAME   ASSOCQUERY_SDEI

Definition at line 46 of file elements.cpp.

◆ ASSOCQUERY_LOCALIZEDSTRING

#define ASSOCQUERY_LOCALIZEDSTRING   (ASSOCQUERY_SDEI | ASSOCQUERY_EXTRA_NON_VERB | 0x1)

Definition at line 53 of file elements.cpp.

◆ ASSOCQUERY_NOACTIVATEHANDLER

#define ASSOCQUERY_NOACTIVATEHANDLER   (ASSOCQUERY_DE | ASSOCQUERY_EXTRA_VERB | 0x5)

Definition at line 44 of file elements.cpp.

◆ ASSOCQUERY_OBJECT_EV_1

#define ASSOCQUERY_OBJECT_EV_1   (ASSOCQUERY_OBJECT | ASSOCQUERY_EXTRA_VERB | 0x1)

Definition at line 58 of file elements.cpp.

◆ ASSOCQUERY_PROGID

#define ASSOCQUERY_PROGID   (ASSOCQUERY_SDE | 0x4)

Definition at line 42 of file elements.cpp.

◆ ASSOCQUERY_SDE

#define ASSOCQUERY_SDE   (ASSOCQUERY_STRING | ASSOCQUERY_DE)

Definition at line 35 of file elements.cpp.

◆ ASSOCQUERY_SDED

#define ASSOCQUERY_SDED   (ASSOCQUERY_SDE | ASSOCQUERY_DWORD)

Definition at line 36 of file elements.cpp.

◆ ASSOCQUERY_SDEEV

#define ASSOCQUERY_SDEEV   (ASSOCQUERY_SDE | ASSOCQUERY_EXTRA_VERB)

Definition at line 38 of file elements.cpp.

◆ ASSOCQUERY_SDEI

#define ASSOCQUERY_SDEI   (ASSOCQUERY_SDE | ASSOCQUERY_INDIRECT)

Definition at line 37 of file elements.cpp.

◆ ASSOCQUERY_SEV_7

#define ASSOCQUERY_SEV_7   (ASSOCQUERY_STRING | ASSOCQUERY_EXTRA_VERB | 0x7)

Definition at line 54 of file elements.cpp.

◆ ASSOCQUERY_SHELLEX

Definition at line 43 of file elements.cpp.

◆ ASSOCQUERY_VERB_FRIENDLYAPPNAME

#define ASSOCQUERY_VERB_FRIENDLYAPPNAME   (ASSOCQUERY_SDEI | ASSOCQUERY_EXTRA_VERB | 0x8)

Definition at line 47 of file elements.cpp.

Typedef Documentation

◆ PQUERYKEYVAL

◆ QUERY_CALLBACK

typedef HRESULT(CALLBACK * QUERY_CALLBACK) (IQuerySourceOld *, ASSOCQUERY query, PCWSTR keyName, PCWSTR valueName, PVOID pValue)

Definition at line 24 of file elements.cpp.

◆ QUERYKEYVAL

Function Documentation

◆ _AssocOpenRegKey()

static HRESULT _AssocOpenRegKey ( HKEY  hKey,
PCWSTR  lpSubKey,
PHKEY  phkResult,
BOOL  bCreate 
)
static

Definition at line 252 of file elements.cpp.

253{
254 *phkResult = NULL;
255 if (!hKey)
257
259 if ( bCreate )
260 error = RegCreateKeyExW(hKey, lpSubKey, 0, NULL, 0, MAXIMUM_ALLOWED, NULL,
261 phkResult, NULL);
262 else
263 error = RegOpenKeyExW(hKey, lpSubKey, 0, MAXIMUM_ALLOWED, phkResult);
264
265 if (error == ERROR_SUCCESS)
266 return S_OK;
267
269}
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
FxAutoRegKey hKey
#define S_OK
Definition: intsafe.h:52
#define error(str)
Definition: mkdosfs.c:1605
#define MAXIMUM_ALLOWED
Definition: nt_native.h:83
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1536
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define ERROR_NO_ASSOCIATION
Definition: winerror.h:1001

Referenced by _OpenProgidKey().

◆ _ExeFromCmd()

static HRESULT _ExeFromCmd ( PCWSTR  pszCmdTemplate,
PWSTR ppszApplication 
)
static

Definition at line 335 of file elements.cpp.

336{
337 if (_ParamIsApp(pszCmdTemplate))
338 return SHStrDupW(L"%1", ppszApplication);
339
340 PWSTR pszParameters = NULL;
341 HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmdTemplate, ppszApplication,
342 NULL, &pszParameters);
344 return hr;
345
346 if (hr != S_OK || StrCmpIW(PathFindFileNameW(*ppszApplication), L"rundll32.exe") != 0)
347 {
348 CoTaskMemFree(pszParameters);
349 return hr;
350 }
351
352 CoTaskMemFree(*ppszApplication);
353 *ppszApplication = NULL;
354
355 PWSTR pchComma = StrChrW(pszParameters, L',');
356 if (!pchComma)
357 {
359 CoTaskMemFree(pszParameters);
360 return hr;
361 }
362
363 WCHAR szExe[MAX_PATH];
364 hr = _PathCopyExeAndTrimWhiteSpaces(szExe, _countof(szExe), pszParameters,
365 pchComma - pszParameters);
367 {
368 CoTaskMemFree(pszParameters);
369 return hr;
370 }
371
372 PathUnquoteSpacesW(szExe);
373
374 PathCchAddExtension(szExe, _countof(szExe), L".dll");
375
376 if (PathIsAbsolute(szExe))
377 {
378 hr = _PathFileExists(szExe);
379 }
380 else if (PathIsFileSpecW(szExe))
381 {
382 hr = _PathFindInSystem(szExe, _countof(szExe));
383 }
384 else
385 {
386 CoTaskMemFree(pszParameters);
388 }
389
390 if (SUCCEEDED(hr))
391 hr = SHStrDupW(szExe, ppszApplication);
392
393 CoTaskMemFree(pszParameters);
394 return hr;
395}
HRESULT hr
Definition: delayimp.cpp:582
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:464
#define MAX_PATH
Definition: compat.h:34
void WINAPI PathUnquoteSpacesW(WCHAR *path)
Definition: path.c:1982
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
Definition: path.c:1677
HRESULT WINAPI PathCchAddExtension(WCHAR *path, SIZE_T size, const WCHAR *extension)
Definition: path.c:542
BOOL WINAPI PathIsFileSpecW(const WCHAR *path)
Definition: path.c:1818
int WINAPI StrCmpIW(const WCHAR *str, const WCHAR *comp)
Definition: string.c:464
HRESULT WINAPI SHStrDupW(const WCHAR *src, WCHAR **dest)
Definition: main.c:1692
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
#define L(x)
Definition: resources.c:13
static BOOL _ParamIsApp(PCWSTR psz)
Definition: elements.cpp:322
static HRESULT _PathFileExists(PCWSTR lpFileName)
Definition: elements.cpp:327
EXTERN_C HRESULT _PathCopyExeAndTrimWhiteSpaces(PWSTR pszBuff, size_t cchBuff, PCWSTR pszSrc, size_t cchSrc)
Definition: evalcmd.cpp:53
EXTERN_C HRESULT _PathFindInSystem(_Inout_ PWSTR pszPath, _In_ UINT cchPath)
Definition: evalcmd.cpp:162
EXTERN_C HRESULT WINAPI SHEvaluateSystemCommandTemplate(_In_ PCWSTR pszCmdTemplate, _Outptr_ PWSTR *ppszApplication, _Outptr_opt_ PWSTR *ppszCommandLine, _Outptr_opt_ PWSTR *ppszParameters)
Definition: evalcmd.cpp:182
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
short WCHAR
Definition: pedump.c:58
static BOOL PathIsAbsolute(_In_ PCWSTR pszPath)
#define _countof(array)
Definition: sndvol32.h:70
uint16_t * PWSTR
Definition: typedefs.h:56

Referenced by CAssocClientElement::_CreateRepairedNetscapeRegistration(), and CAssocShellVerbElement::QueryString().

◆ _FindKeyVal()

static const QUERYKEYVAL * _FindKeyVal ( ASSOCQUERY  query,
const QUERYKEYVAL pItems,
UINT  cItems 
)
static

Definition at line 99 of file elements.cpp.

100{
101 for (UINT iItem = 0; iItem < cItems; ++iItem)
102 {
103 if (pItems[iItem].query == query)
104 return &pItems[iItem];
105 }
106 return NULL;
107}
unsigned int UINT
Definition: sysinfo.c:13
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM * pItems
Definition: usp10.c:62

Referenced by CAssocElement::_QueryKeyValAny().

◆ _GetFileTypeName()

static HRESULT _GetFileTypeName ( PWSTR  lpsz,
PWSTR ppwsz 
)
static

Definition at line 141 of file elements.cpp.

142{
143 WCHAR szDest[MAX_PATH], szBuff[128];
144 HINSTANCE hSHLWAPI = GetModuleHandleW(L"shlwapi.dll");
145
146 if (!lpsz || *lpsz != '.' || !lpsz[1])
147 return _SHAllocLoadString(hSHLWAPI, IDS_FILE, ppwsz);
148
149 CharUpperW(lpsz);
150 LoadStringW(hSHLWAPI, IDS_ANY_FILE, szBuff, _countof(szBuff));
151 StringCchPrintfW(szDest, _countof(szDest), szBuff, lpsz + 1);
152 return SHStrDupW(szDest, ppwsz);
153}
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
LPWSTR WINAPI CharUpperW(WCHAR *str)
Definition: string.c:1249
#define IDS_ANY_FILE
Definition: resource.h:5
#define IDS_FILE
Definition: resource.h:6
static HRESULT _SHAllocLoadString(HINSTANCE hInstance, UINT uID, PWSTR *ppwsz)
Definition: elements.cpp:122
#define LoadStringW
Definition: utils.h:64
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530

Referenced by CAssocStarElement::QueryString().

◆ _MakeApplicationsKey()

static void _MakeApplicationsKey ( PCWSTR  pszPath,
PWSTR  pszDest,
UINT  cchDest 
)
inlinestatic

Definition at line 313 of file elements.cpp.

314{
315 HRESULT hr = PathCchCombineEx(pszDest, cchDest, L"Applications", pszPath, PATHCCH_NONE);
317 return;
318
319 PathCchAddExtension(pszDest, cchDest, L".exe");
320}
HRESULT WINAPI PathCchCombineEx(WCHAR *out, SIZE_T size, const WCHAR *path1, const WCHAR *path2, DWORD flags)
Definition: path.c:674
@ PATHCCH_NONE
Definition: pathcch.h:39
_In_ INT cchDest
Definition: shlwapi.h:1161

Referenced by CAssocApplicationElement::_InitSource().

◆ _OpenProgidKey()

static HKEY _OpenProgidKey ( PCWSTR  psz)
static

Definition at line 271 of file elements.cpp.

272{
273 HKEY hKeyBase;
276 return NULL;
277
278 WCHAR szData[64];
279 DWORD cbData = sizeof(szData);
280 if (StrCmpIW(L"Excel.Sheet.8", psz) == 0)
281 return hKeyBase;
282
283 LSTATUS error = SHGetValueW(hKeyBase, L"CurVer", NULL, NULL, szData, &cbData);
284 if (error || cbData <= 2)
285 return hKeyBase;
286
287 HKEY hKeyCurVer;
288 hr = _AssocOpenRegKey(HKEY_CLASSES_ROOT, szData, &hKeyCurVer, FALSE);
290 return hKeyBase;
291
292 HKEY hKeyShell;
293 hr = _AssocOpenRegKey(hKeyCurVer, L"shell", &hKeyShell, FALSE);
295 {
296 hr = _AssocOpenRegKey(hKeyBase, L"shell", &hKeyShell, FALSE);
298 {
299 RegCloseKey(hKeyBase);
300 return hKeyCurVer;
301 }
302
303 RegCloseKey(hKeyShell);
304 RegCloseKey(hKeyCurVer);
305 return hKeyBase;
306 }
307
308 RegCloseKey(hKeyShell);
309 RegCloseKey(hKeyBase);
310 return hKeyCurVer;
311}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define FALSE
Definition: types.h:117
DWORD WINAPI SHGetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len)
Definition: main.c:2222
static HRESULT _AssocOpenRegKey(HKEY hKey, PCWSTR lpSubKey, PHKEY phkResult, BOOL bCreate)
Definition: elements.cpp:252
unsigned long DWORD
Definition: ntddk_ex.h:95
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
Definition: shlwapi.h:761
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by CAssocProgidElement::_InitSource().

◆ _ParamIsApp()

static BOOL _ParamIsApp ( PCWSTR  psz)
inlinestatic

Definition at line 322 of file elements.cpp.

323{
324 return !StrCmpNW(psz, L"%1", 2) || !StrCmpNW(psz, L"\"%1\"", 4);
325}
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:500

Referenced by _ExeFromCmd().

◆ _PathFileExists()

static HRESULT _PathFileExists ( PCWSTR  lpFileName)
static

Definition at line 327 of file elements.cpp.

328{
329 DWORD attrs;
332 return S_OK;
333}
BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath, DWORD *dwAttr)
Definition: path.c:747
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
_In_ LPCSTR lpFileName
Definition: winbase.h:2800

Referenced by _ExeFromCmd().

◆ _QuerySourceCreateFromKey()

static HRESULT _QuerySourceCreateFromKey ( HKEY  hKey,
PCWSTR  lpSubKey,
BOOL  bCreate,
IQuerySourceOld **  ppSource 
)
inlinestatic

Definition at line 228 of file elements.cpp.

229{
230 return QuerySourceCreateFromKey(hKey, lpSubKey, bCreate,
231 IID_PPV_ARG(IQuerySourceOld, ppSource));
232}
EXTERN_C HRESULT WINAPI QuerySourceCreateFromKey(_In_ HKEY hKey, _In_opt_ PCWSTR lpSubKey, _In_ BOOL bCreate, _In_ REFIID riid, _Outptr_ PVOID *ppv)
Definition: querysrc.cpp:499
#define IID_PPV_ARG(Itype, ppType)

Referenced by CAssocClientElement::_FixNetscapeRegistration(), CAssocShellElement::_InitSource(), CAssocProgidElement::_InitSource(), and _QuerySourceCreateFromKey2().

◆ _QuerySourceCreateFromKey2()

static HRESULT _QuerySourceCreateFromKey2 ( HKEY  hKey,
PCWSTR  key1,
PCWSTR  key2,
IQuerySourceOld **  ppSource 
)
static

Definition at line 235 of file elements.cpp.

240{
241 WCHAR szBuff[MAX_PATH];
242
243 if (key1)
244 PathCchCombineEx(szBuff, _countof(szBuff), key1, key2, PATHCCH_NONE);
245 else
246 StringCchCopyW(szBuff, _countof(szBuff), key2);
247
248 return _QuerySourceCreateFromKey(hKey, szBuff, FALSE, ppSource);
249}
static HRESULT _QuerySourceCreateFromKey(HKEY hKey, PCWSTR lpSubKey, BOOL bCreate, IQuerySourceOld **ppSource)
Definition: elements.cpp:228
GLuint64EXT GLuint GLuint GLenum GLenum GLuint GLuint GLenum GLuint GLuint key1
Definition: glext.h:10608
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149

Referenced by CAssocClsidElement::_InitSource(), CAssocSystemExtElement::_InitSource(), CAssocPerceivedElement::_InitSource(), and CAssocClientElement::_InitSourceFromKey().

◆ _QuerySourceDirect()

static HRESULT CALLBACK _QuerySourceDirect ( IQuerySourceOld *  pSource,
ASSOCQUERY  query,
PCWSTR  keyName,
PCWSTR  valueName,
PVOID  pValue 
)
static

Definition at line 181 of file elements.cpp.

187{
188 return pSource->QueryValueDirect(keyName, valueName, (FLAGGED_BYTE_BLOB**)pValue);
189}
PWCHAR pValue

Referenced by CAssocElement::QueryDirect().

◆ _QuerySourceDword()

static HRESULT CALLBACK _QuerySourceDword ( IQuerySourceOld *  pSource,
ASSOCQUERY  query,
PCWSTR  keyName,
PCWSTR  valueName,
PVOID  pValue 
)
static

Definition at line 192 of file elements.cpp.

198{
199 return pSource->QueryValueDword(keyName, valueName, (PDWORD)pValue);
200}
DWORD * PDWORD
Definition: pedump.c:68

Referenced by CAssocElement::QueryDword().

◆ _QuerySourceExists()

static HRESULT CALLBACK _QuerySourceExists ( IQuerySourceOld *  pSource,
ASSOCQUERY  query,
PCWSTR  keyName,
PCWSTR  valueName,
PVOID  pValue 
)
static

Definition at line 203 of file elements.cpp.

209{
210 return pSource->QueryValueExists(keyName, valueName);
211}

Referenced by CAssocElement::QueryExists().

◆ _QuerySourceString()

static HRESULT CALLBACK _QuerySourceString ( IQuerySourceOld *  pSource,
ASSOCQUERY  query,
PCWSTR  keyName,
PCWSTR  valueName,
PVOID  pValue 
)
static

Definition at line 214 of file elements.cpp.

220{
221 HRESULT hr = pSource->QueryValueString(keyName, valueName, static_cast<PWSTR*>(pValue));
223 return hr;
224 return SHAllocMUI(static_cast<PWSTR*>(pValue));
225}
static HRESULT SHAllocMUI(PWSTR *ppwsz)
Definition: elements.cpp:109
#define ASSOCQUERY_INDIRECT
Definition: shlobj_undoc.h:39

Referenced by CAssocElement::QueryString(), and CAssocProgidElement::QueryString().

◆ _RegQueryString()

static LSTATUS _RegQueryString ( HKEY  hKey,
PCWSTR  lpSubKey,
PWSTR  lpData,
LONG  cchData 
)
inlinestatic

Definition at line 156 of file elements.cpp.

157{
158 LONG cbData = cchData * sizeof(WCHAR);
159 return RegQueryValueW(hKey, lpSubKey, lpData, &cbData);
160}
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4241
long LONG
Definition: pedump.c:60

Referenced by CAssocClientElement::_CreateRepairedNetscapeRegistration().

◆ _RegSetVolatileString()

static LSTATUS _RegSetVolatileString ( HKEY  hKey,
PCWSTR  lpSubKey,
PCWSTR  lpString 
)
static

Definition at line 163 of file elements.cpp.

164{
166 if (lpSubKey && *lpSubKey)
168 NULL, &hKey, NULL);
169 else
171 if (error)
172 return error;
173
174 INT cch = lstrlenW(lpString);
175 error = RegSetValueExW(hKey, NULL, 0, REG_SZ, (PBYTE)lpString, (cch + 1) * sizeof(WCHAR));
177 return error;
178}
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
#define lstrlenW
Definition: compat.h:750
#define REG_SZ
Definition: layer.c:22
#define KEY_WRITE
Definition: nt_native.h:1034
#define REG_OPTION_VOLATILE
Definition: nt_native.h:1063
BYTE * PBYTE
Definition: pedump.c:66
_In_ UINT _In_ UINT cch
Definition: shellapi.h:432
int32_t INT
Definition: typedefs.h:58

Referenced by CAssocClientElement::_CreateRepairedNetscapeRegistration().

◆ _SHAllocLoadString()

static HRESULT _SHAllocLoadString ( HINSTANCE  hInstance,
UINT  uID,
PWSTR ppwsz 
)
inlinestatic

Definition at line 122 of file elements.cpp.

123{
124 WCHAR szBuff[MAX_PATH];
125 LoadStringW(hInstance, uID, szBuff, _countof(szBuff));
126 return SHStrDupW(szBuff, ppwsz);
127}
HINSTANCE hInstance
Definition: charmap.c:19
_In_ UINT uID
Definition: shlwapi.h:156

Referenced by _GetFileTypeName(), and CAssocFolderElement::QueryString().

◆ AssocCreateElement()

EXTERN_C HRESULT WINAPI AssocCreateElement ( _In_ REFCLSID  rclsid,
_In_ REFIID  riid,
_Outptr_ PVOID ppvObj 
)

Definition at line 1635 of file elements.cpp.

1636{
1637 IAssociationElementOld* pElement;
1638 if (rclsid == CLSID_AssocShellElement)
1639 {
1640 auto pNewElement = new(std::nothrow) CAssocShellElement();
1641 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1642 }
1643 else if (rclsid == CLSID_AssocApplicationElement)
1644 {
1645 auto pNewElement = new(std::nothrow) CAssocApplicationElement();
1646 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1647 }
1648 else if (rclsid == CLSID_AssocProgidElement)
1649 {
1650 auto pNewElement = new(std::nothrow) CAssocProgidElement();
1651 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1652 }
1653 else if (rclsid == CLSID_AssocClsidElement)
1654 {
1655 auto pNewElement = new(std::nothrow) CAssocClsidElement();
1656 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1657 }
1658 else if (rclsid == CLSID_AssocSystemElement)
1659 {
1660 auto pNewElement = new(std::nothrow) CAssocSystemExtElement();
1661 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1662 }
1663 else if (rclsid == CLSID_AssocFolderElement)
1664 {
1665 auto pNewElement = new(std::nothrow) CAssocFolderElement();
1666 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1667 }
1668 else if (rclsid == CLSID_AssocStarElement)
1669 {
1670 auto pNewElement = new(std::nothrow) CAssocStarElement();
1671 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1672 }
1673 else if (rclsid == CLSID_AssocPerceivedElement)
1674 {
1675 auto pNewElement = new(std::nothrow) CAssocPerceivedElement();
1676 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1677 }
1678 else if (rclsid == CLSID_AssocClientElement)
1679 {
1680 auto pNewElement = new(std::nothrow) CAssocClientElement();
1681 pElement = static_cast<IAssociationElementOld*>(pNewElement);
1682 }
1683 else
1684 {
1685 ERR("rclsid: %s\n", wine_dbgstr_guid(&rclsid));
1686 *ppvObj = NULL;
1688 }
1689
1690 if (!pElement)
1691 {
1692 ERR("E_OUTOFMEMORY\n");
1693 return E_OUTOFMEMORY;
1694 }
1695
1696 HRESULT hr = pElement->QueryInterface(riid, ppvObj);
1697 pElement->Release();
1698 return hr;
1699}
#define ERR(fmt,...)
Definition: precomp.h:57
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
REFIID riid
Definition: atlbase.h:39
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

Referenced by CAssocShellVerbElement::_GetAppDelegate(), and AssocCreate().

◆ QSOpen2()

static HRESULT QSOpen2 ( IQuerySourceOld *  pSource,
PCWSTR  key,
PCWSTR  pszSrc,
BOOL  bCreate,
IQuerySourceOld **  ppSource 
)
static

Definition at line 129 of file elements.cpp.

135{
136 WCHAR szDest[MAX_PATH];
137 PathCchCombineEx(szDest, _countof(szDest), key, pszSrc, PATHCCH_NONE);
138 return pSource->OpenSource(szDest, bCreate, ppSource);
139}
Definition: copy.c:22

Referenced by CAssocShellElement::_GetVerbDelegate().

◆ SHAllocMUI()

static HRESULT SHAllocMUI ( PWSTR ppwsz)
static

Definition at line 109 of file elements.cpp.

110{
111 WCHAR szOutBuf[1024];
112 HRESULT hr = SHLoadIndirectString(*ppwsz, szOutBuf, _countof(szOutBuf), NULL);
113 CoTaskMemFree(*ppwsz);
115 {
116 *ppwsz = NULL;
117 return hr;
118 }
119 return SHStrDupW(szOutBuf, ppwsz);
120}
HRESULT WINAPI SHLoadIndirectString(const WCHAR *src, WCHAR *dst, UINT dst_len, void **reserved)
Definition: string.c:1499

Referenced by _QuerySourceString().

◆ STDMETHODIMP_()

STDMETHODIMP_ ( ULONG  )

Definition at line 733 of file elements.cpp.

734{
735 return InterlockedIncrement(&m_cRefs);
736}
#define InterlockedIncrement
Definition: armddk.h:53

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( evalcmd  )

Variable Documentation

◆ g_perceivedKeyVals

const QUERYKEYVAL g_perceivedKeyVals[]
static
Initial value:
=
{
{ ASSOCQUERY_FRIENDLYAPPNAME, NULL, L"FriendlyTypeName" },
{ ASSOCQUERY_DEFAULTICON, L"DefaultIcon", NULL },
}
#define ASSOCQUERY_FRIENDLYAPPNAME
Definition: elements.cpp:46
#define ASSOCQUERY_DEFAULTICON
Definition: elements.cpp:40

Definition at line 60 of file elements.cpp.

Referenced by CAssocPerceivedElement::_GetQueryKeyVal().

◆ g_progidKeyVals

const QUERYKEYVAL g_progidKeyVals[2]
static
Initial value:
=
{
{ ASSOCQUERY_SHELLEX, L"ShellEx\\%s", NULL },
{ ASSOCQUERY_CONTENT_TYPE, NULL, L"Content Type" },
}
#define ASSOCQUERY_CONTENT_TYPE
Definition: elements.cpp:56
#define ASSOCQUERY_SHELLEX
Definition: elements.cpp:43

Definition at line 92 of file elements.cpp.

Referenced by CAssocProgidElement::QueryString().

◆ g_shellAppKeyVals

const QUERYKEYVAL g_shellAppKeyVals[]
static
Initial value:
=
{
{ ASSOCQUERY_APPKEY_FRIENDLYAPPNAME, NULL, L"FriendlyAppName" },
}
#define ASSOCQUERY_APPKEY_FRIENDLYAPPNAME
Definition: elements.cpp:55

Definition at line 87 of file elements.cpp.

Referenced by CAssocApplicationElement::_GetQueryKeyVal().

◆ g_shellKeyVals

const QUERYKEYVAL g_shellKeyVals[]
static
Initial value:
=
{
{ ASSOCQUERY_FRIENDLYAPPNAME, NULL, L"FriendlyTypeName" },
{ ASSOCQUERY_DEFAULTICON, L"DefaultIcon", NULL },
{ ASSOCQUERY_CLSID, L"Clsid", NULL },
{ ASSOCQUERY_PROGID, L"Progid", NULL },
{ ASSOCQUERY_SHELLEX, L"ShellEx\\%s", NULL },
}
#define ASSOCQUERY_CLSID
Definition: elements.cpp:41
#define ASSOCQUERY_PROGID
Definition: elements.cpp:42

Definition at line 66 of file elements.cpp.

Referenced by CAssocShellElement::_GetQueryKeyVal(), and CAssocPerceivedElement::_GetQueryKeyVal().

◆ g_shellVerbKeyVals

const QUERYKEYVAL g_shellVerbKeyVals[]
static
Initial value:
=
{
{ ASSOCQUERY_COMMAND, L"command", NULL },
{ ASSOCQUERY_DDEEXEC, L"ddeexec", NULL },
{ ASSOCQUERY_DDEEXEC_IFEXEC, L"ddeexec\\ifexec", NULL },
{ ASSOCQUERY_DDEEXEC_APPLICATION, L"ddeexec\\application", NULL },
{ ASSOCQUERY_DDEEXEC_TOPIC, L"ddeexec\\topic", NULL },
{ ASSOCQUERY_NOACTIVATEHANDLER, L"ddeexec", L"NoActivateHandler" },
{ ASSOCQUERY_COMMAND_COMMAND, L"command", L"command" },
{ ASSOCQUERY_VERB_FRIENDLYAPPNAME, NULL, L"FriendlyAppName" },
}
#define ASSOCQUERY_COMMAND_COMMAND
Definition: elements.cpp:45
#define ASSOCQUERY_DDEEXEC
Definition: elements.cpp:49
#define ASSOCQUERY_DDEEXEC_TOPIC
Definition: elements.cpp:52
#define ASSOCQUERY_VERB_FRIENDLYAPPNAME
Definition: elements.cpp:47
#define ASSOCQUERY_DDEEXEC_IFEXEC
Definition: elements.cpp:50
#define ASSOCQUERY_DDEEXEC_APPLICATION
Definition: elements.cpp:51
#define ASSOCQUERY_NOACTIVATEHANDLER
Definition: elements.cpp:44
#define ASSOCQUERY_COMMAND
Definition: elements.cpp:48

Definition at line 75 of file elements.cpp.

Referenced by CAssocShellVerbElement::_GetQueryKeyVal().