// // LSExecuteEx // HINSTANCE LSExecuteEx(HWND hOwner, LPCSTR pszOperation, LPCSTR pszCommand, LPCSTR pszArgs, LPCSTR pszDirectory, int nShowCmd) { HINSTANCE hReturn = HINSTANCE(32); if (pszCommand != NULL) { if (pszCommand[0] == '!') { hReturn = ParseBangCommand(hOwner, pszCommand, pszArgs) ? HINSTANCE(33) : HINSTANCE(32); } else { TRACE("LSExecuteEx(%.8X, \"%s\", \"%s\", \"%s\", \"%s\", %d);", hOwner, pszOperation, pszCommand, pszArgs,pszDirectory, nShowCmd); if (PathIsDirectory(pszCommand)) { hReturn = LSShellExecute(hOwner, pszOperation, pszCommand, pszArgs, NULL, nShowCmd ? nShowCmd : SW_SHOWNORMAL); } else { SHELLEXECUTEINFO seiCommand = { 0 }; seiCommand.cbSize = sizeof(SHELLEXECUTEINFO); seiCommand.hwnd = hOwner; seiCommand.lpVerb = pszOperation; seiCommand.lpFile = pszCommand; seiCommand.lpParameters = pszArgs; seiCommand.lpDirectory = pszDirectory; seiCommand.nShow = nShowCmd; seiCommand.fMask = SEE_MASK_DOENVSUBST | SEE_MASK_FLAG_NO_UI; LSShellExecuteEx(&seiCommand); hReturn = seiCommand.hInstApp; } } } return hReturn; }
void StartupRunner::_RunRunOnceEx() { // // TODO: Figure out how this works on Win64 // TCHAR szArgs[MAX_PATH] = { 0 }; UINT uChars = GetSystemDirectory(szArgs, MAX_PATH); if (uChars > 0 && uChars < MAX_PATH) { if (SUCCEEDED(StringCchCat(szArgs, MAX_PATH, _T("\\iernonce.dll")))) { // The file doesn't exist on NT4 if (PathFileExists(szArgs) && SUCCEEDED(StringCchCat(szArgs, MAX_PATH, _T(",RunOnceExProcess")))) { LSShellExecute(NULL, _T("open"), _T("rundll32.exe"), szArgs, NULL, SW_NORMAL); } } } }