32 #define SEE_MASK_CLASSALL (SEE_MASK_CLASSNAME | SEE_MASK_CLASSKEY) 39 bool firstCharQuote =
false;
40 bool quotes_opened =
false;
41 bool backslash_encountered =
false;
43 for (
int curArg = 0; curArg <= argNum && *
args; ++curArg)
45 firstCharQuote =
false;
49 firstCharQuote =
true;
58 backslash_encountered = !backslash_encountered;
60 else if (*
args ==
'"')
64 if (*(
args + 1) !=
'"')
66 quotes_opened =
false;
80 backslash_encountered =
false;
84 backslash_encountered =
false;
85 if (*
args ==
' ' && !firstCharQuote)
106 bool quotes_opened =
false;
107 bool backslash_encountered =
false;
109 for (
int curArg = 0; curArg <= argNum && *
args; ++curArg)
116 backslash_encountered = !backslash_encountered;
118 else if (*
args ==
'"')
122 if (*(
args + 1) !=
'"')
124 quotes_opened =
false;
133 quotes_opened =
true;
136 backslash_encountered =
false;
140 backslash_encountered =
false;
141 if (*
args ==
' ' && !quotes_opened && curArg != argNum)
145 if (curArg == argNum)
194 bool tildeEffect =
false;
270 if (!done || (*
fmt ==
'1'))
356 if (chars >=
sizeof(
buf) /
sizeof(
WCHAR))
357 ERR(
"pidl format buffer too small!\n");
379 WCHAR tmpBuffer[1024];
380 PWSTR tmpB = tmpBuffer;
391 if (envRet == 0 || envRet >
MAX_PATH)
454 hr = desktop->GetDisplayNameOf(pidl, SHGDN_FORPARSING, &strret);
475 DWORD dwCreationFlags;
506 startup.dwFlags |= STARTF_TITLEISLINKNAME;
526 WARN(
"CreateProcess returned error %ld\n", retval);
530 TRACE(
"returning %lu\n", retval);
550 static const WCHAR wPath[] =
L"PATH=";
565 if (!got_path)
total += 5;
617 wcscpy(
buffer,
L"Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\");
667 static const WCHAR wCommand[] =
L"\\command";
685 commandlen /=
sizeof(
WCHAR);
691 static const WCHAR wSpace[] = {
' ', 0};
706 paramlen /=
sizeof(
WCHAR);
709 commandlen += paramlen;
760 WARN(
"(lpFile=%s,lpResult=%s): NULL parameter\n",
773 TRACE(
"SearchPathW returned non-zero\n");
779 TRACE(
"SearchPathW returned non-zero\n");
794 TRACE(
"Returning SE_ERR_FNF\n");
798 extension =
wcsrchr(xlpFile,
'.');
803 if (extension ==
NULL || extension[1] == 0)
805 WARN(
"Returning SE_ERR_NOASSOC\n");
827 while (*
p && *
p !=
' ' && *
p !=
'\t')
p++;
831 while (*
p ==
' ' || *
p ==
'\t')
p++;
834 if (
wcsicmp(tok, &extension[1]) == 0)
836 wcscpy(lpResult, xlpFile);
851 classnamelen /=
sizeof(
WCHAR);
873 if (finishedLen > resultLen)
874 ERR(
"Argify buffer not large enough.. truncated\n");
876 if (*lpResult ==
'"')
879 while (*(
p + 1) !=
'"')
890 while (*
p !=
' ' && *
p !=
'\0')
905 tok =
wcschr(lpResult,
'^');
909 wcscat(lpResult, xlpFile);
913 wcscat(lpResult, &tok[5]);
931 HSZ hsz1, HSZ hsz2, HDDEDATA hData,
934 TRACE(
"dde_cb: %04x, %04x, %p, %p, %p, %p, %08lx, %08lx\n",
935 uType, uFmt, hConv, hsz1, hsz2, hData, dwData1, dwData2);
955 WCHAR app[256],
topic[256], ifexec[256], static_res[256];
958 LONG applen, topiclen, ifexeclen;
962 DWORD resultLen, endkeyLen;
969 if (
strlenW(
key) + 1 >
sizeof(regkey) /
sizeof(regkey[0]))
975 static const WCHAR wApplication[] =
L"\\application";
976 endkeyLen =
sizeof(regkey) /
sizeof(regkey[0]) - (endkey - regkey);
977 if (
strlenW(wApplication) + 1 > endkeyLen)
982 wcscpy(endkey, wApplication);
983 applen =
sizeof(app);
987 static const WCHAR wSo[] =
L".so";
997 FIXME(
"size of input parameter %s larger than buffer\n",
1027 if (
strlenW(
ptr) + 1 >
sizeof(app) /
sizeof(app[0]))
1036 if (
wcslen(app) >= sizeSo &&
1045 static const WCHAR wTopic[] =
L"\\topic";
1046 if (
strlenW(wTopic) + 1 > endkeyLen)
1052 topiclen =
sizeof(
topic);
1080 TRACE(
"Couldn't launch\n");
1084 if (ddeexec ==
NULL)
1086 TRACE(
"Exiting because ddeexec is NULL. ret=42.\n");
1092 if (
wcscmp(ddeexec,
L"") == 0)
1094 TRACE(
"Exiting because ddeexec is 'empty string'. ret=42.\n");
1102 TRACE(
"Couldn't connect. ret=%d\n",
ret);
1107 static const WCHAR wIfexec[] =
L"\\ifexec";
1108 if (
strlenW(wIfexec) + 1 > endkeyLen)
1114 ifexeclen =
sizeof(ifexec);
1121 SHELL_ArgifyW(static_res,
sizeof(static_res)/
sizeof(
WCHAR), exec, lpFile, pidl, szCommandline, &resultLen,
NULL);
1122 if (resultLen >
sizeof(static_res)/
sizeof(
WCHAR))
1170 DWORD cmdlen =
sizeof(
cmd), ddeexeclen =
sizeof(ddeexec);
1187 cmdlen /=
sizeof(
WCHAR);
1188 if (cmdlen >=
sizeof(
cmd) /
sizeof(
WCHAR))
1189 cmdlen =
sizeof(
cmd) /
sizeof(
WCHAR) - 1;
1193 if (resultLen >
sizeof(
param) /
sizeof(
WCHAR))
1194 ERR(
"Argify buffer not large enough, truncating\n");
1199 tmp = const_cast<LPWSTR>(
strstrW(
key,
L"command"));
1237 TRACE(
"returning %s\n", lpResult);
1269 WCHAR old_dir[1024];
1322 sz +=
sizeof (
WCHAR);
1373 if (pidl != sei->lpIDList)
1375 return dataobj.Detach();
1382 CMINVOKECOMMANDINFOEX ici;
1400 r = cm->QueryContextMenu(
hmenu, 0, 0x20, 0x7fff, CMF_DEFAULTONLY);
1405 for (
i = 0;
i <
n;
i++)
1429 memset(&ici, 0,
sizeof ici);
1430 ici.cbSize =
sizeof ici;
1432 ici.nShow = sei->
nShow;
1434 ici.hwnd = sei->
hwnd;
1437 r = cm->InvokeCommand((LPCMINVOKECOMMANDINFO)&ici);
1439 TRACE(
"invoke command returned %08x\n",
r);
1465 ERR(
"failed %08x\n",
r);
1472 ERR(
"failed to get data object\n");
1477 r =
obj->Initialize(
NULL, dataobj, hkey);
1506 HKEY hkey, hkeycm = 0;
1519 r =
RegOpenKeyW(hkey,
L"shellex\\ContextMenuHandlers", &hkeycm);
1525 r =
RegEnumKeyW(hkeycm,
i++, szguid,
sizeof(szguid) /
sizeof(szguid[0]));
1566 execCmd,
sizeof(execCmd));
1574 if (!done && wszApplicationName[0])
1577 if (*wszApplicationName !=
'"')
1580 strcatW(wcmd, wszApplicationName);
1584 strcatW(wcmd, wszApplicationName);
1586 if (resultLen >
sizeof(wcmd) /
sizeof(
WCHAR))
1587 ERR(
"Argify buffer not large enough... truncating\n");
1588 return execfunc(wcmd,
NULL,
FALSE, psei, psei_out);
1598 wszApplicationName,
NULL, psei,
1599 psei_out, execfunc );
1606 static const WCHAR wExplorer[] =
L"explorer.exe";
1615 ERR(
"parameters len exceeds buffer size (%i > %i), truncating\n",
1618 if (
strlenW(wExplorer) > dwApplicationNameLen)
1619 ERR(
"application len exceeds buffer size (%i > %i), truncating\n",
1620 lstrlenW(wExplorer) + 1, dwApplicationNameLen);
1621 lstrcpynW(wszApplicationName, wExplorer, dwApplicationNameLen);
1622 appKnownSingular =
TRUE;
1641 if (resultLen > dwApplicationNameLen)
1642 ERR(
"Argify buffer not large enough... truncating\n");
1643 appKnownSingular =
FALSE;
1648 return appKnownSingular;
1655 WCHAR *wszQuotedCmd;
1659 if (wszParameters[0])
1671 if (wszParameters[0])
1674 strcatW(wszQuotedCmd, wszParameters);
1682 retval = execfunc(wszQuotedCmd,
env,
FALSE, psei, psei_out);
1689 static const WCHAR wShell[] =
L"\\shell\\";
1690 static const WCHAR wCommand[] =
L"\\command";
1692 WCHAR *lpstrProtocol;
1697 lpstrRes =
strchrW(lpFile,
':');
1699 iSize = lpstrRes - lpFile;
1711 memcpy(lpstrProtocol, lpFile, iSize *
sizeof(
WCHAR));
1712 lpstrProtocol[iSize] =
'\0';
1713 strcatW(lpstrProtocol, wShell);
1715 strcatW(lpstrProtocol, wCommand);
1718 wcmd, execfunc, psei, psei_out);
1769 static const DWORD unsupportedFlags =
1774 WCHAR parametersBuffer[1024], dirBuffer[
MAX_PATH], wcmdBuffer[1024];
1775 WCHAR *wszApplicationName, *wszParameters, *wszDir, *wcmd;
1777 DWORD parametersLen =
sizeof(parametersBuffer) /
sizeof(
WCHAR);
1778 DWORD dirLen =
sizeof(dirBuffer) /
sizeof(
WCHAR);
1779 DWORD wcmdLen =
sizeof(wcmdBuffer) /
sizeof(
WCHAR);
1784 WCHAR wszKeyname[256];
1792 TRACE(
"mask=0x%08x hwnd=%p verb=%s file=%s parm=%s dir=%s show=0x%08x class=%s\n",
1805 *wszApplicationName =
'\0';
1809 if(
len-1 >= dwApplicationNameLen)
1810 dwApplicationNameLen =
len;
1816 wszApplicationName[
len-2] =
'\0';
1817 appKnownSingular =
TRUE;
1824 if(
l > dwApplicationNameLen) dwApplicationNameLen =
l + 1;
1828 if (wszApplicationName[2] == 0 && wszApplicationName[1] ==
L':' &&
1829 ((
L'A' <= wszApplicationName[0] && wszApplicationName[0] <=
L'Z') ||
1830 (
L'a' <= wszApplicationName[0] && wszApplicationName[0] <=
L'z')))
1837 wszParameters = parametersBuffer;
1841 if (
len > parametersLen)
1844 parametersLen =
len;
1849 *wszParameters =
L'\0';
1866 sei_tmp.
lpFile = wszApplicationName;
1870 if (sei_tmp.
fMask & unsupportedFlags)
1875 FIXME(
"flags ignored: 0x%08x\n", sei_tmp.
fMask & unsupportedFlags);
1888 hr = pSEH->Execute(&sei_tmp);
1893 if (wszParameters != parametersBuffer)
1895 if (wszDir != dirBuffer)
1902 appKnownSingular =
TRUE;
1916 sei_tmp.
lpFile = wszApplicationName = tmp;
1931 if (wszParameters != parametersBuffer)
1933 if (wszDir != dirBuffer)
1948 Info.pcszFile = wszApplicationName;
1957 if (wszParameters != parametersBuffer)
1959 if (wszDir != dirBuffer)
1970 dwApplicationNameLen );
1988 wszApplicationName =
buf;
1989 sei_tmp.
lpFile = wszApplicationName;
2001 wszApplicationName =
buf;
2004 sei_tmp.
lpFile = wszApplicationName;
2017 if (wszDir != dirBuffer)
2031 if (sei_tmp.
lpFile[0] ==
L'"')
2077 swprintf(wcmd,
L"\"%s\"", wszApplicationName);
2084 retval = execfunc(wcmd,
NULL,
FALSE, &sei_tmp, sei);
2088 if (wszParameters != parametersBuffer)
2090 if (wszDir != dirBuffer)
2092 if (wcmd != wcmdBuffer)
2103 wszApplicationName,
env, &sei_tmp,
2119 swprintf(lpQuotedFile,
L"\"%s\"", lpFile);
2122 wszApplicationName,
env,
2123 &sei_tmp, sei, execfunc);
2139 WCHAR lpstrTmpFile[256];
2141 strcatW(lpstrTmpFile, lpFile);
2145 TRACE(
"retval %lu\n", retval);
2154 Info.pcszFile = wszApplicationName;
2164 if (wszParameters != parametersBuffer)
2166 if (wszDir != dirBuffer)
2168 if (wcmd != wcmdBuffer)
2184 TRACE(
"%p,%s,%s,%s,%s,%d\n",
2188 sei.
cbSize =
sizeof(sei);
2195 sei.
nShow = iShowCmd;
2280 sei.
cbSize =
sizeof(sei);
2287 sei.
nShow = nShowCmd;
2315 seiW.
cbSize =
sizeof(seiW);
2318 seiW.
nShow = iShowCmd;
2377 for (
pch = psz + 1; *
pch && ich + 1 < cchArg0; ++ich, ++
pch)
2379 if (*
pch ==
L'"' &&
pch[1] ==
L'"')
2382 pszArg0[ich] =
L'"';
2384 else if (*
pch ==
L'"')
2393 pszArg0[ich] = *
pch;
2403 pszArg0[ich] = *
pch;
2431 if (pwszCommand ==
NULL)
2545 info.lpVerb = pszVerb;
2546 info.lpFile = szFile;
2547 info.lpParameters = (pchParams && *pchParams) ? pchParams :
NULL;
2548 info.lpDirectory = pwszStartDir;
HINSTANCE WINAPI ShellExecuteA(HWND hWnd, LPCSTR lpVerb, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT iShowCmd)
#define ERROR_INVALID_PARAMETER
unsigned __int3264 UINT_PTR
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
HMENU WINAPI CreateMenu(void)
static UINT_PTR SHELL_execute_url(LPCWSTR lpFile, LPCWSTR wcmd, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc)
static BOOL SHELL_execute(LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc)
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExA(LPSHELLEXECUTEINFOA sei)
HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwReserved)
#define SEE_MASK_FLAG_DDEWAIT
static UINT_PTR SHELL_quote_and_execute(LPCWSTR wcmd, LPCWSTR wszParameters, LPCWSTR lpstrProtocol, LPCWSTR wszApplicationName, LPWSTR env, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc)
#define SEE_MASK_CLASSKEY
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
static WCHAR * expand_environment(const WCHAR *str)
static IDataObject * shellex_get_dataobj(LPSHELLEXECUTEINFOW sei)
void WINAPI ILFree(LPITEMIDLIST pidl)
HCONV WINAPI DdeConnect(DWORD, HSZ, HSZ, PCONVCONTEXT)
#define HRESULT_FROM_WIN32(x)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
static HRESULT shellex_run_context_menu_default(IShellExtInit *obj, LPSHELLEXECUTEINFOW sei)
#define WideCharToMultiByte
#define CREATE_UNICODE_ENVIRONMENT
UINT WINAPI DdeGetLastError(DWORD)
EXTERN_C void WINAPI OpenAs_RunDLLW(HWND hwnd, HINSTANCE hinst, LPCWSTR cmdline, int cmdshow)
#define SEE_MASK_NOCLOSEPROCESS
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_HASTITLE
GLdouble GLdouble GLdouble r
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
#define SEE_MASK_NO_CONSOLE
WINE_UNICODE_INLINE int isspaceW(WCHAR wc)
return static_cast< int >(global)
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)
#define EXCEPTION_ACCESS_VIOLATION
GLuint GLuint GLsizei count
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
struct _STARTUPINFOW STARTUPINFOW
LPWSTR WINAPI CharLowerW(_Inout_ LPWSTR)
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
#define GetCurrentDirectoryW(x, y)
_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 EXCEPTION_NONCONTINUABLE
#define SEE_MASK_HASLINKNAME
DWORD WINAPI GetLastError(VOID)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
_In_ BOOL _In_ HANDLE hProcess
int startup(int argc, const char *argv[])
#define MAKEINTRESOURCEA(i)
static LPCWSTR SplitParams(LPCWSTR psz, LPWSTR pszArg0, size_t cchArg0)
#define strncmpiW(s1, s2, n)
BOOL WINAPI DdeFreeDataHandle(HDDEDATA)
#define IID_PPV_ARG(Itype, ppType)
static HDDEDATA CALLBACK dde_cb(UINT uType, UINT uFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, ULONG_PTR dwData1, ULONG_PTR dwData2)
BOOL WINAPI GetBinaryTypeW(LPCWSTR lpApplicationName, LPDWORD lpBinaryType)
HDDEDATA WINAPI DdeClientTransaction(LPBYTE, DWORD, HCONV, HSZ, UINT, UINT, DWORD, LPDWORD)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
static LPWSTR SHELL_BuildEnvW(const WCHAR *path)
DWORD WINAPI GetVersion(VOID)
BOOL WINAPI PathIsURLW(LPCWSTR lpstrPath)
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
static __inline void __SHCloneStrW(WCHAR **target, const WCHAR *source)
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)
BOOL WINAPI PathAddExtensionW(LPWSTR lpszPath, LPCWSTR lpszExtension)
GLenum GLuint GLenum GLsizei const GLchar * buf
#define SEE_MASK_CONNECTNETDRV
#define ERROR_FUNCTION_FAILED
LONG WINAPI RegCloseKey(HKEY hKey)
static HKEY ShellExecute_GetClassKey(const SHELLEXECUTEINFOW *sei)
static const WCHAR szText[]
#define ERROR_ACCESS_DENIED
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
EXTERN_C void WINAPI OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow)
static UINT_PTR SHELL_execute_class(LPCWSTR wszApplicationName, LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out, SHELL_ExecuteW32 execfunc)
BOOL WINAPI DdeUninitialize(DWORD)
UINT_PTR(* SHELL_ExecuteW32)(const WCHAR *lpCmd, WCHAR *env, BOOL shWait, const SHELLEXECUTEINFOW *sei, LPSHELLEXECUTEINFOW sei_out)
#define SEE_MASK_FLAG_NO_UI
static UINT SHELL_FindExecutableByVerb(LPCWSTR lpVerb, LPWSTR key, LPWSTR classname, LPWSTR command, LONG commandlen)
#define SECL_ALLOW_NONEXE
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
static UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpVerb, LPWSTR lpResult, DWORD resultLen, LPWSTR key, WCHAR **env, LPITEMIDLIST pidl, LPCWSTR args)
#define STARTF_USESHOWWINDOW
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
static void ParseNoTildeEffect(PWSTR &res, LPCWSTR &args, DWORD &len, DWORD &used, int argNum)
HRESULT WINAPI AssocQueryStringW(ASSOCF cfFlags, ASSOCSTR str, LPCWSTR pszAssoc, LPCWSTR pszExtra, LPWSTR pszOut, DWORD *pcchOut)
#define ERROR_FILE_NOT_FOUND
#define FORMAT_MESSAGE_FROM_SYSTEM
static const WCHAR wszCom[]
#define IDS_SHLEXEC_NOASSOC
static LONG ShellExecute_FromContextMenu(LPSHELLEXECUTEINFOW sei)
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)
#define FILE_ATTRIBUTE_DIRECTORY
#define DECLSPEC_HOTPATCH
_In_opt_ LPCSTR lpDirectory
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
#define IID_NULL_PPV_ARG(Itype, ppType)
MmuTrapHandler callback[0x30]
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
#define SEE_MASK_CLASSNAME
BOOL WINAPI DdeDisconnect(HCONV)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define CREATE_NEW_CONSOLE
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
#define APPCMD_CLIENTONLY
HANDLE WINAPI SHAllocShared(LPCVOID lpvData, DWORD dwSize, DWORD dwProcId)
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
BOOL WINAPI FreeEnvironmentStringsW(IN LPWSTR EnvironmentStrings)
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
#define SEE_MASK_DOENVSUBST
static const WCHAR wszExe[]
HRESULT WINAPI ShellExecCmdLine(HWND hwnd, LPCWSTR pwszCommand, LPCWSTR pwszStartDir, int nShow, LPVOID pUnused, DWORD dwSeclFlags)
unsigned __int3264 UINT_PTR
#define INVALID_FILE_ATTRIBUTES
HINSTANCE WINAPI FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult)
HINSTANCE WINAPI FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR lpResult)
GLsizei const GLchar *const * strings
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
static const WCHAR space[]
#define IDS_FILE_NOT_FOUND
#define memcpy(s1, s2, n)
INT WINAPI GetProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len)
BOOL WINAPI UrlIsW(LPCWSTR pszUrl, URLIS Urlis)
BOOL WINAPI DestroyMenu(_In_ HMENU)
DWORD WINAPI SearchPathW(IN LPCWSTR lpPath OPTIONAL, IN LPCWSTR lpFileName, IN LPCWSTR lpExtension OPTIONAL, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart OPTIONAL)
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
WINE_UNICODE_INLINE WCHAR * strrchrW(const WCHAR *str, WCHAR ch)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
static const WCHAR wszOpen[]
static HRESULT shellex_load_object_and_run(HKEY hkey, LPCGUID guid, LPSHELLEXECUTEINFOW sei)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static __inline LPWSTR __SHCloneStrAtoW(WCHAR **target, const char *source)
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
#define shell32_hInstance
VOID WINAPI RaiseException(IN DWORD dwExceptionCode, IN DWORD dwExceptionFlags, IN DWORD nNumberOfArguments, IN CONST ULONG_PTR *lpArguments OPTIONAL)
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
BOOL HCR_GetDefaultVerbW(HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len)
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
#define SEE_MASK_FLAG_LOG_USAGE
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait, const SHELLEXECUTEINFOW *psei, LPSHELLEXECUTEINFOW psei_out)
static const char topic[]
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
EXTERN_C HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpVerb, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT iShowCmd, void *callback)
#define SEE_MASK_HMONITOR
static BOOL SHELL_TryAppPathW(LPCWSTR szName, LPWSTR lpResult, WCHAR **env)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
PVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId)
BOOL HCR_GetExecuteCommandW(HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len)
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
LPWSTR WINAPI GetEnvironmentStringsW(VOID)
static LPCWSTR LPCWSTR LPCWSTR env
BOOL WINAPI StrTrimW(LPWSTR lpszStr, LPCWSTR lpszTrim)
WINE_DEFAULT_DEBUG_CHANNEL(exec)
int command(const char *fmt,...)
void WINAPI SHFree(LPVOID pv)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
static const WCHAR szName[]
DWORD WINAPI WaitForInputIdle(_In_ HANDLE, _In_ DWORD)
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
BOOL WINAPI SHUnlockShared(LPVOID lpView)
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
#define SEE_MASK_INVOKEIDLIST
#define HKEY_CLASSES_ROOT
GLuint GLuint GLsizei GLenum type
static HRESULT SHELL_GetPathFromIDListForExecuteW(LPCITEMIDLIST pidl, LPWSTR pszPath, UINT uOutSize)
LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path)
static void do_error_dialog(UINT_PTR retval, HWND hwnd, WCHAR *filename)
HSZ WINAPI DdeCreateStringHandleW(DWORD, LPCWSTR, INT)
#define SEE_MASK_CLASSALL
#define GetEnvironmentVariableW(x, y, z)
HRESULT SetSite([in] IUnknown *pUnkSite)
UINT WINAPI DdeInitializeW(LPDWORD, PFNCALLBACK, DWORD, DWORD)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static void ParseTildeEffect(PWSTR &res, LPCWSTR &args, DWORD &len, DWORD &used, int argNum)
#define HeapFree(x, y, z)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
UINT WINAPI DdeInitializeA(LPDWORD, PFNCALLBACK, DWORD, DWORD)
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
#define LANG_USER_DEFAULT
static BOOL SHELL_translate_idlist(LPSHELLEXECUTEINFOW sei, LPWSTR wszParameters, DWORD parametersLen, LPWSTR wszApplicationName, DWORD dwApplicationNameLen)
#define HKEY_LOCAL_MACHINE