windows-nt/Source/XPSP1/NT/windows/appcompat/shims/specific/sierracartracing.cpp
2020-09-26 16:20:57 +08:00

100 lines
1.8 KiB
C++

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
SierraCartRacing.cpp
Abstract:
A hack for Cart Racing (Sierra). They call InitializeSecurityDescriptor
which trashes an old stack pointer which is later needed. They call
CreateSemaphore with an invalid security descriptor:
lpSemaphoreAttributes->lpSecurityDescriptor == 1
This looks like a semaphore they use to prevent getting executed twice,
Note, although it doesn't matter if the Semaphore doesn't get created,
I thought it better if this worked.
Fix:
CreateSemaphore: set the security attributes to NULL (default)
InitializeSecurityDescriptor: do nothing, since it's not needed anymore
Notes:
This is an app specific shim.
History:
11/03/1999 linstev Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(SierraCartRacing)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(CreateSemaphoreA)
APIHOOK_ENUM_ENTRY(InitializeSecurityDescriptor)
APIHOOK_ENUM_END
/*++
Use the default security descriptor.
--*/
HANDLE
APIHOOK(CreateSemaphoreA)(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCSTR lpName
)
{
// Use default security descriptor
return ORIGINAL_API(CreateSemaphoreA)(
NULL,
lInitialCount,
lMaximumCount,
lpName);
}
/*++
Returns false for InitializeSecurityDescriptor. i.e. do nothing so we don't
touch the stack.
--*/
BOOL
APIHOOK(InitializeSecurityDescriptor)(
PSECURITY_DESCRIPTOR pSecurityDescriptor,
DWORD dwRevision
)
{
return FALSE;
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(KERNEL32.DLL, CreateSemaphoreA)
APIHOOK_ENTRY(ADVAPI32.DLL, InitializeSecurityDescriptor)
HOOK_END
IMPLEMENT_SHIM_END