|
|
/*++
Copyright (c) 2000-2001 Microsoft Corporation
Module Name:
ShimHook.h
Abstract:
Main header for shim DLLs
Notes:
None
History:
10/29/1999 markder Created 07/16/2001 clupu Merged multiple headers into ShimHook.h 08/13/2001 robkenny Cleaned up, readied for publishing.
--*/
#pragma once
#ifndef _SHIM_HOOK_H_
#define _SHIM_HOOK_H_
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <ntldr.h>
#include <ntddscsi.h>
#include <windows.h>
// Disable warning C4201: nonstandard extension used : nameless struct/union
// Allows shims to be compiled at Warning Level 4
#pragma warning ( disable : 4201 )
#include <mmsystem.h>
#pragma warning ( default : 4201 )
#include <WinDef.h>
#ifdef __cplusplus
extern "C" { #endif
#include <shimdb.h>
#ifdef __cplusplus
} #endif
namespace ShimLib { /*++
Globals --*/
extern HINSTANCE g_hinstDll; // The Shim's dll handle
extern BOOL g_bMultiShim; // Does this dll handle multiple shims?
extern DWORD g_dwShimVersion; //
/*++
Typedefs and enums --*/
typedef struct tagSHIM_COM_HOOK { CLSID* pCLSID; IID* pIID; DWORD dwVtblIndex; PVOID pfnNew; PVOID pfnOld; } SHIM_COM_HOOK, *PSHIM_COM_HOOK;
typedef struct tagSHIM_IFACE_FN_MAP { PVOID pVtbl; PVOID pfnNew; PVOID pfnOld; PVOID pNext; } SHIM_IFACE_FN_MAP, *PSHIM_IFACE_FN_MAP;
typedef struct tagSHIM_HOOKED_OBJECT { PVOID pThis; CLSID* pCLSID; DWORD dwRef; BOOL bAddRefTrip; BOOL bClassFactory; PVOID pNext; } SHIM_HOOKED_OBJECT, *PSHIM_HOOKED_OBJECT;
/*++
Prototypes --*/
// These declarations are needed to hook all known exported APIs that return a COM object.
PVOID LookupOriginalCOMFunction( PVOID pVtbl, PVOID pfnNew, BOOL bThrowExceptionIfNull ); void DumpCOMHooks(); void InitializeHooks(DWORD fdwReason); PHOOKAPI InitializeHooksEx(DWORD, LPWSTR, LPSTR, DWORD*); VOID HookObject(IN CLSID *pCLSID, IN REFIID riid, OUT LPVOID *ppv, OUT PSHIM_HOOKED_OBJECT pOb, IN BOOL bClassFactory ); VOID HookCOMInterface(REFCLSID rclsid, REFIID riid, LPVOID * ppv, BOOL bClassFactory); VOID AddComHook(REFCLSID clsid, REFIID iid, PVOID hook, DWORD vtblndx);
}; // end of namespace ShimLib
/*++
Defines --*/
#define IMPLEMENT_SHIM_BEGIN(shim) \
namespace NS_##shim \ { \ extern const CHAR * g_szModuleName; \ extern CHAR g_szCommandLine[SHIM_COMMAND_LINE_MAX_BUFFER]; \ extern PHOOKAPI g_pAPIHooks;
#define IMPLEMENT_SHIM_STANDALONE(shim) \
namespace NS_##shim \ { \ const CHAR * g_szModuleName; \ CHAR g_szCommandLine[SHIM_COMMAND_LINE_MAX_BUFFER]; \ PHOOKAPI g_pAPIHooks; \ \ extern PHOOKAPI InitializeHooksMulti( \ DWORD fdwReason, \ LPSTR pszCmdLine, \ DWORD* pdwHookCount \ ); \ } \ \ namespace ShimLib { \ VOID \ InitializeHooks(DWORD fdwReason) \ { \ g_dwShimVersion = 2; \ } \ \ PHOOKAPI \ InitializeHooksEx( \ DWORD fdwReason, \ LPWSTR pwszShim, \ LPSTR pszCmdLine, \ DWORD* pdwHookCount \ ) \ { \ using namespace NS_##shim; \ return InitializeHooksMulti( \ fdwReason, \ pszCmdLine, \ pdwHookCount ); \ } \ } \ namespace NS_##shim \ { \
#define IMPLEMENT_SHIM_END \
};
/*++
ShimLib specific include files --*/
#include "ShimProto.h"
#include "ShimLib.h"
#endif // _SHIM_HOOK_H_
|