回调监控文件
使用 ObRegisterCallbacks 实现保护进程,其实稍微 PATCH 下内核,这个函数还能实现文件操作监视。但可惜只能在 WIN7X64 上用。因为在 WIN7X64 上 PATCH 对象结构的成员(ObjectType->TypeInfo.SupportsObjectCallbacks)是合法的,在 WIN8X64 以及之后系统上会触发 PATCHGUARD。但是经过实际测试,我手里的Win7 64 是可以在不修改myobtype->TypeInfo.SupportsObjectCallbacks = 1;的前提下直接注册回调,但是win8 64不行,win8 64 修改了myobtype->TypeInfo.SupportsObjectCallbacks = 1;之后发现没有蓝屏并且目前可以成功进行回调处理(只测试了手里的一台win8 64)。文件回调容易出问题,频率非常高。使用的时候建议使用成熟的文件过滤框架。
使用的时候和进程线程的回调句柄处理一样,需要修改标记使得无签名可以正常注册回调,然后在修改文件的myobtype->TypeInfo.SupportsObjectCallbacks = 1;然后在进行回调注册就行了。
注册:
// init callbacks
OB_CALLBACK_REGISTRATION obReg;
OB_OPERATION_REGISTRATION opReg;
memset(&obReg, 0, sizeof(obReg));
obReg.Version = ObGetFilterVersion();
obReg.OperationRegistrationCount = 1;
ob