35#include "wine/unicode.h"
42#define SHLWAPI_DEF_ASSOCF (ASSOCF_INIT_BYEXENAME | ASSOCF_INIT_DEFAULTTOSTAR | \
43 ASSOCF_INIT_DEFAULTTOFOLDER | ASSOCF_INIT_NOREMAPCLSID | \
44 ASSOCF_INIT_IGNOREUNKNOWN)
46#define SHLWAPI_DEF_ASSOCF (ASSOCF_INIT_BYEXENAME|ASSOCF_INIT_DEFAULTTOSTAR| \
47 ASSOCF_INIT_DEFAULTTOFOLDER)
96 LPCWSTR pszArgs = *pszOrgArgs ? pszOrgArgs :
L"\"%1\"";
113 if (!hClass || !pszExe || !pShell)
124 AssocDeleteSubkey(hClass, szVerbKey);
127 hr = AssocMakeVerbCommand(hVerb, pszExe, pVerb);
175 if (dwStrLen < dwLen)
224 *(
DWORD*)lpInterface = 0;
255 '.',
's',
'e',
'a',
'r',
'c',
'h',
'-',
'm',
's',0,
265 '.',
'j',
'f',
'i',
'f',0,
267 '.',
'j',
'p',
'e',
'g',0,
272 '.',
't',
'i',
'f',
'f',0,
279 '.',
'a',
'i',
'f',
'c',0,
280 '.',
'a',
'i',
'f',
'f',0,
284 '.',
'm',
'i',
'd',
'i',0,
285#if _WIN32_WINNT > 0x602
301 '.',
'd',
'v',
'r',
'-',
'm',
's',0,
304#if _WIN32_WINNT <= 0x602
307 '.',
'm',
'p',
'2',
'v',0,
310 '.',
'm',
'p',
'e',
'g',0,
312 '.',
'm',
'p',
'v',
'2',0,
326#if _WIN32_WINNT >= 0x600
328 '.',
'h',
't',
'm',
'l',0,
358const WCHAR type_compressed[] = {
'c',
'o',
'm',
'p',
'r',
'e',
's',
's',
'e',
'd',0};
361const WCHAR type_application[] = {
'a',
'p',
'p',
'l',
'i',
'c',
'a',
't',
'i',
'o',
'n',0};
363#define HARDCODED_NATIVE_WMSDK (PERCEIVEDFLAG_HARDCODED | PERCEIVEDFLAG_NATIVESUPPORT | PERCEIVEDFLAG_WMSDK)
364#define HARDCODED_NATIVE_GDIPLUS (PERCEIVEDFLAG_HARDCODED | PERCEIVEDFLAG_NATIVESUPPORT | PERCEIVEDFLAG_GDIPLUS)
365#define HARDCODED_NATIVE_ZIPFLDR (PERCEIVEDFLAG_HARDCODED | PERCEIVEDFLAG_NATIVESUPPORT | PERCEIVEDFLAG_ZIPFOLDER)
366#define SOFTCODED_NATIVESUPPORT (PERCEIVEDFLAG_SOFTCODED | PERCEIVEDFLAG_NATIVESUPPORT)
436 static const WCHAR PerceivedTypeKey[] = {
'P',
'e',
'r',
'c',
'e',
'i',
'v',
'e',
'd',
'T',
'y',
'p',
'e',0};
437 static const WCHAR SystemFileAssociationsKey[] = {
'S',
'y',
's',
't',
'e',
'm',
'F',
'i',
'l',
'e',
438 'A',
's',
's',
'o',
'c',
'i',
'a',
't',
'i',
'o',
'n',
's',
'\\',
'%',
's',0};
441 TRACE(
"(%s,%p,%p,%p)\n",
debugstr_w(lpszExt), lpType, lpFlag, lppszType);
446 *lpType =
Info->Perceived;
447 *lpFlag =
Info->FlagHardcoded;
471 *lpType =
Info->Perceived;
472 *lpFlag =
Info->FlagSoftcoded;
478 if (lppszType &&
Info->Type)
501 IQueryAssociations* lpAssoc;
503 TRACE(
"(0x%lx,%d,%s,%s,%p)\n", cfFlags, assockey,
debugstr_w(pszAssoc),
506 hRet =
AssocCreate( CLSID_QueryAssociations, &IID_IQueryAssociations, (
void **)&lpAssoc );
507 if (
FAILED(hRet))
return hRet;
546 TRACE(
"(0x%lx,%d,%s,%s,%p)\n", cfFlags, assockey,
debugstr_a(pszAssoc),
552 hRet =
AssocQueryKeyW(cfFlags, assockey, lpszAssocW, lpszExtraW, phkeyOut);
555 if (lpszAssocW != szAssocW)
558 if (lpszExtraW != szExtraW)
573 IQueryAssociations* lpAssoc;
581 hRet =
AssocCreate( CLSID_QueryAssociations, &IID_IQueryAssociations, (
void **)&lpAssoc );
582 if (
FAILED(hRet))
return hRet;
631 DWORD dwLenOut = *pcchOut;
635 lpszReturnW =
malloc((dwLenOut + 1) *
sizeof(
WCHAR));
644 lpszReturnW, &dwLenOut);
655 if (lpszReturnW != szReturnW)
660 if (lpszAssocW != szAssocW)
662 if (lpszExtraW != szExtraW)
677 IQueryAssociations* lpAssoc;
679 TRACE(
"(0x%lx,0x%d,%p,%s,%p,%p)\n", cfFlags,
str, hkAssoc,
682 hRet =
AssocCreate( CLSID_QueryAssociations, &IID_IQueryAssociations, (
void **)&lpAssoc );
683 if (
FAILED(hRet))
return hRet;
725 TRACE(
"(0x%lx,0x%d,%p,%s,%p,%p)\n", cfFlags,
str, hkAssoc,
735 DWORD dwLenOut = *pcchOut;
738 lpszReturnW =
malloc((dwLenOut + 1) *
sizeof(
WCHAR));
743 lpszReturnW, &dwLenOut);
753 if (lpszReturnW != szReturnW)
758 if (lpszExtraW != szExtraW)
static HRESULT SHELL_SetRegString(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszName, UINT Type, LPCWSTR pszData)
PRTL_UNICODE_STRING_BUFFER PULONG PULONG Unknown4
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void shell(int argc, const char *argv[])
#define RegCloseKey(hKey)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES IN DWORD Unknown3
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
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)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
#define WideCharToMultiByte
#define MultiByteToWideChar
#define IS_INTRESOURCE(x)
void WINAPI PathQuoteSpacesW(WCHAR *path)
int WINAPI StrCmpIW(const WCHAR *str, const WCHAR *comp)
DWORD WINAPI GetVersion(void)
HRESULT WINAPI SHStrDupW(const WCHAR *src, WCHAR **dest)
DWORD WINAPI SHSetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD type, const void *data, DWORD data_len)
DWORD WINAPI SHDeleteKeyW(HKEY hkey, const WCHAR *subkey)
HRESULT WINAPI SHCoCreateInstance(LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppv)
BOOL WINAPI AssocIsDangerous(LPCWSTR lpszAssoc)
static BOOL SHLWAPI_ParamAToW(LPCSTR lpszParam, LPWSTR lpszBuff, DWORD dwLen, LPWSTR *lpszOut)
#define SHLWAPI_DEF_ASSOCF
#define HARDCODED_NATIVE_ZIPFLDR
#define SOFTCODED_NATIVESUPPORT
static const WCHAR system_exts[]
HRESULT WINAPI AssocQueryKeyW(ASSOCF cfFlags, ASSOCKEY assockey, LPCWSTR pszAssoc, LPCWSTR pszExtra, HKEY *phkeyOut)
HRESULT WINAPI AssocQueryKeyA(ASSOCF cfFlags, ASSOCKEY assockey, LPCSTR pszAssoc, LPCSTR pszExtra, HKEY *phkeyOut)
HRESULT WINAPI AssocCreate(CLSID clsid, REFIID refiid, void **lpInterface)
const WCHAR type_compressed[]
HRESULT WINAPI AssocQueryStringA(ASSOCF cfFlags, ASSOCSTR str, LPCSTR pszAssoc, LPCSTR pszExtra, LPSTR pszOut, DWORD *pcchOut)
static const WCHAR document_exts[]
const WCHAR type_document[]
HRESULT WINAPI AssocQueryStringByKeyW(ASSOCF cfFlags, ASSOCSTR str, HKEY hkAssoc, LPCWSTR pszExtra, LPWSTR pszOut, DWORD *pcchOut)
static const WCHAR audio_exts[]
HRESULT WINAPI AssocGetPerceivedType(LPCWSTR lpszExt, PERCEIVED *lpType, INT *lpFlag, LPWSTR *lppszType)
const WCHAR type_system[]
static const struct AssocPerceivedInfo known_types[]
static const struct AssocPerceivedInfo * AssocFindByType(LPCWSTR pszType)
HRESULT WINAPI AssocQueryStringW(ASSOCF cfFlags, ASSOCSTR str, LPCWSTR pszAssoc, LPCWSTR pszExtra, LPWSTR pszOut, DWORD *pcchOut)
#define HARDCODED_NATIVE_WMSDK
HRESULT WINAPI AssocQueryStringByKeyA(ASSOCF cfFlags, ASSOCSTR str, HKEY hkAssoc, LPCSTR pszExtra, LPSTR pszOut, DWORD *pcchOut)
const WCHAR type_application[]
static const struct AssocPerceivedInfo * AssocFindByBuiltinExtension(LPCWSTR pszExt)
static const WCHAR application_exts[]
static const WCHAR image_exts[]
#define HARDCODED_NATIVE_GDIPLUS
static const WCHAR video_exts[]
static const WCHAR compressed_exts[]
static const WCHAR unspecified_exts[]
EXTERN_C ULONG WINAPI GetProcessOsVersion(void)
static HRESULT _AssocOpenRegKey(HKEY hKey, PCWSTR lpSubKey, PHKEY phkResult, BOOL bCreate)
EXTERN_C HRESULT WINAPI AssocCreateElement(_In_ REFCLSID rclsid, _In_ REFIID riid, _Outptr_ PVOID *ppvObj)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
static struct proto Ext[]
#define ERROR_FILE_NOT_FOUND
#define IsEqualGUID(rguid1, rguid2)
#define IQueryAssociations_GetKey(p, a, b, c, d)
#define PERCEIVEDFLAG_HARDCODED
#define IQueryAssociations_Release(p)
#define IQueryAssociations_Init(p, a, b, c, d)
_In_opt_ LPCSTR pszSubKey
#define IQueryAssociations_GetString(p, a, b, c, d, e)
#define PERCEIVEDFLAG_SOFTCODED
#define _WIN32_WINNT_VISTA
_In_ int _In_ BOOL bCreate
HRESULT WINAPI AssocMakeShell(SIZE_T Unknown, _In_ HKEY hClass, _In_ LPCWSTR pszExe, _In_ const ASSOCMAKESHELL *pAMS)
HRESULT WINAPI AssocMakeApplicationByKeyA(SIZE_T Unknown1, SIZE_T Unknown2, SIZE_T Unknown3)
HRESULT WINAPI AssocCopyVerbs(HKEY hSrc, HKEY hDst)
HRESULT WINAPI AssocMakeProgid(SIZE_T Unknown1, SIZE_T Unknown2, SIZE_T Unknown3, SIZE_T Unknown4)
HRESULT WINAPI AssocMakeApplicationByKeyW(SIZE_T Unknown1, SIZE_T Unknown2, SIZE_T Unknown3)
enum tagPERCEIVED PERCEIVED
@ PERCEIVED_TYPE_COMPRESSED
@ PERCEIVED_TYPE_DOCUMENT
@ PERCEIVED_TYPE_UNSPECIFIED
@ PERCEIVED_TYPE_APPLICATION
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define ERROR_NO_ASSOCIATION
#define CLASS_E_CLASSNOTAVAILABLE
#define HKEY_CLASSES_ROOT