|
|
/*++
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_
|