Завершение работы Windows из режима ядра?

Я пытаюсь создать драйвер, который перехватит определенную последовательность клавиш и выполнит перезагрузку из режима ядра в Windows, аналогично последовательности клавиш REISUB в Linux.

Я создал обработчик клавиатуры, как и Ctrl2Cap , и попытался вызвать NtShutdownSystem , чтобы перезагрузить систему.

Обработчик обнаруживает нажатие клавиши, но проблема в том, что когда он действительно вызывает NtShutdownSystem , я получаю BSOD с кодом ошибки ATTEMPTED_SWITCH_FROM_DPC .

Я предполагаю это потому что я не могу выключить систему из выполняющегося DPC , поэтому мне, вероятно, нужно выполнить свой код из другого места. Но я не знаю где.

Итак, вопрос:

Как могу выключить систему после обнаружения ключевой последовательности в режиме ядра?

5
задан Mehrdad 20 August 2011 в 22:12
поделиться