Есть ли способ проверить, действительны ли обратные вызовы, зарегистрированные с помощью ObRegisterCallbacks?

ObRegisterCallbacks доступный начиная с Vista SP1, позволяет «зарегистрировать список подпрограмм обратного вызова для операций дескриптора потока и процесса».

Например, вы регистрируете PsSetCreateProcessNotifyRoutine обратный вызов. Вы можете отключить его с помощью программного обеспечения, такого как PC Hunter, потому что Windows x86 не имеет защиты от исправлений на уровне ядра. И драйвер не знал, что он больше не вызывается для этого обратного вызова.

Вопросы:

  1. Как драйвер может проверить, что его обратный вызов, зарегистрированный с помощью ObRegisterCallbacks, все еще действителен?
  2. Является ли ошибка STATUS_FLT_INSTANCE_ALTITUDE_COLLISION во время второго вызова ObRegisterCallbacks правильным способом проверить статус обратного вызова?
  3. Есть ли способ получить список всех зарегистрированных обратных вызовов с помощью ObRegisterCallbacks?

person misterion    schedule 09.01.2014    source источник


Ответы (1)


Как драйвер может проверить, что его обратный вызов, зарегистрированный с помощью ObRegisterCallbacks, все еще действителен? Является ли ошибка STATUS_FLT_INSTANCE_ALTITUDE_COLLISION во время второго вызова ObRegisterCallbacks правильным способом проверки статуса обратного вызова?

Из документации, если вы попытаетесь снова зарегистрировать обратный вызов с теми же параметрами, вы получите STATUS_FLT_INSTANCE_ALTITUDE_COLLISION. Точно так же для PsSetCreateProcessNotifyRoutine вы получите STATUS_INVALID_PARAMETER. Это вы можете использовать, чтобы проверить, зарегистрирован ли ваш обратный вызов в системе.

Примечание. Для PsSetCreateProcessNotifyRoutine недопустимый параметр ошибки также означает, что достигнут максимальный предел обратных вызовов.

Есть ли способ получить список всех зарегистрированных обратных вызовов с помощью ObRegisterCallbacks?

Для этого нет прямого API.

person Rohan    schedule 09.01.2014