Refactored dynamically linking ntdll
This commit is contained in:
@ -27,10 +27,32 @@ typedef union _LDR_DLL_NOTIFICATION_DATA {
|
||||
|
||||
typedef void (*LdrDllNotification_t)(ULONG reason, const PLDR_DLL_NOTIFICATION_DATA data, void *context);
|
||||
|
||||
typedef NTSTATUS (*LdrRegisterDllNotification_t)(ULONG flags, LdrDllNotification_t notificationFunction, void *context, void **cookie);
|
||||
typedef NTSTATUS (*LdrUnregisterDllNotification_t)(void *cookie);
|
||||
#define DYNAMIC_FN_TYPE(ret, name, args) typedef ret (*name##_t)args
|
||||
|
||||
extern LdrRegisterDllNotification_t LdrRegisterDllNotification;
|
||||
extern LdrUnregisterDllNotification_t LdrUnregisterDllNotification;
|
||||
#ifdef NTDLL_DYNAMIC_LINK_IMPL
|
||||
#define DYNAMIC_FN_VAR(name) extern name##_t name; name##_t name
|
||||
#else
|
||||
#define DYNAMIC_FN_VAR(name) extern name##_t name
|
||||
#endif
|
||||
|
||||
void ntdll_link();
|
||||
#define DYNAMIC_FN_DEF(ret, name, args) DYNAMIC_FN_TYPE(ret, name, args); DYNAMIC_FN_VAR(name)
|
||||
|
||||
DYNAMIC_FN_DEF(NTSTATUS, LdrRegisterDllNotification, (ULONG flags, LdrDllNotification_t notification, void *context, void **cookie));
|
||||
DYNAMIC_FN_DEF(NTSTATUS, LdrUnregisterDllNotification, (void *cookie));
|
||||
|
||||
#ifdef NTDLL_DYNAMIC_LINK_IMPL
|
||||
#define DYNAMIC_FN_LINK(module, name) name = (name##_t)GetProcAddress(module, #name)
|
||||
|
||||
static void _ntdll_link() {
|
||||
HMODULE ntdll = GetModuleHandleA("ntdll.dll");
|
||||
|
||||
DYNAMIC_FN_LINK(ntdll, LdrRegisterDllNotification);
|
||||
DYNAMIC_FN_LINK(ntdll, LdrUnregisterDllNotification);
|
||||
}
|
||||
|
||||
#undef DYNAMIC_FN_LINK
|
||||
#endif
|
||||
|
||||
#undef DYNAMIC_FN_TYPE
|
||||
#undef DYNAMIC_FN_VAR
|
||||
#undef DYNAMIC_FN_DEF
|
||||
|
||||
Reference in New Issue
Block a user