实用第一/智慧密集*
基于UEFI 固件的 Windows  Abnormal  Shutdown  问题分析
顾长利
(合肥联宝信息技术有限公司,合肥230601)
摘 要:简要介绍了 UEFI 固件的组成及Windows 操作系统的历史,详细介绍了导致Windows  Abnormal  Shutdown 问题的原因及基于UEFI 固件的分析造成这个原因的方法,并给出了部分程序代码。
关键词:UEFI  固件;Windows  系统;Abnormal  Shutdown  问题
1概述电脑正常使用一段时间后,可能会突然蓝屏重启;
或者电脑开机后放着长时间不动,重启系统需要很长时 间,或重启后无法进入Windows 操作。遇到这种问题, 系统工程师一般会查看Windows 日志,在系统事件下,
可以看到一个事件号为41的关键事件,这个事件就是 Abnormal  Shutdowno  Windows 给的描述是:系统在未正
常关机的情况下重新启动。如果系统停止响应,发生崩
溃或意外断电,则可能导致此错误。但具体是什么原因
导致该事件的产生,Windows 并没有给出。这就给处理
该问题的工程师带来很大的挑战。2 UEFI 固件
UEFI  全称为 Universal  Extensible  Firmware  Interface
即统一可扩展固件接口。该接口规范定义了连接操作系
统和平台硬件之间的软件接口。提供了一个标准Inter ­
face, 以便在硬件发生变更时固件能提供足够信息而保
证操作系统不受影响。它包含有芯片组和外设芯片的驱
动程序及各类协议的程序,并通过系统表提供引导时服
务和运行时服务。如图1所示。
Board Inil
CPU
IniL
Boot Manager
Intrinsic Services EFl  Driver  Dispatcher
security
Chipset Init Device,
Pre  EFI
Security  Initialization (SEC) (PEI)
Dri ver
Execution  Environment  (DXE)
Boot  Dev Select  (BDS)OS-Present
A pp
Final  OS  Environment
Power  on  -----*■ [..Platform  initialization..]图1
Transient System  Load  '(TSL)[....OS  ]
Run  Time (RT)
After Life (AL)
Shutdown
(1) SEC  (Security  Phase)阶段是平台初始化的第
一个阶段,计算机系统加电进入这个阶段。
(2) Pre  -EFI  (Pre-EFI  Initialization)负责最初的 CPU,芯片组及存储器的初始化工作,其主要功能是为
DXE 准备执行环境。
(3) DXE  (Driver  Execution  Environment)完成大部
分的驱动加载和初始化工作。遍历固件中所有的Driv ­er, 当Driver 所依赖的资源都满足要求时,调度Driver
到执行队列执行,直到所有的Driver 都被加载和执行完
毕,系统完成初始化。
(4) BDS  (Boot  Device  Seletction),启动设备选择,
初始化控制台设备,力卩载执行必要的设备驱动,根据用
户的选择,执行相应的启动项。
(5) TSL  (Transient  System  Load)操作系统装载器,
OS  Loader 调用ExitBootService 结束启动服务,进入
RunTime  阶段。
(6) RT, (Run  Time)系统进入RT 阶段后,系统的
控制权从UEFI 内核转交到OS  Loader 手中,UEFI 占用 的各种资源被回收到OS  Loader,仅有UEFI 运行时服务
保留给OS  Loader 和OS 使用。随着OS  Loader 的执行,
OS 最终取得对系统的控制权。
(7) AL  (After  Life), AL 系统灾难恢复期,在RT 阶
段,如果系统(硬件或软件)遇到灾难性错误,系统固件
需要提供错误处理和灾难恢复机制, 这种机制运行在阶段。
3 Windows 操作系统
Windows 操作系统是在个人计算机领域内普及度最
高的操作系统。最早的Windows 系统是由Microsoft 公 司从1983年开始研制,最初的研制目标是在MS  - DOS
一般认为,统一可扩展固件接口(UEFI)由以下几 个部分组成:
作者简介:顾长利(1981-),男,本科,高级工程师,
研究方向:UEFI 固件开发
软件研发与应用
的基础上提供一个多任务的图形用户界面。Windows操作系统界面友好,窗口制作优美,操作动作易学,多代系统之间有良好的传承,计算机资源管理效率较高,效果较好。
4导致Windows Abnormal shutdown原因
Windows Shutdown程序关机功能具体的步骤是:当操作系统完成所有对磁盘的写操作后,接着会删除
磁盘缓存,关闭窗口程序,关闭当前运行的程序,并把所有处于保护模式的驱动程序切换到实模式。导致操作系统关闭程序出错的主要原因有:
(1)用户使用的应用软件或系统文件被破坏。
(2)应用软件或系统文件被破坏。
(3)电源异常掉电。
串行输入/输出接口的看门口遥
(4)BIOS在“高级电源管理”或“高级配置和电源接口”不合适。
UEFI BIOS的设置与系统硬件不兼容。
(5)硬件损坏或者硬件兼容性问题。
5分析Windows Abnormal Shutdown的问题Windows历史上的问题比较多:未知原因当机、程序卡死的例子很多;为了方便工程师分析这些问题,微软推出了Memory Dump的机制:当Windows操作系统发现程序出现异常而会导致系统崩溃时,Windows会调用Memory Dump的机制来形成一个转储文件(*.dm
p)存储到操作系统所在的分区中。微软同时提供了特殊工具(WinDbg)用来分析这个Dump文件,从而方便工程师们到造成程序崩溃的原因。
因此在做分析之前,我们首先需要要把Windows Memory Dump的功能激活。但因Dump文件会暂用硬盘的空间,所以操作系统默认是不打开这个功能的。所以这就需要工程师们自己开启Dump功能,以下是激活该功能的操作步骤:
(1)桌面单击此电脑,选择属性。
(2)进入属性界面,点击高级系统设置。
(3)在高级界面,点击启动与恢复故障下面的设置按钮。
(4)进入设置,可以看到一个目录,这个就是存放Dump文件的路径。
5.1应用软件或系统文件被破坏
一般出现这种问题时,相关的软件已经不能正常使用了;但通常此时操作系统依然可以正常运行。我们可以通过特殊方法强制操作系统产生Dump文件,然后使用WinDbg工具分析这个Dump文件,快速到造成问题的原因。下面提供一种使用USB键盘热键来强制操作系统生成Dump文件的方法:
(1)进入操作系统的注册表(开始->运行->输入: Regedit,回车)。
(2)导航到以下位置HKEY_LOCAL_MACHINE\SYS-TEM\CurrentControlSet\Services\kbdhid\Parameters0
(3)右击右侧窗格并创建新的DWORD键CrashOn-CtrlScroll,并将其赋值为1遥
(4)重启系统,尝试触发BSOD系统崩溃使用键盘,按右键和滚动锁两次同时。
如果要删除上述功能,只需删除注册表项,野Crash OnCtrlScroll”并重新启动系统0
5.2电源异常掉电
主板的芯片组在设计之初就有考虑到电源异常掉电给主板的影响,通常都预留了寄存器来记录主板是否有掉电情况。如图2所示。
PWR_FLR(PF):
1=Indicates that the trickle current(from the main battery or trickle supply)was
removed or failed.
14
1h
RW/1C
0=Indicates that the trickle current has not failed si
cleared.
Software writes a1to this bit to clear it.This bit is i
'1'based on DSW_PWROK deassertion(not cleared
nce the last time the bit was
the DSW well,and defaults to
y any type of reset).
图2
软件可以读取这个寄存器来判断此次开机是否存在电源掉电的情况。UEFI固件也实现了这个功能,给这个功能命名为After Power Loss.这个功能就是用来决定当电脑非正常断电之后,电流再次恢复时,计算机要处在什么状态。有3个选项:
Power Off(当电流恢复时,计算机处在关机状态)
Power On(当电流恢复时,计算机处在开机状态)
Last state(最近一次的状态,也就是断电时的状态)正常情况下,一般设定为Last state,即保持最近一次的状态,也就是断电时的状态0如果是在操作系统正在使用的时候,出现掉电,下次电流恢复时,电脑自动开机。如果上次电脑出在关机状态下,出现掉电,下次电流恢复时,电脑处在关机状态下0
具体时间的代码实现是:
//If set the After Power Loss function to Power off If(SetupData.mACPowerLoss==
POWER_OFF){
SreeaeBBHI*>SBSI3EIEIEIEIffiEBBI!IBBBeaeBI3BigBlslBBai3IIBBEISBHI3glBBIIIIIIBSSI3aBIIIglEISa3BEIQISB>E 实用第一f智慧密集
//BIOS clears this bit by writing a T to it.
MmioAnd32(PchPwrmBase+GEN_PMCON_A, ~BIT14);
//1=System will return to the S5state.In the S5state,power button
//can wake the system up.This bit is in the RTC well.
MmioOr8(PchPwrmBase+GEN_PMCON_A,AF-TERG3_EN);
}
现在要检测是否Abnormal Shutdown是否异常掉电。就需要把After Power Loss的功能设成Power Off,即当电流恢复时,计算机处在关机状态。这样在测试的时候如果发现电脑处于关机状态,可以知道电脑出现异常掉电。沿着异常掉电的可能性分析,问题的原因很快就能到0
5.3串行输入输出芯片看门口
传统的输出输入芯片中都会集成软硬件结合的看门狗功能,又称为看门狗定时器,用以监控系统运行的状态。通常是在软件稳定运行到特定的程序后给狗喂食,如果看门狗在一定时间内没有收到软件的喂狗信号,系统将被视为失败,进入中断处理程序或强制系统复位。系统通电后,可以根据不同的工作模式选择开启看门狗的时间0如果看门狗被启用,计数器将开始计数。如果没有在规定的时间内及时喂食,看门狗就会超时0
为了分析Abnormal Shutdown是否由看门口造成的,需要关掉看门口的功能。同时通过读取特殊的寄存器来判断看门口功能是否被触发。具体程序如下:
VOID OemClearWatchDog(){
UINT8Temp0,Data8=0;
//Enter configuration mode.
OemSetValue(0x0A,0x01,&Temp0);
Temp0|=BIT7;
OemSetValue(0x0A,0x01,Temp0)
OemSetValue(0x07,0x56,&Data8);
//Disable WDT
Data8&=~BIT3;
OemSetValue(0x07,0x56,Data8);
//Exit the Nuvoton SIO Platform Parameter Reg config.
OemSetValue(0x0A,0x07,0xff);
}5.4BIOS在“高级电源管理”或“高级配置和电源接口”不合适
高级配置和电源接口(ACPI)为设备发现、操作系统配置和电源管理(OSPM)等功能提供了标准化、灵活的机制。通过与系统固件、操作系统和外围设备的通信,ACPI标准提高了系统电源分布和保护。ACPI的两个主要角包括设备配置和电源管理o在设备配置的角下,ACPI可以让操作系统知道它包含什么硬件,包括不容易检测到的设备o至于电源管理的角,一旦操作系统运行,有一些功能可以将机器转移到低功耗状态0
根据ACPI规范,UEFI固件需要提供当前电脑的相应硬件信息及控制接口给OSPM来管理外围设备。并且ACPI明确定义电源管理的相关接口及系统调用的先后顺序。这样可以在相应的接口中加入特殊的标志位来区分对应的接口是否跑到了确定造成Abnormal Shut­down的原因在哪两个接口之前。
5.5UEFI BIOS的设置与系统硬件不兼容
为了兼容竟可能多的设备,UEFI固件在开发的时候有预留很多选项供用户使用0但这些设定需要用户比较熟悉UEFI固件才能使用。有些DIY用户可能在使用过程中更改UEFI BIOS的设置,从而导致电脑无法正常使用。为了避免出现该问题,UEFI固件提供了一个“恢复出厂设置”的功能。可以通过如下方法来激活这个功能:第一步,在启动电脑时不间断按住Delete键,笔记本的用户可以按F2键,通过此方法进入UEFI BIOS设置界面。第二步,进入页面后,会看到一个对话框,此时选择Exit菜单下的Load Setup Defaults并按回车键,弹出一个Yes or No的对话框,选择Yes之后,再次按回车键。第三步:完成前面几步操作后,按F10键,选择Yes后按回车键,此时系统就会重新启动,BIOS主板则成功恢复出厂设置。
为了避免Abnormal Shutdown是由UEFI BIOS的设置造成,可以在分析问题之前,把测试机通过上述方法恢复出厂设置0
5.6硬件损坏或者硬件兼容性问题
windows错误恢复
硬件兼容性是指硬件之间或是软硬件组合系统之间的相互协调工作的程度。几种不同的电脑部件,如CPU、内存、显示卡等,如果在工作时不能够相互配合稳定地工作,就会存在兼容性问题0造成硬件兼容性的问题可
软件研发与应用SOFTWARE DEVELOPMENT&APPLICATION
能的原因有:硬件的异常导致的内存分配的改变;声卡网卡等pci设备的异常,显卡的丢失或者异常。
通常工程师是通过在系统下查看当前设备的使用是否异常,设备使用的资源是否异常及中断是否冲突几个方面来分析这类问题。但这种分析方法有个问题:只能看到问题出现后的硬件信息,但很难知道是什么原因导致的异常。
提出一种方法即在UEFI启动过程中,把相关硬件的数据写到硬盘文件中,通过在系统下对比文件的大小来判断是否出现异常;或者当硬件出现异常的时候,对比硬盘中这次保存的数据与正常启动的数据是否有异常及 异常出现在哪里,从而到问题的所在。UEFI固件中读写文件的大概流程:利用UEFI固件的
Boot Service的LocateHandleBuffer,查询所有EFI_SIMPLE_FILE_SYS-TEM_PROTOCOL(FileSystemIo)的EFI_HANDLE,通过HandleProtocol来获得所有有效的FileSystemIo,通过EFI_SIMPLE_FILE_SYSTEM_PROTOCOL的OpenVolume 获得FAT文件系统的跟目录句柄;再使用目录句柄(EFI_FILE_PROTOCOL)Filelo的Open函数用来打开一个文件,然后把需要写的数据通过Write函数写到打开的文件中,使用Close函数关闭文件。
5.6.1内存分配改变
硬件的异常,通常会导致系统启动过程中,内存分配的改变;所以可以通过对比主板每次启动时,内存的使用情况,来分析硬件的异常。具体的方法是:调用UEFI固件的Boot Service的GetMemoryMap()获得当前内存映射的副本的信息,具体函数如下gBS->GetMem-oryMap(&MemMapSize,MemMap,&MapKey,&Descrip-torSize,&DescriptorVersion);这个函数返回当前内存映射的副本,是内存描述符数组,每个描述一个连续的内存块。包括这块内存块的类型、起始的物理地址,块的大小及属性等信息。
通过上述UEFI固件操作文件的方法,把内存分配的信息保存到文件中,在系统下对比每次启动产生的内存分配信息的文件,来查寻是否存在内存分配异常的存在。然后对比正常启动的内存分配信息来看到底是哪一块内存被改动了。查询UEFI固件代码,出是哪段程 序申请了这块内存,为什么会申请失败?
该段内存是哪个设备需要的。到导致这些问题的根本原因,问题的解决方案自然水到渠成。5.6.2PCI设备的异常
分析PCI设备工作的异常的方法是,通过UEFI固件的Boot Service的LocateHandleBuffer,查询所有E FI_PCI_IO_PROTOCOL(PciIoProtocol)的句柄从而获得所有PCI总线的PCI I/O Protocol。遍历这些总线,调用PCI I/O Protocol GetLocation()函数返回支持该协议的PCI设备的位置,如果位置信息有误,退出这个设备的遍历;继续遍历其他设备。如果位置信息是正确,调用PCII/O Protocol的PCI的Read()函数,读取该PCI设备的前256字节的配置空间,并把位置信息及该配置空间的数据写入文件中。PCI设备的位置和配置空间的数据能真实反映硬件设备资源情况,系统工程师可以通过对比文件及参考PCI规范很容易查到出问题的寄存器,从而快速定位出问题设备。再进一步分析该设备运行逻辑,从而出造成问题的原因,最终到解决问题方法。
5.6.3显卡与主板不兼容
每个显示器都有一个EDID,Extended display identi­fication data,中文名称扩展显示器识别数据,是VESA 在制定DDC显示器数据通道通信协议时,制定的有关显示器识别数据的标准。EDID存储在显示器中的DDC 存储器中,当电脑主机与显示器连接后,电脑主机会通道DDC通道读取显示器DDC存储器中的存储的EDID。
可以通过检测每次启动过程EDID是否存在,来判断显卡是否存在;通过对比EDID的数据来判断显卡的枚举是否正常遥具体的方法是:查询UEFI固件的Boot Service的EFI_EDID_DISCOVERED_PROTOCOL,如果没有,表示系统没有接显示器;如果有,把该显示器的EDID(Extended display identification data)保存到文件中。
同时每个显示器支持解析度都是固定的,可以通过对比每次启动的解析度来判断显卡工作是否正常。
具体的方法是:查询EFI_GRAPHICS_OUTPUT_PR OTOCOL(GraphicsOutput),调用EFI_GRAPHICS_OUTP UT_PROTOCOL_MODE、(Mode)的EFI_GRAPHICS_ OUTPUT_MODE_INFORMATION(Info)获得所有解析度的数据(X,Y维度上以像素为单位的视频屏幕的大),并把相关数据保存到文件中。
6结语
介绍了造成的Windows Abnormal Shutdown的可能(下转第20页
)
SreeaeBBHI*>SBSI3EIEIEIEIffiEBBI!IBBBeaeBI3BigBlslBBai3IIBBEISBHI3glBBIIIIIIBSSI3aBIIIglEISa3BEIQISB>E 实用第一f智慧密集
装修方案拿不定主意时,系统将会通过Dijkstra自动为其推荐几套最佳方案,供用户挑选,通过用户的喜好将最佳方案推荐给用户。满足目前用户的消费心理和功能需求。
语音唤醒功能,增加人机交互性。用户通过说出相应的语音指令,装修系统对其进入语音识别。识别成功后将进入指令状态,用户便能通过语音命令进行相应的装修检测,云端接收数据后将会进行相应指标的情况语音播报,界面交互极其便捷。
ADL能将用户的装修数据存储在云端,让用户使用得更加放心。并且,系统利用大数据对将用户的装修数据与云端数据进行比对,得出的装修报告和装修建议极具说服力,更好地保障用户的装修安全。
系统也将通过会日常推送智能网联装修用户伙伴系统的相关文章,增强人们用户安全的意识,提高用户安全方面的知识。
3.2劣势
当前智能装修技术尚未得到较深的研究,消费者对于新产品的接受能力时间周期较长,在短时间内很难实现用户量的大幅度提升,存在预期收益不太明显的风险。
市场没有什么技术上的难点,并且现在正处于上升 期,许多潜在商家可能会进入市场。
3.3机会
需求机会。行业高速发展--智能、环保、互联,随着人们对装修安全性、舒适性、智能性等方面的需求日益提升,从硬件中心变成为软件中心,智能、环保(电动)、互联等已经成为装修电子技术的发展趋势。集合了车联网、传感器、智能终端、无人用户的新一代装修电子技术的装修在彻底改变人们的生活。
产品机会。国家的相关政策和社会舆论催生了“互联网+智能网联”的诞生,此类产品会受到社会的欢迎。
3.4威胁
(1)市面上已有类似产品。市面上已经有了土巴兔APP、齐家APP、住小帮APP这些相对成熟的APP,如果产品设计未能有突破点则很难打入市场。
(2)自身在管理过程中产生的矛盾。
4结语
根据对于市场的调查分析及现存的一些问题,有了基于室内装饰的构思。ADL运用大数据分析、云计算、信息识别等技术,基于“ADL”APP为用户提供了自由设计的空间,实现了将平面图纸立体化的技术,可以依照自己的意愿设计出只属于自己的装修风格。前端以手机APP作为主要开发平台,后端通过Tomcat进行搭建,利用Android技术进行开发,数据库采用轻量级的MySQL数据库进行数据存储,再通过蓝牙,无线网的连接方式实现VR眼镜的交互功能,实现更加便捷化、智能化、信息化的新型自主装修平台。
参考文献
[1]谢亚力.Android开发中使用SQLite数据库[J].
移动开发,2010,(8):8.
-U-必-W■仝-W■仝-W■仝-W—4A如-3纯-U-4亠4-U-必-U-必-U-必-W■仝-W■仝-W—4A4A亠纯-U纯-U g-U4-U4-U
(上接第15页)
的发展,提高了业务效率,加强了企业部门之间的沟通 与交流。计算机处理技术广泛用于办公室自动化,它使企业能够构建全面的信息管理系统并实现企业内部的科学管理。在发展过程中,必须充分利用新技术,并结合新技术进行发展。
(上接第13页)
原因,及如何基于UEFI固件来分析导致原因的逻辑及部分代码。工程师可以通过对比UEFI固件在电脑启动的过程中保存到文件中的硬件信息的差异,出造成这些问题的设备,最终到解决这些问题的方法。
参考文献
[1]陈竹云,叶雯.计算机信息处理技术在学校办公自
动化系统中的应用[J].电脑知识与技术,2018, 14(35):76-77+82.
[2]孟进.计算机信息处理技术在办公自动化中的应用
初探[J].电脑迷,2018,(05):23.
参考文献
[1]ACPI Specification Version6.3(released January2019).
[2]UEFI和ecification Version2.8(released March2019).
⑶吴伟明,吴辉,苏庆.UEFI固件存储系统分析[J].
计算机工程与设计,2017,
04.