【问题标题】:Shutting down Windows from kernel mode?从内核模式关闭 Windows?
【发布时间】:2011-10-31 09:25:07
【问题描述】:

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

我已经像Ctrl2Cap 一样创建了一个键盘挂钩,并且我尝试调用NtShutdownSystem 来重新启动系统。

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

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

所以问题是:

如何在内核模式下检测到按键序列后关闭系统?

【问题讨论】:

    标签: winapi kernel


    【解决方案1】:

    啊,我想出了答案……

    似乎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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 2016-09-10
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多