ReactOS 0.4.16-dev-197-g92996da
CrNtDecl.h
Go to the documentation of this file.
1
2#ifdef CROSSNT_DECL
3#undef CROSSNT_DECL
4#undef CROSSNT_DECL_EX
5#endif //CROSSNT_DECL
6
7/***************************/
8#ifdef CROSSNT_DECL_API
9
10#define CROSSNT_DECL(type, dspec, name, args, callargs) \
11typedef type (dspec *ptr##name) args; \
12extern "C" ptr##name CrNt##name; \
13type dspec CrNt##name##_impl args;
14
15#define CROSSNT_DECL_EX(mod, type, dspec, name, args, callargs) \
16typedef type (dspec *ptr##name) args; \
17extern "C" ptr##name CrNt##name; \
18type dspec CrNt##name##_impl args;
19
20#endif //CROSSNT_DECL_API
21
22/***************************/
23#ifdef CROSSNT_DECL_STUB
24
25#define CROSSNT_DECL(type, dspec, name, args, callargs) \
26extern "C" ptr##name CrNt##name = NULL; \
27
28#define CROSSNT_DECL_EX(mod, type, dspec, name, args, callargs) \
29extern "C" ptr##name CrNt##name = NULL; \
30
31#endif //CROSSNT_DECL_STUB
32
33/***************************/
34#ifdef CROSSNT_INIT_STUB
35
36#define CROSSNT_DECL(type, dspec, name, args, callargs) \
37 KdPrint(("Init " #name " cur %x\n", CrNt##name)); \
38 if(!CrNt##name) { \
39 CrNt##name = (ptr##name)CrNtGetProcAddress(g_hNtosKrnl, #name); \
40 KdPrint((" GetProcAddr(NTOSKRNL.EXE," #name ") = %x\n", CrNt##name)); \
41 if(!CrNt##name) { \
42 CrNt##name = CrNt##name##_impl; \
43 } \
44 KdPrint((" final %\n", CrNt##name)); \
45 }
46
47#define CROSSNT_DECL_EX(mod, type, dspec, name, args, callargs) \
48 KdPrint(("Init " mod "," #name " cur %x\n", CrNt##name)); \
49 if(!CrNt##name) { \
50 CrNt##name = (ptr##name)CrNtGetProcAddress(CrNtGetModuleBase(mod), #name); \
51 KdPrint((" GetProcAddr(" mod "," #name ") = %x\n", CrNt##name)); \
52 if(!CrNt##name) { \
53 CrNt##name = CrNt##name##_impl; \
54 } \
55 KdPrint((" final %x\n", CrNt##name)); \
56 }
57
58#endif //CROSSNT_INIT_STUB