环境:win7 64 win8 win 10
SSDT HOOK NtOpenProcess //这一路径上的代码点 in line hook
ObRegisterCallbacks //注册回调函数 过滤
NTSTATUS
ObRegisterCallbacks (
_In_ POB_CALLBACK_REGISTRATION CallbackRegistration,
_Outptr_ PVOID *RegistrationHandle
);
上边这是函数定义 。
第一个参数是注册回调的一些信息。
第二个参数返回此回调的指针:
创建一个进程会返回一个进程句柄,类似的创建一个回调会返回一个跟此回调相关的指针。
核心代码:
OB_PREOP_CALLBACK_STATUS RegProtectProcess_Callback(PVOID RegistrationContext, POB_PRE_OPERATION_INFORMATION pOperationInformation)
{
//DbgPrint("yjx:进入RegProtectProcess_Callback--------------OK---------");
HANDLE pid = PsGetProcessId((PEPROCESS)pOperationInformation->Object);
char szProcName[128] = { 0 };
UNREFERENCED_PARAMETER(RegistrationContext);
SSDT HOOK NtOpenProcess //这一路径上的代码点 in line hook
ObRegisterCallbacks //注册回调函数 过滤
NTSTATUS
ObRegisterCallbacks (
_In_ POB_CALLBACK_REGISTRATION CallbackRegistration,
_Outptr_ PVOID *RegistrationHandle
);
上边这是函数定义 。
第一个参数是注册回调的一些信息。
第二个参数返回此回调的指针:
创建一个进程会返回一个进程句柄,类似的创建一个回调会返回一个跟此回调相关的指针。
核心代码:
OB_PREOP_CALLBACK_STATUS RegProtectProcess_Callback(PVOID RegistrationContext, POB_PRE_OPERATION_INFORMATION pOperationInformation)
{
//DbgPrint("yjx:进入RegProtectProcess_Callback--------------OK---------");
HANDLE pid = PsGetProcessId((PEPROCESS)pOperationInformation->Object);
char szProcName[128] = { 0 };
UNREFERENCED_PARAMETER(RegistrationContext);