31#define SEE_MASK_CLASSALL (SEE_MASK_CLASSNAME | SEE_MASK_CLASSKEY)
76 static INT s_bInDllProcess = -1;
78 if (s_bInDllProcess != -1)
79 return s_bInDllProcess;
83 return s_bInDllProcess;
91 UINT fCmic = (sei.
fMask & SEE_CMIC_COMMON_BASICFLAGS) | CMIC_MASK_FLAG_NO_UI;
92 CMINVOKECOMMANDINFO ici = {
sizeof(ici), fCmic, hWndOwner };
106 return pWide->Execute(pSEI);
114 hr = pAnsi->Execute(sei);
152 bool firstCharQuote =
false;
153 bool quotes_opened =
false;
154 bool backslash_encountered =
false;
156 for (
int curArg = 0; curArg <= argNum && *
args; ++curArg)
158 firstCharQuote =
false;
161 quotes_opened =
true;
162 firstCharQuote =
true;
171 backslash_encountered = !backslash_encountered;
173 else if (*
args ==
'"')
177 if (*(
args + 1) !=
'"')
179 quotes_opened =
false;
190 quotes_opened =
true;
193 backslash_encountered =
false;
197 backslash_encountered =
false;
198 if (*
args ==
' ' && !firstCharQuote)
202 if (curArg == argNum)
219 bool quotes_opened =
false;
220 bool backslash_encountered =
false;
222 for (
int curArg = 0; curArg <= argNum && *
args; ++curArg)
229 backslash_encountered = !backslash_encountered;
231 else if (*
args ==
'"')
235 if (*(
args + 1) !=
'"')
237 quotes_opened =
false;
246 quotes_opened =
true;
249 backslash_encountered =
false;
253 backslash_encountered =
false;
254 if (*
args ==
' ' && !quotes_opened && curArg != argNum)
258 if (curArg == argNum)
305 bool tildeEffect =
false;
381 if ((!done || (*
fmt ==
'1')) && lpFile)
463 ERR(
"pidl format buffer too small!\n");
485 WCHAR tmpBuffer[1024];
486 PWSTR tmpB = tmpBuffer;
497 if (envRet == 0 || envRet >
MAX_PATH)
560 hr = desktop->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strret);
581 DWORD dwCreationFlags;
614 startup.dwFlags |= STARTF_TITLEISLINKNAME;
622 if (psei->
fMask & SEE_MASK_ICON)
625 startup.dwFlags |= STARTF_SHELLPRIVATE;
634 startup.dwFlags |= STARTF_SHELLPRIVATE;
655 WARN(
"CreateProcess returned error %ld\n",
retval);
693 if (!got_path)
total += 5;
744 wcscpy(
buffer,
L"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\");
814 commandlen /=
sizeof(
WCHAR);
834 paramlen /=
sizeof(
WCHAR);
837 commandlen += paramlen;
876 const WCHAR *search_paths[3] = {0};
890 WARN(
"(lpFile=%s,lpResult=%s): NULL parameter\n",
902 if (lpPath && *lpPath)
904 search_paths[0] = lpPath;
905 search_paths[1] = curdir;
909 search_paths[0] = curdir;
916 TRACE(
"PathResolveW returned non-zero\n");
922 while (
i > 0 && xlpFile[
i - 1] ==
'.')
945 TRACE(
"Returning SE_ERR_FNF\n");
949 extension =
wcsrchr(xlpFile,
'.');
954 if (extension ==
NULL || extension[1] == 0)
956 WARN(
"Returning SE_ERR_NOASSOC\n");
978 while (*
p && *
p !=
' ' && *
p !=
'\t')
p++;
982 while (*
p ==
' ' || *
p ==
'\t')
p++;
985 if (
_wcsicmp(tok, &extension[1]) == 0)
987 wcscpy(lpResult, xlpFile);
1002 classnamelen /=
sizeof(
WCHAR);
1024 if (finishedLen > resultLen)
1025 ERR(
"Argify buffer not large enough.. truncated\n");
1027 if (*lpResult ==
'"')
1030 while (*(
p + 1) !=
'"')
1041 while (*
p !=
' ' && *
p !=
'\0')
1056 tok =
wcschr(lpResult,
'^');
1060 wcscat(lpResult, xlpFile);
1064 wcscat(lpResult, &tok[5]);
1082 HSZ hsz1, HSZ hsz2, HDDEDATA hData,
1085 TRACE(
"dde_cb: %04x, %04x, %p, %p, %p, %p, %08lx, %08lx\n",
1086 uType, uFmt, hConv, hsz1, hsz2, hData, dwData1, dwData2);
1106 WCHAR app[256],
topic[256], ifexec[256], static_res[256];
1109 LONG applen, topiclen, ifexeclen;
1113 DWORD resultLen, endkeyLen;
1126 endkeyLen =
ARRAY_SIZE(regkey) - (endkey - regkey);
1127 if (
strlenW(
L"\\application") + 1 > endkeyLen)
1132 wcscpy(endkey,
L"\\application");
1133 applen =
sizeof(app);
1145 FIXME(
"size of input parameter %s larger than buffer\n",
1192 if (
strlenW(
L"\\topic") + 1 > endkeyLen)
1198 topiclen =
sizeof(
topic);
1226 TRACE(
"Couldn't launch\n");
1230 if (ddeexec ==
NULL)
1232 TRACE(
"Exiting because ddeexec is NULL. ret=42.\n");
1238 if (
wcscmp(ddeexec,
L"") == 0)
1240 TRACE(
"Exiting because ddeexec is 'empty string'. ret=42.\n");
1248 TRACE(
"Couldn't connect. ret=%d\n",
ret);
1253 if (
strlenW(
L"\\ifexec") + 1 > endkeyLen)
1259 ifexeclen =
sizeof(ifexec);
1314 DWORD cmdlen =
sizeof(
cmd), ddeexeclen =
sizeof(ddeexec);
1331 cmdlen /=
sizeof(
WCHAR);
1338 ERR(
"Argify buffer not large enough, truncating\n");
1381 TRACE(
"returning %s\n", lpResult);
1501 allocatedPidl.
Attach(pidl);
1510 CMINVOKECOMMANDINFOEX ici;
1528 r = cm->QueryContextMenu(
hmenu, 0, 0x20, 0x7fff, CMF_DEFAULTONLY);
1533 for (
i = 0;
i <
n;
i++)
1557 memset(&ici, 0,
sizeof ici);
1558 ici.cbSize =
sizeof ici;
1559 ici.fMask = (sei->
fMask & SEE_CMIC_COMMON_BASICFLAGS) | CMIC_MASK_UNICODE;
1560 ici.nShow = sei->
nShow;
1562 ici.hwnd = sei->
hwnd;
1565 r = cm->InvokeCommand((LPCMINVOKECOMMANDINFO)&ici);
1567 TRACE(
"invoke command returned %08x\n",
r);
1595 hr =
obj->Initialize(
NULL, dataobj, hkey);
1636 pidl = allocatedPidl;
1667 BOOL fDefault = StrIsNullOrEmpty(sei->
lpVerb);
1668 CMINVOKECOMMANDINFOEX ici = {
sizeof(ici) };
1669 ici.fMask = SeeFlagsToCmicFlags(sei->
fMask) | CMIC_MASK_UNICODE;
1670 ici.nShow = sei->
nShow;
1674 ici.lpVerbW = sei->
lpVerb;
1676 ici.hwnd = sei->
hwnd;
1677 ici.lpParameters = parameters;
1679 ici.lpDirectory =
dir;
1682 ici.hIcon = sei->
hIcon;
1683 if (ici.fMask & (CMIC_MASK_HASLINKNAME | CMIC_MASK_HASTITLE))
1686 enum { idFirst = 1, idLast = 0x7fff };
1689 hr = cm->QueryContextMenu(hMenu, 0, idFirst, idLast, fDefault ? CMF_DEFAULTONLY : 0);
1695 uDefault = (uDefault != -1) ? uDefault - idFirst : 0;
1700 hr = cm->InvokeCommand((LPCMINVOKECOMMANDINFO)&ici);
1716 HKEY hkey, hkeycm = 0;
1730 r =
RegOpenKeyW(hkey,
L"shellex\\ContextMenuHandlers", &hkeycm);
1777 execCmd,
sizeof(execCmd));
1785 if (!done && wszApplicationName[0])
1790 if (*wszApplicationName !=
'"')
1793 strcatW(wcmd, wszApplicationName);
1797 strcatW(wcmd, wszApplicationName);
1801 ERR(
"Argify buffer not large enough... truncating\n");
1802 return execfunc(wcmd,
NULL,
FALSE, psei, psei_out);
1812 wszApplicationName,
NULL, psei,
1813 psei_out, execfunc );
1828 ERR(
"parameters len exceeds buffer size (%i > %i), truncating\n",
1831 if (
strlenW(
L"explorer.exe") > dwApplicationNameLen)
1832 ERR(
"application len exceeds buffer size (%i), truncating\n",
1833 dwApplicationNameLen);
1834 lstrcpynW(wszApplicationName,
L"explorer.exe", dwApplicationNameLen);
1835 appKnownSingular =
TRUE;
1837 sei->
fMask &= ~SEE_MASK_INVOKEIDLIST;
1854 if (resultLen > dwApplicationNameLen)
1855 ERR(
"Argify buffer not large enough... truncating\n");
1856 appKnownSingular =
FALSE;
1865 appKnownSingular =
TRUE;
1867 sei->
fMask &= ~SEE_MASK_INVOKEIDLIST;
1870 return appKnownSingular;
1892 CMINVOKECOMMANDINFO ici = {
sizeof(ici) };
1893 ici.fMask = (sei->fMask & SEE_CMIC_COMMON_BASICFLAGS) & ~CMIC_MASK_UNICODE;
1894 ici.nShow = sei->nShow;
1895 ici.hwnd = sei->hwnd;
1897 if (sei->lpVerb && sei->lpVerb[0])
1901 ici.lpVerb = szVerb;
1906 const INT idCmdFirst = 1, idCmdLast = 0x7FFF;
1907 hr = pCM->QueryContextMenu(hMenu, 0, idCmdFirst, idCmdLast, CMF_DEFAULTONLY);
1916 if (nDefaultID == -1)
1917 nDefaultID = idCmdFirst;
1921 hr = pCM->InvokeCommand(&ici);
1934 if (wszParameters[0])
1946 if (wszParameters[0])
1949 strcatW(wszQuotedCmd, wszParameters);
1970 lpstrRes =
strchrW(lpFile,
':');
1972 iSize = lpstrRes - lpFile;
1984 memcpy(lpstrProtocol, lpFile, iSize *
sizeof(
WCHAR));
1985 lpstrProtocol[iSize] =
'\0';
1986 strcatW(lpstrProtocol,
L"\\shell\\");
1988 strcatW(lpstrProtocol,
L"\\command");
1991 wcmd, execfunc, psei, psei_out);
2032 return buf.Detach();
2040 static const DWORD unsupportedFlags =
2051 TRACE(
"mask=0x%08x hwnd=%p verb=%s file=%s parm=%s dir=%s show=0x%08x class=%s\n",
2077 wszApplicationName.
Allocate(dwApplicationNameLen);
2078 *wszApplicationName =
'\0';
2082 if(
len-1 >= dwApplicationNameLen)
2083 dwApplicationNameLen =
len;
2085 wszApplicationName.
Allocate(dwApplicationNameLen);
2089 wszApplicationName[
len-2] =
'\0';
2090 appKnownSingular =
TRUE;
2097 if(
l > dwApplicationNameLen) dwApplicationNameLen =
l + 1;
2098 wszApplicationName.
Allocate(dwApplicationNameLen);
2101 if (wszApplicationName[2] == 0 && wszApplicationName[1] ==
L':' &&
2102 ((
L'A' <= wszApplicationName[0] && wszApplicationName[0] <=
L'Z') ||
2103 (
L'a' <= wszApplicationName[0] && wszApplicationName[0] <=
L'z')))
2110 WCHAR parametersBuffer[1024];
2111 LPWSTR wszParameters = parametersBuffer;
2118 if (
len > parametersLen)
2121 wszParameters = wszParamAlloc;
2122 parametersLen =
len;
2127 *wszParameters =
L'\0';
2131 LPWSTR wszDir = dirBuffer;
2142 wszDir = wszDirAlloc;
2149 wszDir = wszDirAlloc;
2173 sei_tmp.
lpFile = wszApplicationName;
2177 if (sei_tmp.
fMask & unsupportedFlags)
2179 FIXME(
"flags ignored: 0x%08x\n", sei_tmp.
fMask & unsupportedFlags);
2190 if (dwApplicationNameLen)
2193 TRACE(
"Unable to get PIDL parsing path\n");
2195 appKnownSingular =
TRUE;
2204 wszApplicationName.
Attach(tmp);
2205 sei_tmp.
lpFile = wszApplicationName;
2235 Info.pcszFile = wszApplicationName;
2265 dwApplicationNameLen );
2279 wszApplicationName.
Attach(
buf.Detach());
2280 sei_tmp.
lpFile = wszApplicationName;
2291 if (sei_tmp.
lpFile[0] ==
L'"')
2297 if (parametersLen <
_countof(parametersBuffer))
2300 wszParameters = parametersBuffer;
2305 wszParameters = wszParamAlloc;
2317 LPWSTR beg = wszApplicationName;
2342 WCHAR wcmdBuffer[1024];
2343 LPWSTR wcmd = wcmdBuffer;
2372 WCHAR wszKeyname[256];
2379 wszApplicationName,
env, &sei_tmp,
2393 swprintf(lpQuotedFile,
L"\"%s\"", lpFile);
2396 wszApplicationName,
env,
2397 &sei_tmp, sei, execfunc);
2411 WCHAR lpstrTmpFile[256];
2413 strcatW(lpstrTmpFile, lpFile);
2441 TRACE(
"%p,%s,%s,%s,%s,%d\n",
2445 sei.
cbSize =
sizeof(sei);
2452 sei.
nShow = iShowCmd;
2474 DbgPrint(
"FIXME: Failed with error 0 on '%ls'\n", sei->lpFile);
2583 fOldMask = sei->
fMask;
2593 sei->
fMask = fOldMask;
2613 sei.
cbSize =
sizeof(sei);
2620 sei.
nShow = nShowCmd;
2650 seiW.
cbSize =
sizeof(seiW);
2653 seiW.
nShow = iShowCmd;
2706 for (
pch = psz + 1; *
pch && ich + 1 < cchArg0; ++ich, ++
pch)
2708 if (*
pch ==
L'"' &&
pch[1] ==
L'"')
2711 pszArg0[ich] =
L'"';
2713 else if (*
pch ==
L'"')
2722 pszArg0[ich] = *
pch;
2732 pszArg0[ich] = *
pch;
2760 if (pwszCommand ==
NULL)
2815 apPathList[0] = pwszStartDir;
2816 apPathList[1] =
NULL;
2857 info.lpVerb = pszVerb;
2858 info.lpFile = szFile;
2859 info.lpParameters = (pchParams && *pchParams) ? pchParams :
NULL;
2860 info.lpDirectory = pwszStartDir;
2887 TRACE(
"(%p, %s, %s, %s, %s, %p, %s, %p, %u, %p, %lu)\n",
2893 ExecInfo.
cbSize =
sizeof(ExecInfo);
2896 ExecInfo.
lpVerb = lpOperation;
2897 ExecInfo.
lpFile = lpFile;
2920 if (lphProcess ==
NULL)
2954 TRACE(
"(%p, %s, %s, %s, %s, %p, %s, %p, %u, %p, %lu)\n",
2960 ExecInfo.
cbSize =
sizeof(ExecInfo);
2963 ExecInfo.
lpVerb = lpOperation;
2964 ExecInfo.
lpFile = lpFile;
2987 if (lphProcess ==
NULL)
3082 if (*pszSrc ==
L'"')
3111 for (
INT ich = 0; ; ++ich)
3115 if (pszSrc[ich] && pszSrc[ich] !=
L' ')
3120 if (resolveRelative &&
3135 pchArg = pszSrc + ich;
3143 else if (!resolveRelative)
3162 pchArg = pszSrc + cchPath;
3174 return requiredSize;
3179 return requiredSize;
3192 if (!pszCmdLine || !*pszCmdLine)
3197 if (*pszCmdLine ==
L'?')
3201 fNewMask |= MaskValue;
3205 pszCmdLine = pch2ndQuestion + 1;
3222 execInfo.
fMask = fNewMask;
3226 execInfo.
nShow = nCmdShow;
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define PRF_TRYPROGRAMEXTENSIONS
#define shell32_hInstance
#define SECL_ALLOW_NONEXE
static void startup(void)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define UlongToHandle(ul)
#define RegCloseKey(hKey)
bool Allocate(_In_ size_t nElements=1)
static LPCWSTR LPCWSTR LPCWSTR env
HDDEDATA WINAPI DdeClientTransaction(LPBYTE, DWORD, HCONV, HSZ, UINT, UINT, DWORD, LPDWORD)
BOOL WINAPI DdeUninitialize(DWORD)
UINT WINAPI DdeInitializeW(LPDWORD, PFNCALLBACK, DWORD, DWORD)
HCONV WINAPI DdeConnect(DWORD, HSZ, HSZ, PCONVCONTEXT)
UINT WINAPI DdeGetLastError(DWORD)
HSZ WINAPI DdeCreateStringHandleW(DWORD, LPCWSTR, INT)
BOOL WINAPI DdeDisconnect(HCONV)
BOOL WINAPI DdeFreeDataHandle(HDDEDATA)
#define APPCMD_CLIENTONLY
UINT WINAPI DdeInitializeA(LPDWORD, PFNCALLBACK, DWORD, DWORD)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
INT WINAPI StrCmpNIW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
#define ERROR_INVALID_PARAMETER
#define GetCurrentDirectoryW(x, y)
#define GetEnvironmentVariableW(x, y, z)
#define WideCharToMultiByte
#define ERROR_ACCESS_DENIED
static const WCHAR *const ext[]
BOOL WINAPI FreeEnvironmentStringsW(IN LPWSTR EnvironmentStrings)
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
VOID WINAPI RaiseException(_In_ DWORD dwExceptionCode, _In_ DWORD dwExceptionFlags, _In_ DWORD nNumberOfArguments, _In_opt_ const ULONG_PTR *lpArguments)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
DWORD WINAPI SearchPathW(IN LPCWSTR lpPath OPTIONAL, IN LPCWSTR lpFileName, IN LPCWSTR lpExtension OPTIONAL, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart OPTIONAL)
DWORD WINAPI GetShortPathNameW(IN LPCWSTR lpszLongPath, OUT LPWSTR lpszShortPath, IN DWORD cchBuffer)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
VOID WINAPI ExitProcess(IN UINT uExitCode)
BOOL WINAPI GetBinaryTypeW(LPCWSTR lpApplicationName, LPDWORD lpBinaryType)
INT WINAPI GetProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
void WINAPI PathRemoveBlanksW(WCHAR *path)
void WINAPI PathUnquoteSpacesW(WCHAR *path)
int WINAPI PathGetDriveNumberW(const WCHAR *path)
HRESULT WINAPI PathCreateFromUrlW(const WCHAR *url, WCHAR *path, DWORD *pcchPath, DWORD dwReserved)
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
BOOL WINAPI UrlIsW(const WCHAR *url, URLIS Urlis)
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
BOOL WINAPI PathIsRelativeW(const WCHAR *path)
BOOL WINAPI PathStripToRootW(WCHAR *path)
BOOL WINAPI PathIsURLW(const WCHAR *path)
WCHAR *WINAPI PathGetArgsW(const WCHAR *path)
BOOL WINAPI PathFileExistsW(const WCHAR *path)
LPWSTR WINAPI DECLSPEC_HOTPATCH GetEnvironmentStringsW(void)
BOOL WINAPI SHRegGetBoolUSValueW(const WCHAR *subkey, const WCHAR *value, BOOL ignore_hkcu, BOOL default_value)
BOOL WINAPI StrToIntExW(const WCHAR *str, DWORD flags, INT *ret)
INT WINAPI DECLSPEC_HOTPATCH LoadStringW(HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
BOOL WINAPI StrTrimW(WCHAR *str, const WCHAR *trim)
LPWSTR WINAPI CharLowerW(WCHAR *str)
WCHAR *WINAPI StrDupW(const WCHAR *str)
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
DWORD WINAPI GetVersion(void)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT SHGetNameAndFlagsW(_In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_opt_ LPWSTR pszText, _In_ UINT cchBuf, _Inout_opt_ DWORD *pdwAttributes)
EXTERN_C HRESULT SHELL_GetUIObjectOfAbsoluteItem(_In_opt_ HWND hWnd, _In_ PCIDLIST_ABSOLUTE pidl, _In_ REFIID riid, _Out_ void **ppvObj)
HRESULT SHCoInitializeAnyApartment(VOID)
void WINAPI SHFree(LPVOID pv)
HRESULT WINAPI SHExtCoCreateInstance(_In_opt_ LPCWSTR aclsid, _In_opt_ const CLSID *clsid, _In_opt_ LPUNKNOWN pUnkOuter, _In_ REFIID riid, _Out_ LPVOID *ppv)
BOOL WINAPI PathResolveW(_Inout_ LPWSTR path, _Inout_opt_ LPCWSTR *dirs, _In_ DWORD flags)
DWORD WINAPI SHGetAppCompatFlags(_In_ DWORD dwMask)
HRESULT WINAPI AssocQueryStringW(ASSOCF cfFlags, ASSOCSTR str, LPCWSTR pszAssoc, LPCWSTR pszExtra, LPWSTR pszOut, DWORD *pcchOut)
HANDLE WINAPI SHAllocShared(LPCVOID lpvData, DWORD dwSize, DWORD dwProcId)
PVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId)
BOOL WINAPI SHUnlockShared(LPVOID lpView)
void WINAPI PathRemoveArgsW(LPWSTR lpszPath)
BOOL WINAPI PathFindOnPathW(LPWSTR lpszFile, LPCWSTR *lppszOtherDirs)
BOOL WINAPI PathFindOnPathExW(LPWSTR lpszFile, LPCWSTR *lppszOtherDirs, DWORD dwWhich)
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
#define FAILED_UNEXPECTEDLY
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
GLdouble GLdouble GLdouble r
GLsizei const GLchar *const * strings
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
nsresult QueryInterface(nsIIDRef riid, void **result)
_In_ BOOL _In_ HANDLE hProcess
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
LPCWSTR LPCWSTR LPCWSTR DWORD dwFlags
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static IPrintDialogCallback callback
static DWORD DWORD void LPSTR DWORD cch
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
unsigned __int3264 UINT_PTR
HMONITOR WINAPI MonitorFromWindow(HWND, DWORD)
#define _Out_writes_opt_(s)
#define FILE_ATTRIBUTE_DIRECTORY
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
#define PathAddExtensionW
#define PathAddBackslashW
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
static const WCHAR szName[]
static const char topic[]
#define strncmpiW(s1, s2, n)
#define REGSTR_PATH_EXPLORER
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
#define DECLSPEC_HOTPATCH
BOOL HCR_GetDefaultVerbW(HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len)
BOOL HCR_GetExecuteCommandW(HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len)
HRESULT HCR_GetProgIdKeyOfExtension(PCWSTR szExtension, PHKEY phKey, BOOL AllowFallback)
static __inline void __SHCloneStrWtoA(char **target, const WCHAR *source)
@ REST_SH32_ENABLESHELLEXECUTEHOOKS
DWORD SH32_InternalRestricted(DWORD rest)
static __inline LPWSTR __SHCloneStrAtoW(WCHAR **target, const char *source)
static __inline void __SHCloneStrW(WCHAR **target, const WCHAR *source)
#define SEE_MASK_FLAG_LOG_USAGE
#define SEE_MASK_DOENVSUBST
#define SEE_MASK_CLASSKEY
#define SEE_MASK_NOCLOSEPROCESS
struct _SHELLEXECUTEINFOW SHELLEXECUTEINFOW
#define SEE_MASK_HMONITOR
#define SEE_MASK_CLASSNAME
#define SE_ERR_ACCESSDENIED
#define SE_ERR_DLLNOTFOUND
#define SEE_MASK_WAITFORINPUTIDLE
#define SEE_MASK_FLAG_DDEWAIT
#define SEE_MASK_CONNECTNETDRV
_In_opt_ LPCSTR lpDirectory
#define SEE_MASK_INVOKEIDLIST
#define SEE_MASK_FLAG_NO_UI
#define SE_ERR_DDETIMEOUT
#define SEE_MASK_NO_CONSOLE
LONG WINAPI SHRegQueryValueExW(HKEY hkey, LPCWSTR pszValue, LPDWORD pdwReserved, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData)
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
static UINT_PTR SHELL_execute_class(LPCWSTR wszApplicationName, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc)
static HRESULT ShellExecute_ContextMenuVerb(LPSHELLEXECUTEINFOW sei)
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExA(LPSHELLEXECUTEINFOA sei)
static UINT_PTR InvokeOpenWith(HWND hWndOwner, SHELLEXECUTEINFOW &sei)
EXTERN_C VOID WINAPI ShellExec_RunDLLW(_In_opt_ HWND hwnd, _In_opt_ HINSTANCE hInstance, _In_ PCWSTR pszCmdLine, _In_ INT nCmdShow)
HINSTANCE WINAPI FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR lpResult)
static HRESULT shellex_load_object_and_run(HKEY hkey, LPCGUID guid, LPSHELLEXECUTEINFOW sei)
static void do_error_dialog(UINT_PTR retval, HWND hwnd, PCWSTR filename)
static void ParseNoTildeEffect(PWSTR &res, LPCWSTR &args, DWORD &len, DWORD &used, int argNum)
static BOOL SHELL_InvokePidl(_In_ LPSHELLEXECUTEINFOW sei, _In_ LPCITEMIDLIST pidl)
EXTERN_C void WINAPI OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow)
static LPCWSTR SplitParams(LPCWSTR psz, LPWSTR pszArg0, size_t cchArg0)
EXTERN_C HINSTANCE WINAPI RealShellExecuteExW(_In_opt_ HWND hwnd, _In_opt_ LPCWSTR lpOperation, _In_opt_ LPCWSTR lpFile, _In_opt_ LPCWSTR lpParameters, _In_opt_ LPCWSTR lpDirectory, _In_opt_ LPWSTR lpReturn, _In_opt_ LPCWSTR lpTitle, _In_opt_ LPVOID lpReserved, _In_ INT nCmdShow, _Out_opt_ PHANDLE lphProcess, _In_ DWORD dwFlags)
static UINT_PTR execute_from_key(LPCWSTR key, LPCWSTR lpFile, WCHAR *env, LPCWSTR szCommandline, LPCWSTR executable_name, SHELL_ExecuteW32 execfunc, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out)
EXTERN_C void WINAPI OpenAs_RunDLLW(HWND hwnd, HINSTANCE hinst, LPCWSTR cmdline, int cmdshow)
static LONG ShellExecute_FromContextMenuHandlers(LPSHELLEXECUTEINFOW sei)
static UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpVerb, LPWSTR lpResult, DWORD resultLen, LPWSTR key, WCHAR **env, LPITEMIDLIST pidl, LPCWSTR args)
static DWORD ShellExecute_Normal(_Inout_ LPSHELLEXECUTEINFOW sei)
EXTERN_C VOID WINAPI ShellExec_RunDLLA(_In_opt_ HWND hwnd, _In_opt_ HINSTANCE hInstance, _In_ PCSTR pszCmdLine, _In_ INT nCmdShow)
EXTERN_C HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpVerb, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT iShowCmd, void *callback)
static BOOL SHELL_execute(LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc)
static HDDEDATA CALLBACK dde_cb(UINT uType, UINT uFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, ULONG_PTR dwData1, ULONG_PTR dwData2)
static BOOL SHELL_ArgifyW(WCHAR *out, DWORD len, const WCHAR *fmt, const WCHAR *lpFile, LPITEMIDLIST pidl, LPCWSTR args, DWORD *out_len, const WCHAR *lpDir)
#define SEE_MASK_CLASSALL
static WCHAR * expand_environment(const WCHAR *str)
static HRESULT TryShellExecuteHooks(LPSHELLEXECUTEINFOW pSEI)
HINSTANCE WINAPI FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult)
static UINT_PTR SHELL_execute_url(LPCWSTR lpFile, LPCWSTR wcmd, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc)
EXTERN_C LONG PathProcessCommandW(_In_ PCWSTR pszSrc, _Out_writes_opt_(dwBuffSize) PWSTR pszDest, _In_ INT cchDest, _In_ DWORD dwFlags)
static unsigned dde_connect(const WCHAR *key, const WCHAR *start, WCHAR *ddeexec, const WCHAR *lpFile, WCHAR *env, LPCWSTR szCommandline, LPITEMIDLIST pidl, SHELL_ExecuteW32 execfunc, const SHELLEXECUTEINFOW *psei, LPSHELLEXECUTEINFOW psei_out)
static VOID ShellExecute_ShowError(_In_ const SHELLEXECUTEINFOW *ExecInfo, _In_opt_ LPCWSTR pszCaption, _In_ DWORD dwError)
EXTERN_C BOOL PathIsExeW(LPCWSTR lpszPath)
static HRESULT shellex_run_context_menu_default(IShellExtInit *obj, LPSHELLEXECUTEINFOW sei)
static HRESULT InvokeShellExecuteHook(PCWSTR pszClsid, LPSHELLEXECUTEINFOW pSEI)
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
static UINT SHELL_FindExecutableByVerb(LPCWSTR lpVerb, LPWSTR key, LPWSTR classname, LPWSTR command, LONG commandlen)
static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait, const SHELLEXECUTEINFOW *psei, LPSHELLEXECUTEINFOW psei_out)
static BOOL SHELL_InRunDllProcess(VOID)
static BOOL SHELL_translate_idlist(LPSHELLEXECUTEINFOW sei, LPWSTR wszParameters, DWORD parametersLen, LPWSTR wszApplicationName, DWORD dwApplicationNameLen)
static HKEY ShellExecute_GetClassKey(const SHELLEXECUTEINFOW *sei)
static HRESULT shellex_get_contextmenu(LPSHELLEXECUTEINFOW sei, CComPtr< IContextMenu > &cm)
EXTERN_C HINSTANCE WINAPI RealShellExecuteA(_In_opt_ HWND hwnd, _In_opt_ LPCSTR lpOperation, _In_opt_ LPCSTR lpFile, _In_opt_ LPCSTR lpParameters, _In_opt_ LPCSTR lpDirectory, _In_opt_ LPSTR lpReturn, _In_opt_ LPCSTR lpTitle, _In_opt_ LPVOID lpReserved, _In_ INT nCmdShow, _Out_opt_ PHANDLE lphProcess)
static HRESULT shellex_get_dataobj(LPSHELLEXECUTEINFOW sei, CComPtr< IDataObject > &dataObj)
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
static VOID ShellExec_RunDLL_Helper(_In_opt_ HWND hwnd, _In_opt_ HINSTANCE hInstance, _In_ PCWSTR pszCmdLine, _In_ INT nCmdShow)
static LPWSTR SHELL_BuildEnvW(const WCHAR *path)
UINT_PTR(* SHELL_ExecuteW32)(const WCHAR *lpCmd, WCHAR *env, BOOL shWait, const SHELLEXECUTEINFOW *sei, LPSHELLEXECUTEINFOW sei_out)
static HRESULT SHELL_GetPathFromIDListForExecuteW(LPCITEMIDLIST pidl, LPWSTR pszPath, UINT uOutSize)
static void ParseTildeEffect(PWSTR &res, LPCWSTR &args, DWORD &len, DWORD &used, int argNum)
HINSTANCE WINAPI ShellExecuteA(HWND hWnd, LPCSTR lpVerb, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT iShowCmd)
EXTERN_C HINSTANCE WINAPI RealShellExecuteExA(_In_opt_ HWND hwnd, _In_opt_ LPCSTR lpOperation, _In_opt_ LPCSTR lpFile, _In_opt_ LPCSTR lpParameters, _In_opt_ LPCSTR lpDirectory, _In_opt_ LPSTR lpReturn, _In_opt_ LPCSTR lpTitle, _In_opt_ LPVOID lpReserved, _In_ INT nCmdShow, _Out_opt_ PHANDLE lphProcess, _In_ DWORD dwFlags)
static BOOL SHELL_TryAppPathW(LPCWSTR szName, LPWSTR lpResult, WCHAR **env)
static int Win32ErrFromHInst(HINSTANCE hInst)
static UINT_PTR SHELL_quote_and_execute(LPCWSTR wcmd, LPCWSTR wszParameters, LPCWSTR wszKeyname, LPCWSTR wszApplicationName, LPWSTR env, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc)
EXTERN_C HINSTANCE WINAPI RealShellExecuteW(_In_opt_ HWND hwnd, _In_opt_ LPCWSTR lpOperation, _In_opt_ LPCWSTR lpFile, _In_opt_ LPCWSTR lpParameters, _In_opt_ LPCWSTR lpDirectory, _In_opt_ LPWSTR lpReturn, _In_opt_ LPCWSTR lpTitle, _In_opt_ LPVOID lpReserved, _In_ INT nCmdShow, _Out_opt_ PHANDLE lphProcess)
#define PPCF_FORCEQUALIFY
#define PPCF_LONGESTPOSSIBLE
@ OAIF_ALLOW_REGISTRATION
#define PPCF_ADDARGUMENTS
#define PPCF_NODIRECTORIES
#define SHACF_WIN95SHLEXEC
#define IDS_FILE_NOT_FOUND
#define IDS_SHLEXEC_NOASSOC
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
#define EXCEPTION_NONCONTINUABLE
#define LANG_USER_DEFAULT
#define SEE_MASK_USE_RESERVED
#define SEE_MASK_FLAG_SEPVDM
#define SEE_MASK_HASTITLE
#define SEE_MASK_NO_HOOKS
#define SEE_MASK_UNKNOWN_0x1000
#define SEE_MASK_HASLINKNAME
#define INVALID_FILE_ATTRIBUTES
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
DWORD WINAPI GetLastError(void)
#define STARTF_USESHOWWINDOW
#define CREATE_UNICODE_ENVIRONMENT
#define FORMAT_MESSAGE_FROM_SYSTEM
#define CREATE_SEPARATE_WOW_VDM
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
#define EXCEPTION_ACCESS_VIOLATION
#define CREATE_NEW_CONSOLE
struct _STARTUPINFOW STARTUPINFOW
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define ERROR_APP_WRONG_OS
#define ERROR_SHARING_VIOLATION
#define ERROR_DLL_NOT_FOUND
#define ERROR_NO_ASSOCIATION
#define ERROR_INVALID_DLL
#define ERROR_SINGLE_INSTANCE_APP
#define ERROR_OLD_WIN_VERSION
#define ERROR_FUNCTION_FAILED
_In_ DWORD _In_ int _In_ int _In_opt_ LPNLSVERSIONINFO _In_opt_ LPVOID lpReserved
_In_ DWORD _In_ int _In_ int cchDest
#define HKEY_LOCAL_MACHINE
#define HKEY_CLASSES_ROOT
HMENU WINAPI CreatePopupMenu(void)
UINT WINAPI GetMenuDefaultItem(_In_ HMENU hMenu, _In_ UINT fByPos, _In_ UINT gmdiFlags)
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
HMENU WINAPI CreateMenu(void)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
DWORD WINAPI WaitForInputIdle(_In_ HANDLE, _In_ DWORD)
#define MAKEINTRESOURCEA(i)
BOOL WINAPI DestroyMenu(_In_ HMENU)
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
#define MAKEINTRESOURCEW(i)
#define IID_PPV_ARG(Itype, ppType)
#define IID_NULL_PPV_ARG(Itype, ppType)