Blue Screen, Page-Fault-In-Non-Paged-Area 修复历程
本身平时都基本脱离了Windows的魔爪,因为Linux下的工作效率真是杠杠的。 因此也只有在假期的时候会开个Windows来休闲娱乐下,打打游戏什么的,毕竟Linux环境的游戏还真没玩过几个。
然而天不遂人意,不晓得前一天游戏的时候装了什么插件,直接导致今天进入Windows时中头彩,蓝屏了。 欲哭无泪,话说本来自个没准备折腾它,没想到它却过来折腾我了。没办法,解决问题吧先。
Page-Fualt-In-Non-Paged-Area
,从名字中我们能看出来,问题应该是一个不知道什么玩意的想要访问系统的Non-Paged
区域,从而引起的BSOD
。
感觉有点像平时程序里遇到的野指针
的感觉,估摸着是内存泄露了把。
如果是自个的程序还好,好歹能跟踪Debug
下,但这么大个的Windows,该怎么下手?
心想还是先Google下吧,找找经验之谈。
安全模式启动
解铃还须系铃人, 要解决问题,最好还是先安全模式启动Windows, 然后排查错误。
不过现在面临的尴尬问题是,Win8的安全模式设置已经不是在开机黑屏的间隔时狂按F8
就可以进入的。
需要在进入系统后通过msconfig
设置,亦或是shift
+重启
来开启安全模式。
然而我的系统现在连系统的登陆界面还没到的时候就BlueScreen
了,哪能进入系统设置呢?
既然想通过Windows本身的接口不能进入安全模式,只能通过修改boot
的配置文件或者利用第三方工具了。
于是自己找来一个Winpe
先引导进入Winpe
系统, 好在工具包里个BCDTool
可以修改系统引导项。
在BCDTool
中,找到Windows Load Manager
,可以看到下边有一个启动项,该启动项是我出问题的启动项。
先复制该启动项并创建一个新的,然后可以将之名称description
修改为SafeMode
。
之后在新的启动项下添加参数safeboot
,并将值设为Minimal
,意味最小化加载系统驱动什么的。
还有参数Network
,即带网络的安全模式。
不过也可以在Windows Load Manager
里边添加参数displaybootmenu
,值为yes
,这样就可以在进入Windows时显示启动选项,然后选择进入安全模式。
启动项设置好后,就可以重新启动了。
进入启动项的界面,会发现比之前多了个SafeMode
的选项,然后选择进入。
哈哈,终于完成了第一步,好歹总算是进入了系统。
Fix Page Fault in Nonpaged Area
一般出现蓝屏后可能由许多问题导致,比如添加硬件,更新驱动,添加软件等等。
如果是上述原因的话,那么第一步就是先把添加的卸掉,更新的驱动回滚原版。
这样或多或少能解决一部分通用蓝屏问题。
针对Page-Fault-In-Non-Paged-Aree
问题,大致有这么三种解决方式,下面一一列举出来。
重设虚拟内存
在电脑属性>高级设置>性能 里边来修改系统的虚拟内存。
首先将已经勾选的 “自动管理所有驱动器的分页文件大小”, 选择”无分页文件“,之后应用并重启,使配置生效。
接下来继续进入虚拟内存的配置界面,在下边勾选”系统管理的大小“,然后勾选”自动管理所有驱动器的分页文件大小“。然后再应用并重启。
大致意思是重新分配下虚拟内存的Pagefile
。
ChkDSK
另一个方式是利用系统的ChkDsk
自动扫描并修复硬盘。
因为pagefile.sys
文件在C盘,所以可以的C盘进行下扫描修复,查看下有没有坏道什么的。
这也有可能导致Page-Fault
的蓝屏问题。
具体执行就是打开cmd
然后输入ChkDSK /f /r c:
。
其中/f
参数是指要求修复磁盘上的错误。
/r
参数是指找到坏扇区并且回复可读取的信息。
然后修复完成再查看问题有没解决。
Check Memory
还有一个可能就是内存的损坏也会有可能导致该问题。
所以可以利用一些内存检查的软件来check
下内存是否存在问题。
或是是将内存条拔下来擦拭一下内存条的金手指。
Others
当然,导致BSOD
的原因往往不止这么几种。
各种各样的奇葩原因都能看的到。刚才就查到一个由于电源供电不足导致的。
不过因为自己不怎么玩硬件,所以这一类问题还是可以避免的。
当然,最好的解决方式就是备份还原点。出现问题的话只要还原到最近一次正常的还原点上就好了。
能够秒杀掉一大堆莫名奇妙的问题,简直是神器!
不过本人由于偷懒的性格,很少吧备份,而且也舍不得还原点占的空间。
所以导致每次出问题都只能靠手动来解决。
Blue Screen View
问题解决了,系统又能进入了,开心。 但是究竟是什么导致的蓝屏,是装的什么软件还是什么乱七八糟的驱动,总得像个办法把找出原因来,不然也不符合本人这睚疵必报的性格。
一般Windows蓝屏之后都去会生成内存转储的文件,Memory.dmp
。
里边包含了故障发生前的程序信息。
不过由于修炼的不够,自个读这个二进制文件还是很痛苦的。
好歹我们是站在巨人的肩膀上的。
因此我们可以借助Blue Screen View
这个程序来分析蓝屏生成的内存转储文件。
里边会详细显示出系统崩溃时的文件以及内存地址,从而方便我们来查询原因。
文已至此,该解决的基本上都解决了,只不过最后是要吐槽下百度。 为毛百度下技术性问题搜到的不是重装系统就是要换台电脑。 不能提供一点建设性的意见,除了浪费时间还能干什么。 实在是无语了。
10 Feb 2016
Post by: MetaCoder