从内核模式关闭Windows?

Meh*_*dad 5 winapi kernel

我正在尝试创建一个驱动程序,它将拦截某个键序列并在Windows中从内核模式执行重新启动,类似于Linux中的REISUB键序列.

我就像Ctrl2Cap一样创建了一个键盘钩子,我试着调用NtShutdownSystem重启系统.

处理程序确实检测到按键,但问题是当它实际调用时NtShutdownSystem,我得到一个带有ATTEMPTED_SWITCH_FROM_DPC错误代码的BSOD .

我假设这是因为我无法从正在执行的DPC关闭系统,所以我可能需要从其他地方执行我的代码.但我不知道在哪里.

所以问题是:

如何我的系统在检测到内核模式的按键顺序关机?

Meh*_*dad 5

啊,我想出了答案......

好像ExQueueWorkItem诀窍:

VOID NTAPI MyShutdownSystem(PVOID) { NtShutdownSystem(1); }

// ... [code] ...

PWORK_QUEUE_ITEM pWorkItem =
    (PWORK_QUEUE_ITEM)ExAllocatePool(NonPagedPool, sizeof(WORK_QUEUE_ITEM));

if (pWorkItem != NULL) {
    ExInitializeWorkItem(pWorkItem, &MyShutdownSystem, NULL);
    ExQueueWorkItem(pWorkItem, DelayedWorkQueue);
}
Run Code Online (Sandbox Code Playgroud)