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

85 lines
1.5 KiB
C++

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
SuperChix76.cpp
Abstract:
Hook LoadLibrary and calls GetDeviceIdentifier which initializes wintrust.
This fixes the problem whereby the app will hang if they call
GetDeviceIdentifier from within a DllMain - which is an app bug.
Notes:
This is an app specific shim.
History:
10/22/2000 linstev Created
--*/
#include "precomp.h"
// This module has been given an official blessing to use the str routines.
#include "LegalStr.h"
IMPLEMENT_SHIM_BEGIN(SuperChix76)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(LoadLibraryA)
APIHOOK_ENUM_END
/*++
Hook LoadLibrary and detect their dll.
--*/
HINSTANCE
APIHOOK(LoadLibraryA)(
LPCSTR lpLibFileName
)
{
if (stristr(lpLibFileName, "did3d"))
{
LPDIRECTDRAW g_pDD;
LPDIRECTDRAW7 g_pDD7;
if (0 == DirectDrawCreate(NULL, &g_pDD, NULL))
{
if (0 == g_pDD->QueryInterface(IID_IDirectDraw7, (void **)&g_pDD7))
{
DDDEVICEIDENTIFIER2 devid;
DWORD dwBlank[16]; // GetDeviceIdentifier writes passed it's allocation
g_pDD7->GetDeviceIdentifier(&devid, 0);
g_pDD7->Release();
}
g_pDD->Release();
}
}
return ORIGINAL_API(LoadLibraryA)(lpLibFileName);
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(KERNEL32.DLL, LoadLibraryA)
HOOK_END
IMPLEMENT_SHIM_END