我正在尝试创建一个驱动程序,它将拦截某个键序列并在Windows中从内核模式执行重新启动,类似于Linux中的REISUB键序列.
我就像Ctrl2Cap一样创建了一个键盘钩子,我试着调用NtShutdownSystem重启系统.
处理程序确实检测到按键,但问题是当它实际调用时NtShutdownSystem,我得到一个带有ATTEMPTED_SWITCH_FROM_DPC错误代码的BSOD .
我假设这是因为我无法从正在执行的DPC关闭系统,所以我可能需要从其他地方执行我的代码.但我不知道在哪里.
所以问题是:
啊,我想出了答案......
好像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)
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |