/*++ Copyright (c) 2000 Microsoft Corporation Module Name: MSWorks6.cpp Abstract: Due to a modification in the registry in Windows XP, this app gets the path for IE as "%programfiles%\ Internet Explorer\iexplore.exe" and since the env variable option flag is not set for ShellExecuteEx, it cannot expand it. Hooked ShellExecuteW also as the app calls this at a few places. Notes: This is an app specific shim. History: 01/25/2001 prashkud Created --*/ #include "precomp.h" IMPLEMENT_SHIM_BEGIN(MSWorks6) #include "ShimHookMacro.h" APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(ShellExecuteExW) APIHOOK_ENUM_ENTRY(ShellExecuteW) APIHOOK_ENUM_END /*++ Hooks ShellExecuteExW and sets the flag for expanding the environment variables --*/ BOOL APIHOOK(ShellExecuteExW)( LPSHELLEXECUTEINFO lpExecInfo ) { lpExecInfo->fMask |= SEE_MASK_DOENVSUBST; return ORIGINAL_API(ShellExecuteExW)(lpExecInfo); } /*++ Hooks ShellExecuteW and expands the passed file path. --*/ HINSTANCE APIHOOK(ShellExecuteW)( HWND hWnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd ) { CSTRING_TRY { CString csPassedFile(lpFile); csPassedFile.ExpandEnvironmentStringsW(); return ORIGINAL_API(ShellExecuteW)(hWnd, lpVerb, csPassedFile.Get(), lpParameters, lpDirectory, nShowCmd); } CSTRING_CATCH { return ORIGINAL_API(ShellExecuteW)(hWnd, lpVerb, lpFile, lpParameters, lpDirectory, nShowCmd); } } /*++ Register hooked functions --*/ HOOK_BEGIN APIHOOK_ENTRY(SHELL32.DLL, ShellExecuteExW) APIHOOK_ENTRY(SHELL32.DLL, ShellExecuteW) HOOK_END IMPLEMENT_SHIM_END