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) \
11 typedef type (dspec *ptr##name) args;        \
12 extern "C" ptr##name CrNt##name; \
13 type dspec CrNt##name##_impl args;
14 
15 #define CROSSNT_DECL_EX(mod, type, dspec, name, args, callargs) \
16 typedef type (dspec *ptr##name) args;        \
17 extern "C" ptr##name CrNt##name; \
18 type 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) \
26 extern "C" ptr##name CrNt##name = NULL;          \
27 
28 #define CROSSNT_DECL_EX(mod, type, dspec, name, args, callargs) \
29 extern "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
59