Как зарегистрировать обратный вызов с помощью PsSetCreateProcessNotifyRoutine / PsSetCreateProcessNotifyRoutineEx? - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь научиться кодировать драйверы Windows, к сожалению, информации мало, и иногда мне трудно получить полную картину от чтения страниц MSDN.

Сказав это, пару недель назад я обнаружил довольно простой пример кода, который регистрирует обратный вызов с помощью одной из вышеупомянутых функций и выводит некоторую информацию в консоль отладки при создании процесса, я слегка его изменил просто распечатать имя исполняемого файла и PID . Я планировал сохранить его для дальнейшего использования, но в какой-то момент я удалил код по ошибке, и теперь, когда я снова попытался реализовать то же самое, я не могу заставить его работать, каждый раз, когда я пытаюсь загрузить драйвер, я просто получаю ACCESS DENIED ошибка.

Вот NotifyRoutine

VOID PsCreateProcessNotifyEx_CB(IN PEPROCESS Process, IN HANDLE ProcessId, IN PPS_CREATE_NOTIFY_INFO CreateInfo)
{
    if(CreateInfo)
        DbgPrint("PID = %d\r\n", ProcessId);
}

Я регистрирую обратный вызов в DriverEntry, как это.

NTSTATUS NtStatus = PsSetCreateProcessNotifyRoutineEx(PsCreateProcessNotifyEx_CB, FALSE);

Затем также удалить в DriverUnload, установив для параметра Remove значение TRUE

Хотелось бы найти исходную страницу, где я получил код, на который я впервые ссылался, но я искал несколько часов и пробовал несколько разных вещей, но я просто не могу заставить его работать сейчас.

Кто-то, пожалуйста, укажите, что мне не хватает.

1 Ответ

0 голосов
/ 18 ноября 2018

Если вы посмотрите на документацию PsSetCreateProcessNotifyRoutineEx в возвращаемом значении, оно говорит: «Изображение, содержащее указатель подпрограммы обратного вызова, не имеет IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY в своем заголовке изображения». Вам нужно добавить эту опцию / INTEGRITYCHECK в настройках компоновщика в Visual Studio или вы можете просто отредактировать ее в файле sys с помощью редактора PE

...