加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

winapi – 从内核模式关闭Windows?

发布时间:2020-12-14 01:52:23 所属栏目:Windows 来源:网络整理
导读:我正在尝试创建一个驱动程序,它将拦截某个键序列并在 Windows中从内核模式执行重新启动,类似于 Linux中的 REISUB键序列. 我就像Ctrl2Cap一样创建了一个键盘钩子,我试过调用 NtShutdownSystem 来重启系统. 处理程序确实检测到按键,但问题是当它实际调用NtShut
我正在尝试创建一个驱动程序,它将拦截某个键序列并在 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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读