Source code of Windows XP (NT5)
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.
|
|
/*++
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
|