72 lines
1.2 KiB
C++
72 lines
1.2 KiB
C++
/*++
|
|
|
|
Copyright (c) 2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
StoneAge.cpp
|
|
|
|
Abstract:
|
|
|
|
The app is trying to create a window with NULL WndProc, and later it seems does
|
|
not really use it , and just launch the installshield setup program and exit.
|
|
Fix this by providing a dummy WndProc.
|
|
|
|
BUGBUG: Need to add to EmulateUSER when possible.
|
|
|
|
Notes:
|
|
|
|
This is an app specific shim.
|
|
|
|
History:
|
|
|
|
06/09/2001 xiaoz Created
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
IMPLEMENT_SHIM_BEGIN(StoneAge)
|
|
#include "ShimHookMacro.h"
|
|
|
|
APIHOOK_ENUM_BEGIN
|
|
APIHOOK_ENUM_ENTRY(RegisterClassExA)
|
|
APIHOOK_ENUM_END
|
|
|
|
/*++
|
|
|
|
Set the WndProc to DefWndProc if it's NULL.
|
|
|
|
--*/
|
|
|
|
ATOM
|
|
APIHOOK(RegisterClassExA)(
|
|
CONST WNDCLASSEXA *lpwcx // class data
|
|
)
|
|
{
|
|
if (!(lpwcx->lpfnWndProc)) {
|
|
WNDCLASSEXA wcNewWndClassEx = *lpwcx;
|
|
|
|
LOGN(eDbgLevelError, "[RegisterClassExA] Null WndProc specified - correcting.");
|
|
|
|
wcNewWndClassEx.lpfnWndProc = DefWindowProcA;
|
|
|
|
return ORIGINAL_API(RegisterClassExA)(&wcNewWndClassEx);
|
|
}
|
|
else
|
|
{
|
|
return ORIGINAL_API(RegisterClassExA)(lpwcx);
|
|
}
|
|
}
|
|
|
|
/*++
|
|
|
|
Register hooked functions
|
|
|
|
--*/
|
|
|
|
HOOK_BEGIN
|
|
APIHOOK_ENTRY(USER32.DLL, RegisterClassExA)
|
|
HOOK_END
|
|
|
|
IMPLEMENT_SHIM_END |