31#define SEE_MASK_CLASSALL (SEE_MASK_CLASSNAME | SEE_MASK_CLASSKEY)
40 static INT s_bInDllProcess = -1;
42 if (s_bInDllProcess != -1)
43 return s_bInDllProcess;
47 return s_bInDllProcess;
55 UINT fCmic = (sei.
fMask & SEE_CMIC_COMMON_BASICFLAGS) | CMIC_MASK_FLAG_NO_UI;
56 CMINVOKECOMMANDINFO ici = {
sizeof(ici), fCmic, hWndOwner };
65 bool firstCharQuote =
false;
66 bool quotes_opened =
false;
67 bool backslash_encountered =
false;
69 for (
int curArg = 0; curArg <= argNum && *
args; ++curArg)
71 firstCharQuote =
false;
75 firstCharQuote =
true;
84 backslash_encountered = !backslash_encountered;
86 else if (*
args ==
'"')
90 if (*(
args + 1) !=
'"')
92 quotes_opened =
false;
103 quotes_opened =
true;
106 backslash_encountered =
false;
110 backslash_encountered =
false;
111 if (*
args ==
' ' && !firstCharQuote)
115 if (curArg == argNum)
132 bool quotes_opened =
false;
133 bool backslash_encountered =
false;
135 for (
int curArg = 0; curArg <= argNum && *
args; ++curArg)
142 backslash_encountered = !backslash_encountered;
144 else if (*
args ==
'"')
148 if (*(
args + 1) !=
'"')
150 quotes_opened =
false;
159 quotes_opened =
true;
162 backslash_encountered =
false;
166 backslash_encountered =
false;
167 if (*
args ==
' ' && !quotes_opened && curArg != argNum)
171 if (curArg == argNum)
218 bool tildeEffect =
false;
294 if ((!done || (*
fmt ==
'1')) && lpFile)
376 ERR(
"pidl format buffer too small!\n");
398 WCHAR tmpBuffer[1024];
399 PWSTR tmpB = tmpBuffer;
410 if (envRet == 0 || envRet >
MAX_PATH)
473 hr = desktop->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strret);
494 DWORD dwCreationFlags;
527 startup.dwFlags |= STARTF_TITLEISLINKNAME;
535 if (psei->
fMask & SEE_MASK_ICON)
538 startup.dwFlags |= STARTF_SHELLPRIVATE;
547 startup.dwFlags |= STARTF_SHELLPRIVATE;
568 WARN(
"CreateProcess returned error %ld\n",
retval);
606 if (!got_path)
total += 5;
657 wcscpy(
buffer,
L"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\");
727 commandlen /=
sizeof(
WCHAR);
747 paramlen /=
sizeof(
WCHAR);
750 commandlen += paramlen;
789 const WCHAR *search_paths[3] = {0};
803 WARN(
"(lpFile=%s,lpResult=%s): NULL parameter\n",
815 if (lpPath && *lpPath)
817 search_paths[0] = lpPath;
818 search_paths[1] = curdir;
822 search_paths[0] = curdir;
829 TRACE(
"PathResolveW returned non-zero\n");
835 while (
i > 0 && xlpFile[
i - 1] ==
'.')
858 TRACE(
"Returning SE_ERR_FNF\n");
862 extension =
wcsrchr(xlpFile,
'.');
867 if (extension ==
NULL || extension[1] == 0)
869 WARN(
"Returning SE_ERR_NOASSOC\n");
891 while (*
p && *
p !=
' ' && *
p !=
'\t')
p++;
895 while (*
p ==
' ' || *
p ==
'\t')
p++;
898 if (
_wcsicmp(tok, &extension[1]) == 0)
900 wcscpy(lpResult, xlpFile);
915 classnamelen /=
sizeof(
WCHAR);
937 if (finishedLen > resultLen)
938 ERR(
"Argify buffer not large enough.. truncated\n");
940 if (*lpResult ==
'"')
943 while (*(
p + 1) !=
'"')
954 while (*
p !=
' ' && *
p !=
'\0')
969 tok =
wcschr(lpResult,
'^');
973 wcscat(lpResult, xlpFile);
977 wcscat(lpResult, &tok[5]);
995 HSZ hsz1, HSZ hsz2, HDDEDATA hData,
998 TRACE(
"dde_cb: %04x, %04x, %p, %p, %p, %p, %08lx, %08lx\n",
999 uType, uFmt, hConv, hsz1, hsz2, hData, dwData1, dwData2);
1019 WCHAR app[256],
topic[256], ifexec[256], static_res[256];
1022 LONG applen, topiclen, ifexeclen;
1026 DWORD resultLen, endkeyLen;
1039 endkeyLen =
ARRAY_SIZE(regkey) - (endkey - regkey);
1040 if (
strlenW(
L"\\application") + 1 > endkeyLen)
1045 wcscpy(endkey,
L"\\application");
1046 applen =
sizeof(app);
1058 FIXME(
"size of input parameter %s larger than buffer\n",
1105 if (
strlenW(
L"\\topic") + 1 > endkeyLen)
1111 topiclen =
sizeof(
topic);
1139 TRACE(
"Couldn't launch\n");
1143 if (ddeexec ==
NULL)
1145 TRACE(
"Exiting because ddeexec is NULL. ret=42.\n");
1151 if (
wcscmp(ddeexec,
L"") == 0)
1153 TRACE(
"Exiting because ddeexec is 'empty string'. ret=42.\n");
1161 TRACE(
"Couldn't connect. ret=%d\n",
ret);
1166 if (
strlenW(
L"\\ifexec") + 1 > endkeyLen)
1172 ifexeclen =
sizeof(ifexec);
1227 DWORD cmdlen =
sizeof(
cmd), ddeexeclen =
sizeof(ddeexec);
1244 cmdlen /=
sizeof(
WCHAR);
1251 ERR(
"Argify buffer not large enough, truncating\n");
1294 TRACE(
"returning %s\n", lpResult);
1414 allocatedPidl.
Attach(pidl);
1423 CMINVOKECOMMANDINFOEX ici;
1441 r = cm->QueryContextMenu(
hmenu, 0, 0x20, 0x7fff, CMF_DEFAULTONLY);
1446 for (
i = 0;
i <
n;
i++)
1470 memset(&ici, 0,
sizeof ici);
1471 ici.cbSize =
sizeof ici;
1472 ici.fMask = (sei->
fMask & SEE_CMIC_COMMON_BASICFLAGS) | CMIC_MASK_UNICODE;
1473 ici.nShow = sei->
nShow;
1475 ici.hwnd = sei->
hwnd;
1478 r = cm->InvokeCommand((LPCMINVOKECOMMANDINFO)&ici);
1480 TRACE(
"invoke command returned %08x\n",
r);
1508 hr =
obj->Initialize(
NULL, dataobj, hkey);
1549 pidl = allocatedPidl;
1580 BOOL fDefault = StrIsNullOrEmpty(sei->
lpVerb);
1581 CMINVOKECOMMANDINFOEX ici = {
sizeof(ici) };
1582 ici.fMask = SeeFlagsToCmicFlags(sei->
fMask) | CMIC_MASK_UNICODE;
1583 ici.nShow = sei->
nShow;
1587 ici.lpVerbW = sei->
lpVerb;
1589 ici.hwnd = sei->
hwnd;
1590 ici.lpParameters = parameters;
1592 ici.lpDirectory =
dir;
1595 ici.hIcon = sei->
hIcon;
1596 if (ici.fMask & (CMIC_MASK_HASLINKNAME | CMIC_MASK_HASTITLE))
1599 enum { idFirst = 1, idLast = 0x7fff };
1602 hr = cm->QueryContextMenu(hMenu, 0, idFirst, idLast, fDefault ? CMF_DEFAULTONLY : 0);
1608 uDefault = (uDefault != -1) ? uDefault - idFirst : 0;
1613 hr = cm->InvokeCommand((LPCMINVOKECOMMANDINFO)&ici);
1629 HKEY hkey, hkeycm = 0;
1643 r =
RegOpenKeyW(hkey,
L"shellex\\ContextMenuHandlers", &hkeycm);
1690 execCmd,
sizeof(execCmd));
1698 if (!done && wszApplicationName[0])
1703 if (*wszApplicationName !=
'"')
1706 strcatW(wcmd, wszApplicationName);
1710 strcatW(wcmd, wszApplicationName);
1714 ERR(
"Argify buffer not large enough... truncating\n");
1715 return execfunc(wcmd,
NULL,
FALSE, psei, psei_out);
1725 wszApplicationName,
NULL, psei,
1726 psei_out, execfunc );
1741 ERR(
"parameters len exceeds buffer size (%i > %i), truncating\n",
1744 if (
strlenW(
L"explorer.exe") > dwApplicationNameLen)
1745 ERR(
"application len exceeds buffer size (%i), truncating\n",
1746 dwApplicationNameLen);
1747 lstrcpynW(wszApplicationName,
L"explorer.exe", dwApplicationNameLen);
1748 appKnownSingular =
TRUE;
1750 sei->
fMask &= ~SEE_MASK_INVOKEIDLIST;
1767 if (resultLen > dwApplicationNameLen)
1768 ERR(
"Argify buffer not large enough... truncating\n");
1769 appKnownSingular =
FALSE;
1778 appKnownSingular =
TRUE;
1780 sei->
fMask &= ~SEE_MASK_INVOKEIDLIST;
1783 return appKnownSingular;
1805 CMINVOKECOMMANDINFO ici = {
sizeof(ici) };
1806 ici.fMask = (sei->fMask & SEE_CMIC_COMMON_BASICFLAGS) & ~CMIC_MASK_UNICODE;
1807 ici.nShow = sei->nShow;
1808 ici.hwnd = sei->hwnd;
1810 if (sei->lpVerb && sei->lpVerb[0])
1814 ici.lpVerb = szVerb;
1819 const INT idCmdFirst = 1, idCmdLast = 0x7FFF;
1820 hr = pCM->QueryContextMenu(hMenu, 0, idCmdFirst, idCmdLast, CMF_DEFAULTONLY);
1829 if (nDefaultID == -1)
1830 nDefaultID = idCmdFirst;
1834 hr = pCM->InvokeCommand(&ici);
1847 if (wszParameters[0])
1859 if (wszParameters[0])
1862 strcatW(wszQuotedCmd, wszParameters);
1883 lpstrRes =
strchrW(lpFile,
':');
1885 iSize = lpstrRes - lpFile;
1897 memcpy(lpstrProtocol, lpFile, iSize *
sizeof(
WCHAR));
1898 lpstrProtocol[iSize] =
'\0';
1899 strcatW(lpstrProtocol,
L"\\shell\\");
1901 strcatW(lpstrProtocol,
L"\\command");
1904 wcmd, execfunc, psei, psei_out);
1945 return buf.Detach();
1953 static const DWORD unsupportedFlags =
1964 TRACE(
"mask=0x%08x hwnd=%p verb=%s file=%s parm=%s dir=%s show=0x%08x class=%s\n",
1976 wszApplicationName.
Allocate(dwApplicationNameLen);
1977 *wszApplicationName =
'\0';
1981 if(
len-1 >= dwApplicationNameLen)
1982 dwApplicationNameLen =
len;
1984 wszApplicationName.
Allocate(dwApplicationNameLen);
1988 wszApplicationName[
len-2] =
'\0';
1989 appKnownSingular =
TRUE;
1996 if(
l > dwApplicationNameLen) dwApplicationNameLen =
l + 1;
1997 wszApplicationName.
Allocate(dwApplicationNameLen);
2000 if (wszApplicationName[2] == 0 && wszApplicationName[1] ==
L':' &&
2001 ((
L'A' <= wszApplicationName[0] && wszApplicationName[0] <=
L'Z') ||
2002 (
L'a' <= wszApplicationName[0] && wszApplicationName[0] <=
L'z')))
2009 WCHAR parametersBuffer[1024];
2010 LPWSTR wszParameters = parametersBuffer;
2017 if (
len > parametersLen)
2020 wszParameters = wszParamAlloc;
2021 parametersLen =
len;
2026 *wszParameters =
L'\0';
2030 LPWSTR wszDir = dirBuffer;
2041 wszDir = wszDirAlloc;
2048 wszDir = wszDirAlloc;
2072 sei_tmp.
lpFile = wszApplicationName;
2076 if (sei_tmp.
fMask & unsupportedFlags)
2078 FIXME(
"flags ignored: 0x%08x\n", sei_tmp.
fMask & unsupportedFlags);
2091 hr = pSEH->Execute(&sei_tmp);
2099 if (dwApplicationNameLen)
2102 TRACE(
"Unable to get PIDL parsing path\n");
2104 appKnownSingular =
TRUE;
2113 wszApplicationName.
Attach(tmp);
2114 sei_tmp.
lpFile = wszApplicationName;
2144 Info.pcszFile = wszApplicationName;
2174 dwApplicationNameLen );
2188 wszApplicationName.
Attach(
buf.Detach());
2189 sei_tmp.
lpFile = wszApplicationName;
2200 if (sei_tmp.
lpFile[0] ==
L'"')
2206 if (parametersLen <
_countof(parametersBuffer))
2209 wszParameters = parametersBuffer;
2214 wszParameters = wszParamAlloc;
2226 LPWSTR beg = wszApplicationName;
2251 WCHAR wcmdBuffer[1024];
2252 LPWSTR wcmd = wcmdBuffer;
2281 WCHAR wszKeyname[256];
2288 wszApplicationName,
env, &sei_tmp,
2302 swprintf(lpQuotedFile,
L"\"%s\"", lpFile);
2305 wszApplicationName,
env,
2306 &sei_tmp, sei, execfunc);
2320 WCHAR lpstrTmpFile[256];
2322 strcatW(lpstrTmpFile, lpFile);
2350 TRACE(
"%p,%s,%s,%s,%s,%d\n",
2354 sei.
cbSize =
sizeof(sei);
2361 sei.
nShow = iShowCmd;
2383 DbgPrint(
"FIXME: Failed with error 0 on '%ls'\n", sei->lpFile);
2492 fOldMask = sei->
fMask;
2502 sei->
fMask = fOldMask;
2522 sei.
cbSize =
sizeof(sei);
2529 sei.
nShow = nShowCmd;
2559 seiW.
cbSize =
sizeof(seiW);
2562 seiW.
nShow = iShowCmd;
2615 for (
pch = psz + 1; *
pch && ich + 1 < cchArg0; ++ich, ++
pch)
2617 if (*
pch ==
L'"' &&
pch[1] ==
L'"')
2620 pszArg0[ich] =
L'"';
2622 else if (*
pch ==
L'"')
2631 pszArg0[ich] = *
pch;
2641 pszArg0[ich] = *
pch;
2669 if (pwszCommand ==
NULL)
2724 apPathList[0] = pwszStartDir;
2725 apPathList[1] =
NULL;
2766 info.lpVerb = pszVerb;
2767 info.lpFile = szFile;
2768 info.lpParameters = (pchParams && *pchParams) ? pchParams :
NULL;
2769 info.lpDirectory = pwszStartDir;
2796 TRACE(
"(%p, %s, %s, %s, %s, %p, %s, %p, %u, %p, %lu)\n",
2802 ExecInfo.
cbSize =
sizeof(ExecInfo);
2805 ExecInfo.
lpVerb = lpOperation;
2806 ExecInfo.
lpFile = lpFile;
2829 if (lphProcess ==
NULL)
2863 TRACE(
"(%p, %s, %s, %s, %s, %p, %s, %p, %u, %p, %lu)\n",
2869 ExecInfo.
cbSize =
sizeof(ExecInfo);
2872 ExecInfo.
lpVerb = lpOperation;
2873 ExecInfo.
lpFile = lpFile;
2896 if (lphProcess ==
NULL)
2991 if (*pszSrc ==
L'"')
3020 for (
INT ich = 0; ; ++ich)
3024 if (pszSrc[ich] && pszSrc[ich] !=
L' ')
3029 if (resolveRelative &&
3044 pchArg = pszSrc + ich;
3052 else if (!resolveRelative)
3071 pchArg = pszSrc + cchPath;
3083 return requiredSize;
3088 return requiredSize;
3101 if (!pszCmdLine || !*pszCmdLine)
3106 if (*pszCmdLine ==
L'?')
3110 fNewMask |= MaskValue;
3114 pszCmdLine = pch2ndQuestion + 1;
3131 execInfo.
fMask = fNewMask;
3135 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)
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)
BOOL WINAPI PathResolveW(_Inout_ LPWSTR path, _Inout_opt_ LPCWSTR *dirs, _In_ DWORD flags)
HRESULT WINAPI AssocQueryStringW(ASSOCF cfFlags, ASSOCSTR str, LPCWSTR pszAssoc, LPCWSTR pszExtra, LPWSTR pszOut, DWORD *pcchOut)
HANDLE WINAPI SHAllocShared(LPCVOID lpvData, DWORD dwSize, DWORD dwProcId)
DWORD WINAPI SHGetAppCompatFlags(DWORD dwUnknown)
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 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)
_In_ BOOL _In_ HANDLE hProcess
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
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)
_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)
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 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 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)
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)
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 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_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
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define ERROR_DLL_NOT_FOUND
#define ERROR_NO_ASSOCIATION
#define HRESULT_FROM_WIN32(x)
#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)