Windows 已获得KeSaveExtendedProcessorState的BSOD

Windows 已获得KeSaveExtendedProcessorState的BSOD,windows,device-driver,Windows,Device Driver,我以前在Windows7 64位设备驱动程序中保存和恢复扩展处理器状态,我获得了KeSaveExtendedProcessorState的BSOD,请提供帮助 我使用((ULONG64)(-1))获取已启用的扩展功能(返回值为0x3),并将其用作的第一个参数,我使用(sizeof(XSTATE_SAVE),highAddress=0xbffffff的(sizeof(XSTATE_SAVE),highAddress)分配用于保存扩展状态的非分页内存,并在KeSaveExtendedProcesso

我以前在Windows7 64位设备驱动程序中保存和恢复扩展处理器状态,我获得了KeSaveExtendedProcessorState的BSOD,请提供帮助

我使用((ULONG64)(-1))获取已启用的扩展功能(返回值为0x3),并将其用作的第一个参数,我使用(sizeof(XSTATE_SAVE),highAddress=0xbffffff的(sizeof(XSTATE_SAVE),highAddress)分配用于保存扩展状态的非分页内存,并在KeSaveExtendedProcessorState之前将IRQL提升到DISPATCH_级别。我收到了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.
我错过了什么

谢谢

问候,,
David

现在帮助您编程已经太迟了,但您错过的是64位Windows 7(而不是32位,也不是Windows 8及更高版本)中KeSaveExtendedProcessorState的实现要求处理器支持扩展处理器状态,而您的处理器不支持扩展处理器状态。无论如何,它认为XSTATE_MASK_LEGACY的两个位在MASK参数中无效

你错过这个的代价就是你的错误检查。不需要“多一点代码”。当然,并不是只有你错过了。微软也在文档中遗漏了这一点,但这对微软来说,代价不菲


十年后,在我评估这个函数是否值得我费心去记录时,我想知道是否有真实世界的程序员被抓到过。因此,堆栈溢出是否表明它最终是一个好的答案。

更多的代码可能会有所帮助,但您是否确保遵循了列表底部的规则?关于嵌套和IRQL的内容很有趣,提到堆栈上的存储也是如此。无论如何,这是值得思考的。