ReactOS 0.4.15-dev-7846-g8ba6c66
shimlib.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Shim helper library
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: ReactOS Shim Engine common functions / structures
5 * COPYRIGHT: Copyright 2016-2019 Mark Jansen (mark.jansen@reactos.org)
6 */
7
8#pragma once
9
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15
16typedef struct tagHOOKAPI
17{
24
25
29PCSTR ShimLib_StringNDuplicateA(PCSTR szString, SIZE_T stringLength);
30BOOL ShimLib_StrAEqualsWNC(PCSTR szString, PCWSTR wszString);
32
33/* Forward events to generic handlers */
36PHOOKAPI WINAPI ShimLib_GetHookAPIs(LPCSTR szCommandLine,LPCWSTR wszShimName,PDWORD pdwHookCount);
38
39
40/* Shims should respond to SHIM_REASON_XXXX in the Notify routines.
41 SHIM_NOTIFY_ codes are sent by apphelp, and translated to SHIM_REASON_ by the shimlib routines.
42 The only exception being SHIM_NOTIFY_ATTACH, that is also set for one-time init.
43 */
44
45#define SHIM_REASON_INIT 100
46#define SHIM_REASON_DEINIT 101
47#define SHIM_REASON_DLL_LOAD 102 /* Arg: PLDR_DATA_TABLE_ENTRY */
48#define SHIM_REASON_DLL_UNLOAD 103 /* Arg: PLDR_DATA_TABLE_ENTRY */
49
50#define SHIM_NOTIFY_ATTACH 1
51#define SHIM_NOTIFY_DETACH 2
52#define SHIM_NOTIFY_DLL_LOAD 3 /* Arg: PLDR_DATA_TABLE_ENTRY */
53#define SHIM_NOTIFY_DLL_UNLOAD 4 /* Arg: PLDR_DATA_TABLE_ENTRY */
54
55
56
57typedef enum _SEI_LOG_LEVEL {
63
66
67#if defined(IN_APPHELP)
68/* Apphelp shimeng logging uses the function name */
69#define SHIMENG_MSG(fmt, ...) do { if (g_ShimEngDebugLevel) SeiDbgPrint(SEI_MSG, __FUNCTION__, fmt, ##__VA_ARGS__ ); } while (0)
70#define SHIMENG_FAIL(fmt, ...) do { if (g_ShimEngDebugLevel) SeiDbgPrint(SEI_FAIL, __FUNCTION__, fmt, ##__VA_ARGS__ ); } while (0)
71#define SHIMENG_WARN(fmt, ...) do { if (g_ShimEngDebugLevel) SeiDbgPrint(SEI_WARN, __FUNCTION__, fmt, ##__VA_ARGS__ ); } while (0)
72#define SHIMENG_INFO(fmt, ...) do { if (g_ShimEngDebugLevel) SeiDbgPrint(SEI_INFO, __FUNCTION__, fmt, ##__VA_ARGS__ ); } while (0)
73#else
74/* Shims use the shim name */
75#define SHIM_MSG(fmt, ...) do { if (g_ShimEngDebugLevel) SeiDbgPrint(SEI_MSG, SHIM_OBJ_NAME(g_szModuleName), fmt, ##__VA_ARGS__ ); } while (0)
76#define SHIM_FAIL(fmt, ...) do { if (g_ShimEngDebugLevel) SeiDbgPrint(SEI_FAIL, SHIM_OBJ_NAME(g_szModuleName), fmt, ##__VA_ARGS__ ); } while (0)
77#define SHIM_WARN(fmt, ...) do { if (g_ShimEngDebugLevel) SeiDbgPrint(SEI_WARN, SHIM_OBJ_NAME(g_szModuleName), fmt, ##__VA_ARGS__ ); } while (0)
78#define SHIM_INFO(fmt, ...) do { if (g_ShimEngDebugLevel) SeiDbgPrint(SEI_INFO, SHIM_OBJ_NAME(g_szModuleName), fmt, ##__VA_ARGS__ ); } while (0)
79#endif
80
83
84typedef struct tagSHIMREG
85{
90
91
92#if defined(_MSC_VER)
93#define _SHMALLOC(x) __declspec(allocate(x))
94#elif defined(__GNUC__)
95#define _SHMALLOC(x) __attribute__ ((section (x) ))
96#else
97#error Your compiler is not supported.
98#endif
99
100#ifdef __cplusplus
101} // extern "C"
102#endif
103
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
Definition: cdrom.h:1156
HINSTANCE hInstance
Definition: charmap.c:19
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static PVOID ptr
Definition: dispmode.c:27
#define BOOL
Definition: nt_native.h:43
#define DWORD
Definition: nt_native.h:44
DWORD * PDWORD
Definition: pedump.c:68
#define WINAPIV
Definition: sdbpapi.h:64
VOID ShimLib_ShimFree(PVOID pData)
Definition: shimlib.c:50
VOID ShimLib_Deinit(VOID)
Definition: shimlib.c:39
struct tagHOOKAPI HOOKAPI
VOID ShimLib_Init(HINSTANCE hInstance)
Definition: shimlib.c:30
_SEI_LOG_LEVEL
Definition: shimlib.h:57
@ SEI_FAIL
Definition: shimlib.h:59
@ SEI_MSG
Definition: shimlib.h:58
@ SEI_INFO
Definition: shimlib.h:61
@ SEI_WARN
Definition: shimlib.h:60
PHOOKAPI WINAPI ShimLib_GetHookAPIs(LPCSTR szCommandLine, LPCWSTR wszShimName, PDWORD pdwHookCount)
PVOID ShimLib_ShimMalloc(SIZE_T dwSize)
Definition: shimlib.c:45
PCSTR ShimLib_StringNDuplicateA(PCSTR szString, SIZE_T stringLength)
Definition: shimlib.c:60
BOOL WINAPI ShimLib_NotifyShims(DWORD fdwReason, PVOID ptr)
Definition: shimlib.c:136
struct tagHOOKAPI * PHOOKAPI
struct tagSHIMREG * PSHIMREG
HINSTANCE ShimLib_Instance(VOID)
Definition: shimlib.c:55
BOOL WINAPIV SeiDbgPrint(SEI_LOG_LEVEL Level, PCSTR Function, PCSTR Format,...)
Definition: shimeng.c:160
BOOL(WINAPI * _PVNotify)(DWORD, PVOID)
Definition: shimlib.h:82
PCSTR ShimLib_StringDuplicateA(PCSTR szString)
Definition: shimlib.c:67
BOOL ShimLib_StrAEqualsWNC(PCSTR szString, PCWSTR wszString)
Definition: shimlib.c:72
PHOOKAPI(WINAPI * _PVGetHookAPIs)(DWORD, PCSTR, PDWORD)
Definition: shimlib.h:81
ULONG g_ShimEngDebugLevel
Definition: shimeng.c:32
struct tagSHIMREG SHIMREG
enum _SEI_LOG_LEVEL SEI_LOG_LEVEL
PVOID ReplacementFunction
Definition: shimlib.h:20
PCSTR LibraryName
Definition: shimlib.h:18
PCSTR FunctionName
Definition: shimlib.h:19
PVOID OriginalFunction
Definition: shimlib.h:21
PCSTR ShimName
Definition: shimlib.h:88
_PVNotify Notify
Definition: shimlib.h:87
_PVGetHookAPIs GetHookAPIs
Definition: shimlib.h:86
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
const uint16_t * PCWSTR
Definition: typedefs.h:57
void * PVOID
Definition: typedefs.h:50
ULONG_PTR SIZE_T
Definition: typedefs.h:80
const char * PCSTR
Definition: typedefs.h:52
uint32_t ULONG
Definition: typedefs.h:59
_Reserved_ PVOID Reserved
Definition: winddi.h:3974
#define WINAPI
Definition: msvc.h:6
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:56
const char * LPCSTR
Definition: xmlstorage.h:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185