有没有办法检查ObRegisterCallbacks注册的回调是否仍然有效?

时间:2014-01-09 08:29:12

标签: c x86 driver wdk wdf

自Vista SP1起可用的

ObRegisterCallbacks‘s允许“为线程和进程句柄操作注册回调例程列表”。

例如,您正在注册PsSetCreateProcessNotifyRoutine回调。您可以使用PC Hunter等软件取消设置,因为x86窗口没有内核级补丁防护。并且驱动程序不知道它不再需要这个回调。

问题

  1. 驱动程序如何检查用ObRegisterCallbacks注册的回调是否仍然有效?
  2. 第二次调用ObRegisterCallbacks时出现STATUS_FLT_INSTANCE_ALTITUDE_COLLISION错误是检查回调状态的正确方法吗?
  3. 是否可以通过ObRegisterCallbacks获取所有已注册回调的列表?

1 个答案:

答案 0 :(得分:1)

  

驱动程序如何检查用ObRegisterCallbacks注册的回调是否仍然有效?   在第二次调用ObRegisterCallbacks期间STATUS_FLT_INSTANCE_ALTITUDE_COLLISION错误是检查回调状态的正确方法吗?

从文档中,如果您尝试使用相同的参数再次注册回调,则会获得STATUS_FLT_INSTANCE_ALTITUDE_COLLISION。同样地,对于PsSetCreateProcessNotifyRoutine,您将获得STATUS_INVALID_PARAMETER。这可用于测试您的回调是否仍在系统中注册。

注意:对于PsSetCreateProcessNotifyRoutine,错误无效参数也表示已达到最大回调限制。

  

是否可以通过ObRegisterCallbacks获取所有已注册回调的列表?

没有任何直接的API。