【问题标题】:Got BSOD with KeSaveExtendedProcessorState使用 KeSaveExtendedProcessorState 获得 BSOD
【发布时间】:2012-08-21 17:38:59
【问题描述】:

我之前在 Windows 7 64 位设备驱动程序中使用KeSaveExtendedProcessorState/KeRestoreExtendedProcessorState 来保存和恢复扩展处理器状态,我得到了带有 KeSaveExtendedProcessorState 的 BSOD,请您帮忙。

我使用RtlGetEnabledExtendedFeatures((ULONG64)(-1)) 获取启用的扩展功能(返回值为0x3),并将其用作KeSaveExtendedProcessorState的第一个参数,我使用MmAllocateContiguousMemory( sizeof(XSTATE_SAVE), highAddress) with highAddress = 0xbfffffff 分配用于保存扩展状态的非分页内存,并在 KeSaveExtendedProcessorState 之前将 IRQL 提升到 DISPATCH_LEVEL。我收到以下消息的 BSOD:

0: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

INVALID_EXTENDED_PROCESSOR_STATE (131)
Invalid combination of parameters was detected while saving or restoring
extended processor state.
Arguments:
Arg1: 0000000000000000, Invalid feature mask was passed or extended processor state is
                not enabled.
Arg2: 0000000000800000, Nonzero if extended state is enabled.
Arg3: 0000000000000003, The low 32 bits of the feature mask.
Arg4: 0000000000000000, The high 32 bits of the feature mask.

我错过了什么?

谢谢。

问候, 大卫

【问题讨论】:

  • 更多代码可能会有所帮助,但您是否确保遵守MSDN Docs 底部的规则?关于嵌套和 IRQL 的内容很有趣,堆栈上的存储也很有趣。无论如何,值得深思。

标签: windows device-driver


【解决方案1】:

现在帮助您进行编程为时已晚,但您错过的是 KeSaveExtendedProcessorState 在 64 位 Windows 7(不是 32 位和 Windows 8 及更高版本)中的实现要求处理器支持扩展处理器状态,这你的没有。无论如何,它都认为 XSTATE_MASK_LEGACY 的两个位在 Mask 参数中都是无效的。

你错过这个的代价就是你的错误检查。不需要“多一点代码”。当然,你并不是唯一一个错过它的人。微软在文档中也漏掉了它,但对微软来说,这个代价比什么都少。

十年后,在我评估这个函数是否值得我费力记录下来时,我想知道是否有任何现实世界的程序员被抓住了。因此,Stack Overflow 是否表明它最终对答案有好处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2013-05-04
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多