You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.7 KiB
136 lines
3.7 KiB
/*++
|
|
|
|
Copyright (c) 2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Britannica2001.cpp
|
|
|
|
Abstract:
|
|
|
|
Britannica expects IE 5 install to install msjavx86.exe
|
|
which doesn't happen if a newer version of IE is already there.
|
|
|
|
Notes:
|
|
|
|
This is an app specific shim.
|
|
|
|
History:
|
|
|
|
05/31/2001 mnikkel Created
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
IMPLEMENT_SHIM_BEGIN(Britannica2001)
|
|
#include "ShimHookMacro.h"
|
|
|
|
APIHOOK_ENUM_BEGIN
|
|
APIHOOK_ENUM_ENTRY(CreateProcessA)
|
|
APIHOOK_ENUM_END
|
|
|
|
|
|
|
|
/*++
|
|
|
|
Check CreateProcessA for execution of ie5wzdex.exe, when this
|
|
occurs, run msjavx86.exe.
|
|
|
|
--*/
|
|
|
|
BOOL
|
|
APIHOOK(CreateProcessA)(
|
|
LPCSTR lpApplicationName,
|
|
LPSTR lpCommandLine,
|
|
LPSECURITY_ATTRIBUTES lpProcessAttributes,
|
|
LPSECURITY_ATTRIBUTES lpThreadAttributes,
|
|
BOOL bInheritHandles,
|
|
DWORD dwCreationFlags,
|
|
LPVOID lpEnvironment,
|
|
LPCSTR lpCurrentDirectory,
|
|
LPSTARTUPINFOA lpStartupInfo,
|
|
LPPROCESS_INFORMATION lpProcessInformation
|
|
)
|
|
{
|
|
DPFN( eDbgLevelSpew, "[CreateProcessA] appname:(%s)\ncommandline:(%s)", lpApplicationName, lpCommandLine );
|
|
|
|
//
|
|
// Call the original API
|
|
//
|
|
BOOL bRet= ORIGINAL_API(CreateProcessA)(lpApplicationName,
|
|
lpCommandLine,
|
|
lpProcessAttributes,
|
|
lpThreadAttributes,
|
|
bInheritHandles,
|
|
dwCreationFlags,
|
|
lpEnvironment,
|
|
lpCurrentDirectory,
|
|
lpStartupInfo,
|
|
lpProcessInformation);
|
|
|
|
// wait for original API to finish
|
|
if (bRet)
|
|
{
|
|
WaitForSingleObject( lpProcessInformation->hProcess, INFINITE);
|
|
}
|
|
|
|
|
|
// Check for <ie5wzd /S:\"> and if found run msjavx86.exe in quiet mode
|
|
if (lpCommandLine)
|
|
{
|
|
CSTRING_TRY
|
|
{
|
|
CString csCL(lpCommandLine);
|
|
|
|
int nLoc = csCL.Find(L"ie5wzd /S:\"");
|
|
if ( nLoc > -1 )
|
|
{
|
|
PROCESS_INFORMATION processInfo;
|
|
|
|
CString csNew = csCL.Mid(nLoc+11, 3);
|
|
csNew += L"javavm\\msjavx86.exe /Q:A /R:N";
|
|
|
|
DPFN( eDbgLevelError, "[CreateProcessA] starting %S", csNew.Get() );
|
|
|
|
BOOL bRet2= CreateProcessA(NULL,
|
|
csNew.GetAnsi(),
|
|
NULL,
|
|
NULL,
|
|
FALSE,
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
lpStartupInfo,
|
|
&processInfo);
|
|
|
|
if (bRet2)
|
|
{
|
|
WaitForSingleObject( processInfo.hProcess, INFINITE);
|
|
}
|
|
}
|
|
}
|
|
CSTRING_CATCH
|
|
{
|
|
// Do Nothing
|
|
}
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
|
|
/*++
|
|
|
|
Register hooked functions
|
|
|
|
--*/
|
|
|
|
HOOK_BEGIN
|
|
|
|
APIHOOK_ENTRY(KERNEL32.DLL, CreateProcessA)
|
|
|
|
HOOK_END
|
|
|
|
IMPLEMENT_SHIM_END
|
|
|