Windows2003-3790/windows/appcompat/shims/general/correctactivemoviepath.cpp
2020-09-30 16:53:55 +02:00

93 lines
1.9 KiB
C++

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
CorrectActiveMoviePath.cpp
Abstract:
A hack for Railroad Tycoon 2 video playing. Apparently they have
hardcoded paths for a WinExec call. Also see MSDN Article ID: Q176221
Notes:
This is a general purpose shim.
History:
12/06/1999 linstev Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(CorrectActiveMoviePath)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(WinExec)
APIHOOK_ENUM_END
/*++
This stub function breaks into WinExec and checks to see if lpCmdLine
parameter includes AMOVIE.OCX or RUNDLL as well as /PLAY.
--*/
UINT
APIHOOK(WinExec)(
LPCSTR lpCmdLine,
UINT uCmdShow
)
{
CSTRING_TRY
{
CString csCl(lpCmdLine);
csCl.MakeUpper();
int nAmovieIndex = csCl.Find(L"AMOVIE.OCX,RUNDLL");
if (nAmovieIndex >= 0)
{
int nPlayIndex = csCl.Find(L"/PLAY");
if (nPlayIndex >= 0)
{
CString csNewCl;
LONG success = RegQueryValueExW(csNewCl,
HKEY_LOCAL_MACHINE,
L"Software\\Microsoft\\Multimedia\\DirectXMedia",
L"OCX.ocx");
if (success == ERROR_SUCCESS)
{
csNewCl += L" ";
csNewCl += csCl.Mid(nPlayIndex);
return ORIGINAL_API(WinExec)(csNewCl.GetAnsi(), uCmdShow);
}
}
}
}
CSTRING_CATCH
{
// Do Nothing
}
return ORIGINAL_API(WinExec)(lpCmdLine, uCmdShow);
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(KERNEL32.DLL, WinExec)
HOOK_END
IMPLEMENT_SHIM_END