欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

在工作中,经常被要求一天安装个10台、8台的SQL Server。每当这种情况发生的时候,我总会心里默念道:杯具啊,这辈子也装不完了。因为SQL Server的安装还是比较复杂的,要先安装.Net、Windows Installer,在正式安装的过程中还要交互的填写各种参数,当然这个还不包括拷贝3GB多的安装文件的时间。在经历了几次这样的悲剧之后,我果断的意识到必须研究一下写个脚本改变这个残酷的现实。

前段时间会学校毕业答辩我终于暂时离开了繁重的工作,能找个时间研究一下脚本了。刚开始实验这个脚本的时候,由于同学喊我打游戏,我就偷懒没准备实验环境,直接用我的本子跑了安装程序,然后就切到游戏去了。结果后来还造成了我本子的系统出现了很难解释的错误,详细的情况我写在上篇BLOG里了,悲剧的《BITS服务异常引发CPU满载》。惨痛的教训告诉我们,作实验还是要虚拟机里做比较安全。

实验环境:

在VMware里面装了个Windows server 2003 企业版 X86 SP2,用的是SQL Server 2008 R2。安装文件解压后保存虚拟机快照,保存下这个纯净的系统环境,这样可以随时还原回来,重新实验。

自动化脚本:

Setup.exe /QS

Setup.exe /QS /ACTION=Install /IACCEPTSQLSERVERLICENSETERMS
/FEATURES=SQLEngine,IS,SSMS /INSTANCENAME=MSSQLSERVER
/INSTALLSQLDATADIR="D:\sqlserverdata" /AGTSVCACCOUNT="SYSTEM"
/AGTSVCSTARTUPTYPE="Disabled" /SQLSVCACCOUNT="SYSTEM"
/SQLSVCSTARTUPTYPE="Automatic" /ISSVCACCOUNT="SYSTEM"
/ISSVCStartupType="Automatic" /ISSVCACCOUNT="LOCAL SERVICE"
/ISSVCStartupType="Automatic" /SQLSYSADMINACCOUNTS="hanxu"

pause

整个脚本最主要的部分就是上面的两段,其实安装并把参数传递进去原本只需要一行。但是由于SQL Server的安装过程比较特殊,所以需要分为两行来写。真正的安装需要先安装.NET补丁和Windows Installer的补丁,在安装完毕Windows Installer之后整个程序会中断。所以第一行的那个不带很长参数的就是为了触发安装.NET补丁和Windows Installer的补丁。这两个补丁被安装之后程序会中断,所以这里也不需要附带很长的参数。第二行那个带很长参数的才是真正的SQL Server的安装过程。

在这个很长的一大串参数里面,其实归纳一下也还是有规律的。

首先就是/QS /ACTION=Install /IACCEPTSQLSERVERLICENSETERMS,这些参数用于设定安装模式、同意授权协议。

然后,/FEATURES=SQLEngine,IS,SSMS /INSTANCENAME=MSSQLSERVER /INSTALLSQLDATADIR="D:\sqlserverdata"这些参数设定安装的组件和实例信息。

这里有一点的觉得需要说明一下的,脚本安装时支持设定Windows和SQL认证的,如果什么参数都不填就是默认Windows认证。我这里强烈建议用Windows认证方式,如果需要SQL认证可以等安装完毕之后再设定验证模式,如果在脚本里面设定SQL验证的话,里面会记录有sa账户密码。如果脚本丢失,大量的机器都是用这个脚本安装的,那个就不用解释了,悲剧……

再下面的一段就是纯粹的服务设定了,SQL Server的很多功能都是以服务的方式运行的,所以就要给他们赋予相应的启动方式(自动、禁止等)。还有就是对服务给予适当的启动账户(系统账户、本地服务、域权限等)。权限给低了许多权限不够,权限给高了会影响安全性,这个也要综合考虑。

最后就是/SQLSYSADMINACCOUNTS="hanxu",给SQL的sysadmin添加一个账户用于登陆。

关于其他优化:

1.SQL Server的安装盘里面包含了X86、X64、AI64这3个版本,如果只用到其中的一个构架的版本,可以把存放其他版本安装文件的个文件夹给直接删了,然后再打包,这样能精简安装包。

2.我这个实力脚本式对应SQL Server 2008的,如果是之前的版本可能需要打补丁。可以把补丁文件也整合进脚本,然后走脚本自动安装。我实验过一个脚本安装了SQL Server 2008和它的SP1补丁,这个很方便。

3.SQL Server不同版本之间的脚本在参数上有小的差异,这里推荐用虚拟机快照保存最初状态,然后慢慢反复尝试。如果有错误,脚本会在命令行里给出错误参数。详细的参数查询可以使用/help命令或者去MSDN查询。

用了自动化脚本还是很爽的,原来手动安装半小时的活,现在点一下鼠标就行了。甚至可以给脚本加的自动重启的命令,点下鼠标,半小时之后来直接就能用了。话说为了写这个脚本,我用虚拟机实验了也就几十、二十次的样子,通宵了一个晚上,不过对于我这种经常大量安装任务的人来说,可以说是一次投资终身受用。这里分享给大家,希望对大家有所帮助。

大约1个星期之前,我连着几天都发现,我的电脑会经常的卡,尤其在打游戏的时候。当时摸了一下电脑出风口,非常的烫,我也就理解成天热负载大,没过多的注意这个问题。直到一连几天都这样,而且到了后来我发现我看个电视剧、看个网页什么的都卡。这里我就感觉不对了,话又说回来了,和同学一起联机打游戏,人家都不卡就我一个人卡。这个很难解释啊= =

果断的意识到是我电脑问题后,立即打开了任务管理器查看,发现一个进程的CPU利用率一直在50%。果然是进程问题,一个激动啊,只要搞定这个进程就OK了。不过仔细一看,这个进程是几个svchost.exe中的一个。这个就比较囧了,svchost.exe是用来跑一些本地服务的,而且一个svchost.exe里面还可能有很多个服务。要是一般的进程异常,如果不太重要的话可以直接关掉然后重启。svchost.exe里面包含了很多的服务,不能随便乱来,而且关了之后也很难手动的启动。不过庆幸的是,我能确定这是由Windows的服务造成的问题了。

确定了是服务问题,然后把任务管理器切换到服务选项卡,发现里面查看不到CPU使用情况。所以要找更先进的工具去挖掘原因了,这里我试验了一下任务管理器中性能选项卡里的资源监视器倒是比较犀利。

从进程列表里看,网络服务的svchost.exe进程的CPU利用率达到了47%,在下面的我服务列表终于能查看到服务状态了,BITS服务占用了47%的CPU。所以确定是由于BITS服务拖累了整个系统。

看右边的图表,CPU0的利用率直接就满载了,CPU1还是正常的。之前的机器卡应该是由于BITS这个服务造成锁死。然后CPU0就被卡死了,由于电脑是双核CPU,还有一个CPU能承担负载,还有一个CPU是活着的,所以还能在卡的情况下用着……

找到了原因所在,我想把这个服务重启一下,应该就行了。不过重启服务时发现,这个直接就卡死到重启不了的地步了。后来没办法,只能重启计算机了。

不过重启是暂时的解决了问题,根源是怎么回事呢。我回忆起来我之前几天干了比较危险的事。大概再往前的几天,我在实验用脚本安装SQL server(过几天我找个时间也share出来)。我当时的环境是用的我目前的电脑,Win7英文旗舰版,已经安装了VS2010英文版(包含SQL express)。然后我用脚本安装SQL 2008 R2的中文企业版,直接就用的脚本。在安装过程中安装程序直接非正常中断了,这里我很难说清楚是英文已经安装了express版本又安装企业版导致错误中断的,还是企业版的SQL不能安装在非服务器的系统上中断的,反正它就是安装了一半非正常中断退出了。从那以后,我机器就一直天天都像之前说的那样卡。

最后,把VS2010的安装文件找出来,修复安装了一下,之后就没有再卡过了。系统在进行安装操作的时候要对系统做很多的修改,在安装过程中错误了,导致一些设置异常了,然后系统就不正常了,修复安装后估计修正了其中的一些错误,问题解决。

这里给大家介绍一下Web Deploy这个IIS的迁移工具。

Windows server 2008 r2在web服务上做了很大的提升,Windows server 2008的IIS 7从核心层将被分割成了40多个不同功能的模块,用户可以根据Web服务器运行的需要来订制安装所需的模块,这样可以使IIS更为精简,减少不必要的组件可以减少受攻击表面,增加了IIS的安全性和可用性。而在Windows server 2008 r2的IIS 7.5上连Server Core模式下可以运行ASP.Net应用,还有新的PowerShell命令行、IIS Administration Pack等强大功能被加入。这些新的特性也给了大家十足的理由升级到Windows server 2008 r2的IIS 7.5。

在同版本的IIS之间迁移时,可以通过备份、还原配置,然后将web server目录copy到目标机器上这种传统的方式迁移。但是,这在IIS 6到IIS 7的迁移是肯定行的,如果是对于单个机器上运行了大量web应用的情况,手动的逐一迁移也不现实。Web Deploy正是微软提供的专门用于web部署、迁移的工具,他可以让复杂的操作变的非常简单,可以只要使用几行命令就能完全解决。

Web Deploy的迁移过程其实可以看成是一个同步的过程,将源服务器上的websites同步到目标服务器;或者由源服务器上的websites同步到一个package,再由这个package同步到目标服务器,在这个过程中,就只要2-3行命令和一次copy。

Web Deploy对应于x86和amd64有2个版本,在源、目标服务器上都安装对应的版本即可。下载地址

这里假设一个场景:

源服务器:IIS6_server,这是一台IIS6的源服务器,上面跑了50个web站点。

目标服务器:IIS7_server,这是一台IIS7(IIS7.5)的源服务器,要把站点从IIS6_server上迁移过来。源、目标服务器都安装了对应版本的Web Deploy(Web Deploy的安装也需要.net framework支持)。

迁移步骤:

1.在IIS6_server上运行msdeploy –verb:getDependencies –source:webserver60,查看出源机器安装的组件情况,在目标机器IIS7_server上安装相关组件。

2.在IIS6_server上运行msdeploy -verb:sync -source:webserver60 -dest:package=d:\site_archive.zip,encryptPassword=123,把站点同步到d:\site_archive.zip中。

3.把d:\site_archive.zip拷贝到目标服务器IIS7_server,然后在IIS7_server上运行msdeploy -verb:sync -source:package=d:\site_archive.zip,encryptPassword=123 -dest:webserver60,把d:\site_archive.zip的内容同步到IIS7中,迁移完毕。

注意:

1.确保源服务器和目标服务器上msdeploy的权限是够的,Windows server 2003上,启动时会默认限制权限,如果要操作要把启动时限制权限的勾点掉。Windows server 2008/2008r2上要以管理员身份运行程序。

2.详细参数可以用msdeploy -?查询。

3.参考资料:http://learn.iis.net/page.aspx/346/web-deploy/

记得刚进公司的几天,我旁边坐的顾同学(同事)问我到他的办公机蓝屏,而且越来越频繁,每天大概1-2次的样子。由于以前经常自己探究蓝屏的排错,我第一反应就是看dump文件。于是我到C:\WINDOWS\Minidump\下找dump文件,结果看到了15个dump。当时心里一想,有这个就有线索了,不过发现公司电脑没调试工具,于是把那个文件夹打包,直接copy走,然后和同事说明天给你答复。呵呵……

回家打开dump文件,结果直接就一目了然了。

0: kd> !analyze –v

结果为:

 

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.
Arguments:
Arg1: 00000006, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000000, value 0 = read operation, 1 = write operation
Arg4: b7e367d4, address which referenced memory
Debugging Details:
------------------
READ_ADDRESS:  00000006
CURRENT_IRQL:  2
FAULTING_IP:
iaStor+57d4
b7e367d4 0fb64e06        movzx   ecx,byte ptr [esi+6]
CUSTOMER_CRASH_COUNT:  1
DEFAULT_BUCKET_ID:  DRIVER_FAULT
BUGCHECK_STR:  0xD1
PROCESS_NAME:  Idle
LAST_CONTROL_TRANSFER:  from b7e370ab to b7e367d4
STACK_TEXT: 
WARNING: Stack unwind information not available. Following frames may be wrong.
805522fc b7e370ab 89d41418 80552398 ffdff000 iaStor+0x57d4
80552418 b7e75283 89d41418 00000000 ffdff980 iaStor+0x60ab
80552428 80546e7f 89d34200 89d33ad8 00000000 iaStor+0x44283
80552450 80546d64 00000000 0000000e 00000000 nt!KiRetireDpcList+0x61
80552454 00000000 0000000e 00000000 00000000 nt!KiIdleLoop+0x28
STACK_COMMAND:  kb
FOLLOWUP_IP:
iaStor+57d4
b7e367d4 0fb64e06        movzx   ecx,byte ptr [esi+6]
SYMBOL_STACK_INDEX:  0
SYMBOL_NAME:  iaStor+57d4
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: iaStor
IMAGE_NAME:  iaStor.sys
DEBUG_FLR_IMAGE_TIMESTAMP:  48cad1b8
FAILURE_BUCKET_ID:  0xD1_iaStor+57d4
BUCKET_ID:  0xD1_iaStor+57d4
Followup: MachineOwner

错误指针就是上面红色显示的iaStor文件上,下面一连串的信息都显示问题和他关联。下面就是查一下iaStor这个文件的详情。

0: kd> lmvm iaStor
start    end        module name
b7e31000 b7f0b000   iaStor   T (no symbols)          
    Loaded symbol image file: iaStor.sys
    Image path: iaStor.sys
    Image name: iaStor.sys
    Timestamp:        Sat Sep 13 04:31:52 2008 (48CAD1B8)
    CheckSum:         0004FF15
    ImageSize:        000DA000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4

去网上搜索了一下,这个是Intel的驱动程序,发布日期是2008年9月份,已经是很早的驱动了,估计就是由于这个驱动的问题导致蓝屏吧。

目标和可能原因锁定了,下面就要查看具体原因了:

这个蓝屏错误代码是D1(DRIVER_IRQL_NOT_LESS_OR_EQUAL),如图上的绿色所示。错误代码分别是:00000006,00000002,00000000,b7e367d4。

在windbg的帮助文件找到了D1错误的解释,在IRQL值过高是内核驱动尝试访问内存页面,也就是引用了错误的内存。第一个参数是引用的内存(00000006)很明显,这个是个错误的地址。第二个参数是当前的IRQL值,第三个参数是读写位,第四个是引用内存地址。这种问题明显是驱动的bug。

第二天,我去告诉顾同学换一个驱动应该就好了。顾同学从计算机厂商下载了驱动,但是顾同学说还是蓝屏了。晕……后来一问,那个驱动是HP官方提供的,竟然也不靠谱。

之后我去Intel的网站下载驱动,但是有一个芯片组驱动和一个存储控制器驱动(IATA89ENU和infinst911autol)。我也不知道应该装哪个……就把两个都下载下来了,看后面的版本号,从低版本到高版本一装。后面的一段日子,顾同学的电脑蓝屏就再也没有出现过。后来的一些同事也出现了蓝屏,我把驱动copy给他们,他们也没有再次蓝屏。

我也调过不少次的蓝屏,发现了一个共同的问题,就是我所遇到的蓝屏基本上都是第三方驱动所致,然后大家蓝屏了就去批判windows这个系统烂。从这个事例我们可以看出PC制造商提供的驱动也不是靠谱的,毕竟现在的电脑很多都是“组装”的。只有芯片厂商才会及时更新驱动,不过去芯片厂商下载驱动很难确定哪个才是合适的选择。不过这里推荐大家用Windows 7,我切身的体验是如果希望电脑稳定的话,微软update提供的驱动才是最简单、最靠谱的。Windows 7在这方面做的真的很不错。

发表于 2010年4月23日 23:53 作者 orpheus | 1 评论
归档在:, ,

终于在前天收到了微软给我寄送的奖杯,虽然4月1号就收到了当选的消息。但是,真正看到奖杯的时候也让我激动不以啊。

这个寄送的过程还是比较曲折的,首先我当时登记资料的时候工作也比较忙,把手机号填错了……我当时发邮件给了MVPGA,他们也迅速了给于了我回应。然后China MVP Committee也迅速的给我提供了报关清单和很多相关信息,他们的服务真的非常迅速和周到,感谢他们。包裹在海关躺了一星期,fedex才给我打电话,要我给于证件和报关清单,又过了几天才真的拿到了包裹。

掐指一算,现在的日子也基本上是我在ITECN写blog满一年的日子,MVP也算是对我一年工作的肯定和鼓励吧,或者说是一个里程碑了。这里我最要感谢的当然还是站长盆盆了,然后就是Asuka。也谢谢微软的MVP计划,谢谢微软。我也会继续努力,给大家带来更多的分享。加油……

发表于 2010年4月21日 8:14 作者 orpheus | 4 评论
归档在:

岗位职责:
1.专注盛大游戏数据库监控,备份,容灾,高可用等架构设计
2.专注盛大游戏数据库性能优化,故障排查
3.专注盛大游戏数据库技术培训,SQL审计,开发指导
4.与网游行业最专业顶尖的DBA团队一起共同成长
任职资格:
1.大学本科(非常优秀者可放宽学历),至少2年以上工作经验
2.江浙沪一带优先
3.有过大型互联网,或者网游行业工作经验优先
4.SQLServer MVP优先
5.维护超过百台DB经验者,优先
6.热爱,专注数据库技术研究,同时具有良好的沟通,协调能力
7.工作积极上进,人品正直,稳重
待遇:
1.每年6次的调薪机会
2.双份住房公积金
3.除去一般的车补,饭补等外,还有最高有20w的房补等
有意者请Email:talen-t#163.com(#换成@)

-------------------------

借地,发个招聘。呵呵……请注明来自ITECN。

发表于 2010年4月19日 12:39 作者 orpheus | 0 评论
归档在:

今天是3月24号啦,也是我入职的整整一个月,上溯到我在ITECN也BLOG也快一年了。时光荏苒啊……

我在这里写下这篇BLOG,感谢我亲爱的、帮助我、支持我的朋友们。不过,在此之前,我想先感谢下亲爱的党和我的祖国。然后再谢谢你们,我的朋友们,盆盆,zunhua,Kejia,luoluo,asuka。谢谢你们对的滴关心与呵护!

Best wish for you。

发表于 2010年3月24日 0:09 作者 orpheus | 2 评论
归档在:

前言:去年年底,微软在人人网(www.renren.com)开设了Windows 7的宣传帐号Lucky 7。我作为一名大学生,也是人人网的深度用户,非常感谢微软对我们大学生这个群体的重视。当然,作为微软技术的爱好者,我也非常积极的参与进来,和小七(Lucky 7)一起去帮助其他的同学。我也写了一些文章以帮助同学们去了解Windows 7,并分享一些技巧。这些文章得到了Lucky 7和不少同学的肯定。应佘华煜弟弟的建议,在这里转出来,希望能帮助更多的用户。

这些文章也被小七的sina博客收录,小七的sina博客也收录了不少人人学生同学的文章,这些文章写的都不错。对于初级的Windows客户端用户来说,应该还是比较有用的。大家可以去看看。博客地址:http://blog.sina.com.cn/microsoftwindows7

 

养成良好的使用习惯,让电脑更好的工作

各位校内的童鞋,大家虎年大吉,虎虎生威!哈哈……

年前写了个日志《写给关注小七的同学们》旨在帮助同学们正确的理解一下电脑使用上出现的相关问题,并且希望能引导同学们更客观认识微软和微软的相关产品。没想到这个事情还得到了小七、小易和一些MVP朋友的支持clip_image001,我倍受鼓舞。今天希望再进一步的写点东西,希望对各位童鞋有更多的帮助。这个文章的主要初衷是唤醒大家的安全意识,并作为上篇文章的补充吧!clip_image002

1.关于IE崩溃问题。

很多童鞋都会遇到IE崩溃的问题,尤其是在Vista刚出来的时候对吧?造成失去响应或者崩溃的原因绝大部分都是IE插件。为什么,Vista刚出来的时候IE的问题最多呢?因为在Vista中微软引出了IE7,那个时候忽然的转换成IE7,很多公司的开发人员做插件都不能立即适应新的标准,就很容易出问题。再者就是IE7对插件的管理本身就不是很到位,我当年用Vista的时候,也是问题很多,后来升级到了IE8 for Vista就好了。然后我发现我原来装的插件都要重新安装,之后问题就少很多。这个也反映了微软也发现了相关的问题,并且做出了反应。

亲爱的童鞋,如果你用的是Vista及以上的系统,IE是7.0以上。那你的浏览器会很安全!大家可能还记得在XP的年代,很多人电脑的浏览器被挟持、绑架,然后很糟糕,可能要换个非IE核心的浏览器,或者重装系统!

不过现在,这种情况就很少了,我只指对于平台是Vista及以上的系统,IE是7.0以上计算机。自从Vista,微软弄了个UAC(用户账户控制),也就是那个干什么都要你点下确定,烦死人的东西clip_image004。这个东西引入了进程的权限这个东西,它有四个级别的权限:system(一般用于系统服务什么的)、high(就是点过UAC那个窗,提升权限后)、medium(用户正常情况)、low(IE专用),他们级别依次降低。用户修改系统,比如开控制面板都要UAC提升下。low权限还能干什么呢?哈哈……

看上面的图最下面的IE进程就是low,他就是实现我们平时看网页的进程。以前的恶意代码通过IE溜进来,然后执行,修改IE甚至系统。在Vista之后IE还有了传说的保护模式,这个东西我说下最有效的保护,他大概就是把用于IE的临时文件、收藏夹什么的都独立出来,他们全是low。现在的他们也没那权利做坏事了……所以我们也就安全多了!

说晚了安全性再说下不安全性,既然IE现在成low了,我们要做一些高级别才能做的事情怎么办呢?IE是用代理进程来实现滴……IEUser.exe和IEInstal.exe。从名字可以看出了,前者代理用户的操作(medium),比如保存什么东西之类。后者代理一些插件的安装(high级别),就是要安装插件是跳出那个框,问你要不要安装。这里也就是我说的不安全性,有很多人都不看清楚直接点安装,这就很可能把隐患装进来了。所以IE的不安全应该说很大程度上就是用户个人问题了clip_image005

这里给大家点建议,尽量少装插件、加载项和工具条。那些必须的,如:淘宝、支付宝、网上银行什么的要装的。其他的能少装就少装,多装就多分危险。还有即使是安装,也大公司的多信任点,小公司的少信任的,毕竟小公司的技术实力,成熟度都不如大公司。

万一发现IE不正常了,经常崩溃的话。在IE的“工具”---“加载项管理”中找和你经常崩溃所打开的网站有联系的插件,xxoo之。比如,你装了某视频网站的加速器,看那网站总是IE崩溃,你就可以怀疑插件了。如果不能确定,直接打开管理起,从小公司(低信任度)的往大公司(相对比较高信任度)的插件xxoo之,微软的绝对保留。不过这个也不是绝对的,测试版的软件往往是问题根源,那个是最低信任度。总的来说,这个是一种意识流的操作方法,不是十分可靠,但是也不会出什么茬子。

2.桌面失去响应问题。

很多同学都遇到过这个问题,不过在说这个问题之前,我来说一下另外一个问题:QQ的失去响应问题。在Vista刚出来的时候,大家应该都记得,QQ刚启动就会卡一下。后来随着新版本的推出,QQ也就修正了这一问题。其实这个就是刚开始的时候腾讯没适应新的API,所以程序跑起来会有一写问题。

同样的道理来说我们的桌面,其实Windows的桌面是explorer.exe。大家可以看上面的图,这个进程下面挂了很多其他进程。也就是说,他们他们里面的任何一个有问题,就可能使桌面失去响应。
这些个程序,有的是微软的,有的是厂商的驱动,有的是输入法,还有一些后台服务(Nokia手机的服务、youku的服务什么的)如果桌面有什么问题,就可以从他们进行调查,那些是应该有的,那些是必须的,那些是莫名其妙跑进来的。莫名其妙跑进来的就肯可能是原因所在。而他们是怎么进来的呢?很可能就是捆绑安装、或者通过IE安装。这里强烈要求大家,尽量精简你计算机里面的软件,我装QQ就是聊天,如果我喜欢听歌,我可以装个QQ音乐。但是什么QQ医生,我不需要它我就不选安装它,能不多装就不多装!

我上次就写到了:“其实大家想想,很多人电脑出问题后很容易想到一个解决的办法就是格盘重装。哈哈……为什么格盘重装后系统就快了?因为这个是新系统啊,为什么用时间长就出现不稳定,甚至出现一些大问题呢?因为装了不少软件哈。这样答案就明显了,很多影响系统稳定性的因素不是微软的系统不好,而是我们后来装的软件造成的!”

所以说,要想系统问题少,就要管理好后装的程序。而这个的关键就是用户的安全意识了,有强烈的安全意识,对软件慎重安装,就不容易系统悲剧。

3.什么是最好的杀毒软件?

计算机安全被很多用户强烈关注,杀毒软件作为最重要的保护伞,当然得到很高的关注。很多人都在讨论什么是最好的杀毒软件,还争的面红耳赤的……哈哈!

其实说到杀毒软件的保护,就要说到病毒什么的进入你计算机的途径了。IE是一个原来很重要的途径,现在的系统这个被保护的不错,需要自己限定,之前分析了。插件、恶意、流氓软件的捆绑安装,这个你自己也可以去阻止他们进入。还有一个就是U盘了……

杀毒软件最重要的任务就是把U盘看好了。U盘可以使用“控制面板”里的“自动播放选项”关闭,家庭版以上版本还可以用组策略关闭。这样不让病毒跑起来,然后杀毒软件查杀之就好了。然后杀U盘是杀毒软件最基本的功能了,所以说最好的杀毒软件就是你自己的安全意识了。clip_image002[1]有几款免费的杀毒软件都不错,比如Antivir(小红伞)个人版、MSE(微软的那个)。不过说实话,我觉得小红伞最好,就是他的更新服务器在国外,我们学校网络上的不爽,教育网的悲剧……看上面图,我目前就MSE……嘿嘿!

(应一些童鞋要求,加个avast! 来自捷克的很不错的免费杀软)

说了那么多就是希望帮助同学们形成一个强烈的安全意识,这个很重要,杀毒软件、防火墙弄的怎么怎么样,自己把病毒放进来……是不是很clip_image004[1]?有强烈的安全意识才是最重要的,哈哈!话说微软哥就是意识流的代表人物,几个软件他一猜就能知道那个是微软的产品,而且他没用过,因为名字有印象。大家鼓掌……clip_image002[2]

(PS:文中那个工具叫Process Explorer,大家可以找来玩玩。)

前言:去年年底,微软在人人网(www.renren.com)开设了Windows 7的宣传帐号Lucky 7。我作为一名大学生,也是人人网的深度用户,非常感谢微软对我们大学生这个群体的重视。当然,作为微软技术的爱好者,我也非常积极的参与进来,和小七(Lucky 7)一起去帮助其他的同学。我也写了一些文章以帮助同学们去了解Windows 7,并分享一些技巧。这些文章得到了Lucky 7和不少同学的肯定。应佘华煜弟弟的建议,在这里转出来,希望能帮助更多的用户。

这些文章也被小七的sina博客收录,小七的sina博客也收录了不少人人学生同学的文章,这些文章写的都不错。对于初级的Windows客户端用户来说,应该还是比较有用的。大家可以去看看。博客地址:http://blog.sina.com.cn/microsoftwindows7

 

写给关注小七的同学们

我和很多同学一样,也在关注Lucky 7(小七)的人人主页。这里非常感谢微软在人人网开了Lucky 7和微软小易这两个主页来帮助我们解决问题哈!这里先做个宣传。

Lucky 7:http://win7.renren.com/

微软小易:http://renren.com/profile.do?portal=&id=305219552

这里,如果说微软是开设了一个帮助同学们,与同学们互动的窗口。倒不如说是给我们许多同学提供了一个交流的平台哈!在Lucky 7和小易的主页,也出现了许多乐于助人的“活雷锋”同学。甚至还有不少同学还写了日志来帮助其他同学,相比而言,我就显得不思进取了……所以,经过反省,我也决定写点什么给关注小七的人,尤其是需要帮助的人。

如果你想获得帮助,请提供更多的信息。

我看很多同学都喜欢在小七的页面寻求帮助,这个非常的好。小七和许多热心同学都喜欢帮助困难同学。但是,我希望同学们能提供尽量多的信息。这样会让别人更容易的帮助你!这个就好比看病,医生要望、闻、问、切以手机病情信息。

这里举个例子,一个同学如果说,我的电脑win7下声卡驱动找不到。那想帮助他的人是不是要再去问机器品牌,型号等信息呢?如果他问:我是ASUS A8xxxxxx(x表示详细型号信息),我想找win7下声卡驱动。那么如果我想帮助它,我搜索下型号是不是就能立即找到声卡的厂家和信号?还有和他机器相同的同学是不是也能从中获取和提供帮助呢!

这里我列举一些我觉得很重要的信息:

硬件问题:电脑品牌、型号(尽量详细的子系列)、什么部件、需要匹配的操作系统,如果那些信息还不够解决问题,尝试提供硬件ID,在设备管理器中找到那个设备再取得。

软件问题:你目前的操作系统(最好精确到SP x)、问题软件的版本号,错误代码,问题出现是不是第一次,以前有正常工作的历史没,出问题前的关键操作:安装了什么软件、更新了什么驱动、替换了什么杀毒软件、打了什么SP x补丁包。

是不是提供了足够详细的信息问题就能解决?

当然不是了,这个可不是我说的哦,哈哈……这个是Mark Russinovich大神说的!

大家都知道微软有个微软哥,如果微软哥是个传说的话,Mark大神就是传奇了哈!(戏耍下微软哥,哈哈……)Mark大神是微软的技术院士,是windows内核和排错的权威哦。

其实很多时候,我们解决问题、排错必须依赖一些错误报告和工具。而一些报告的机制是当前被加载的程序块和当前的IP指针以定位错误的位置,这个机制也经常闹出把错误定位到ntdll.dll这个动态连接库的某个偏移上。ntdll可是windows用户态与内核态连接的口子哦!(可以看下面的windows构架图理解)它肯定是不能有问题的哈。

除了上面说的可能的定位错误,好有更搞笑的情况呢。就是你的程序出错了,可能你用不同的工具排错,得到的错误还不同哈。这使你根本无从下手!

出去上面说的情况,我觉得我们平时遇到问题的很多程序都不是微软的产品,这些软件的编写思路和代码,微软并不了解,如果让微软尝试解决这些问题,那微软也只能尽力而为了。解决此类问题更多的还要依赖于软件的供应商。

寻求最佳的解决方法。

我经常看见有些同学遇到一些问题,拿来讨论。这些问题真的很难解决,虽然思路是对的,但是却不起作用。讨论了半天,并出不了有效的解决方法。

我就觉得吧,对于这些复杂问题的最佳解决方法并不一定是死扣问题,一定要解决!我们不妨换个思路来解决,与其花很多时间去死钻这些难以解决的错误,不能去想法避开这些问题吗?我一个播放器A播放什么文件就会死掉,我不能换个其他的播放器B试试吗。电脑对于很多人来说是个工具,能用就好,方便最好。

关于兼容性问题。

我这里想分两块来说,分别是硬件的和软件的。

首先说下硬件的兼容性,我看到过有同学抱怨自己的电脑装vista就能装上,装xp就装不上之类的问题,然后还进行抱怨,满脑子的情绪。其实,心平气和的想想。微软的操作系统要跑在多少的硬件之上呢?你们想过么?嘿嘿……

我来给大家算算,我们用的电脑都是x86指令的PC。x86的厂家分为Intel和AMD还有VIA吧!再看Intel吧,他的构架又分为Netburst(老奔4)和现在Core2。Core2都出来不知道多少代了吧!还有单核、多核的,同样的处理器还搭配965系列,3系列,4系列的芯片组……简直无法统计哦!你有没有觉得一张Wndows的盘能装在那么多电脑上很神奇呢?微软能做到这样难道不值得佩服么。要知道,微软不像APPLE,他不卖自己的电脑。他的软件要跑在全球几千上万的电脑上哦。这个很不容易啊!这里并不是说苹果不好,只是乔布斯从来也没觉得他的公司是卖操作系统的,他也没认为他的MAC OS应该跑在PC上!两家公司的战略而已哈。

按照上面说的,有少部分老机器跑不了新系统,或者新机器跑不了老系统也是正常的哈。不过大家也不要为自己机器的硬件兼容性而烦恼。因为预装windows的机器上都会被贴个标签,那个标签就代表了所对应的系统通过兼容性测试了。所以如果是新买机器想安装Windows7,要特别注意哦。没有标签的机器,可以尽量解决这些问题,比如刷BIOS或者从驱动上入手,但是不能保证完全没问题。这个要平和对待……

不过竟然写了那么多,我就再罗嗦点了,我也觉得这个地方有必要罗嗦下,哈哈……

大家知道为什么Windows能跑在那么多硬件上面么?有没有考虑过这个问题?

这个是Windows的构架图哦,大家可以看看最下面的两层。其中HAL叫做硬件抽象层,从名字也可以看出他是对下层的硬件抽象的,他连接内核和硬件。还有就是HAL上面的内核了。这两个组件很重要的哦……Windows对硬件的广泛适应性就看他们了。

其实呢,微软在安装盘里,为我上面说的两个重要的组件准备了多个版本,让他们来适应多中不同的硬件,什么单核心、多核心,带和不带物理地址扩展的,到不带高级电源管理的等等。而这些组件的文件都是在安装系统的时候,安装程序去了解硬件的情况,然后决定到底选用哪个版本的文件。

我为什么要说那么多硬件和内核的匹配问题呢,因为很多同学都喜欢GHOST安装系统,我这里是要狠狠批判一下GHOST安装系统。GHOST的安装盘是怎么做出来的呢?找个装好系统的计算机,先去除被加载的驱动,删除临时文件。再把这个计算机的C盘抓成GHOST文件。GHOST系统的安装就是自动把这个GHOST的文件还原到被安装计算机的C盘。这样的安装,硬件抽象层和内核肯定不是完全匹配的。这样的系统虽然能跑,但是稳定性和性能难以保证哦。就好比F1大赛,舒马赫下雨天用干胎也能跑,但是,速度和抓地力得不到保证哦!

再说说软件的兼容性。

很多人都说windows vista不支持什么什么软件之类的话,其实这个就是一个表述上的失误哦。我们应该树立一个观点。不是系统兼容软件,而是软件兼容系统。系统是个平台、是个标准,应该是软件去适应系统。

假如说有1000个应用,有999个能跑,有一个不能跑,如果要求微软修改系统让那个应用能跑,估计很可能就是原来的999个不能跑了。所以,其实微软的成功也形成了一个标准,让大家根据这个标准来编写程序,这样会形成一个良好的秩序。

只要,按照微软的标准来开发程序或者修改程序,那么应该没有问题的。Windows每次的升级都是保证对之前的API兼容的,托管的程序只要RTL对头也没什么问题。就是有些需要涉及驱动的程序可能不怎么好兼容哦,还有就是新出来的UAC会造成点小麻烦。

稳定性问题。

很多同学都会说,自己电脑什么窗口总是死掉,IE总是死掉。然后就会说微软的系统怎么不好,总是有问题。

其实大家想想,很多人电脑出问题后很容易想到一个解决的办法就是格盘重装。哈哈……为什么格盘重装后系统就快了?因为这个是新系统啊,为什么用时间长就出现不稳定,甚至出现一些大问题呢?因为装了不少软件哈。这样答案就明显了,很多影响系统稳定性的因素不是微软的系统不好,而是我们后来装的软件造成的!

我的朋友都问我,为什么我的系统一般不怎么出问题,比较稳定。其实,我就是比较信任微软的软件,尽量用微软集成的软件,比如Windows Media Player,它支持的格式不够,我就装个解码器。对于IE,我是只装支付宝、网上银行这些非用不可的插件,其他尽量不装的。如果我觉得IE平凡问题了,我肯定打开插件管理器把没用的全删了。尽量用微软和一些大公司的软件,山寨软件容易出问题哦!

还有一点很重要,就是别用所谓的优化软件优化!一切优化软件都是纸老虎,哈哈……

其实,这个地球上没有比微软更了解Windows的了。因为微软是Windows的设计者!Windows的很多内存分配和进程调度优先级这些参数都是微软精心设计好的,一些软件所谓优化,有的就是在微软原先设计的几个参数里面切换,这个自己在“我的电脑”的“属性”里面的“性能”选项卡里就能调!还有些优化软件喜欢自己去做设定优化的,轻则不稳定,重则系统宕掉,很多人的系统问题就是自己优化出来的!

盗版问题。

这个问题比较敏感,也不是我应该说的问题。毕竟我们都是学生,正版对于我们不便宜。但是,我这里想说的是别用GHOST安装,这个前面强调了。还有就是即使你用盗版,也请你用微软提供的原版镜像安装了再破解!世面上的那些什么这个那个版本的安装介质,表面上里面装好了许多软件,你系统装好了里面就有很多装好的软件很省事,但是一些病毒、木马什么的可能也被人家早已安装进去了。这种人家帮你安装的软件,也会造成稳定性等等方面的影响。

正版和盗版的区别就是个license,但是微软提供的安装介质和不是微软的安装介质的区别可就大了哦!
有一些同学,用了来路不明的系统,然后有问题了,就来怪微软。微软半毛钱没赚到,还要用自己的声誉为那些黑户口的Windows买单。悲剧啊……

写在最后。

这里难得写了个文章,希望大家看了能有所收获,更重要的是能理解小七,做到小七说的讨论问题要平心静气哈!也希望大家在使用电脑和对待一些问题上更客观。

-----------------

PS:我与佘华煜同学共鸣啦!他的日志。嘿嘿……

今天还没有完全过完春节,这里给大家拜个晚年哈。祝大家新春快乐,虎虎生威。

这里给大家分享了个登陆安全的小技巧。说到登陆安全,就要说密码了。密码是Windows安全保护方面最常见,也是最有效的一种保护方法。对于密码的设置,很多安全专家都提出了不少建议,比如,别用生日、电话号码,密码长度,复杂度,经常修改密码等等。

一直以来,Windows都可以通过“密码策略”来对密码的设置强行要求,这些内容大致包括复杂度、最小长度、使用期限等。为了防止密码被穷举法破解,Windows还提供了“账户锁定策略”来锁定账户,该策略大概包括设置锁定时间、阈值等。

以上两大类策略都在 组策略编辑器(gpedit.msc)---本地计算机策略---计算机配置---Windows设置---安全设置---账户策略下。把上面的两大策略做好,就可以在很大程度上的提高账户的安全性。但是,你想不想知道,你的电脑被没被人家动过,密码有没有泄露呢?这个可不是传说中的意识流,这个是真的哦,下面给来介绍这个小技巧。

在Vista或者Windows7的 组策略编辑器(gpedit.msc)---本地计算机策略---计算机配置---管理模板---Windows组件---Windows登陆选项 的下面,有一个“在用户登陆期间显示有关以前登陆的信息”的设置,把它启用就可以了。其具体描述如下:

对于 Microsoft Windows Server 2008 功能级别域中的本地用户帐户和域用户帐户,如果启用此设置,将在该用户登录后出现一则消息,显示该用户上次成功登录的日期和时间、该用户名上次尝试登录而未成功的日期和时间,以及自该用户上次成功登录以来未成功登录的次数。用户必须确认该消息,然后才能登录到 Microsoft Windows 桌面。

对于 Windows Server 2003、Windows 2000 本机或 Windows 2000 混合功能级别域中的域用户帐户,如果启用此设置,将出现一则警告消息,显示 Windows 可能无法检索该信息,并且该用户将无法登录。因此,如果该域不属于 Windows Server 2008 域功能级别,则不应该启用此策略设置。

如果禁用或未配置此设置,则不会显示有关先前登录或登录失败的消息。

启用次配置后,就会在每次成功登陆以后显示如下图的信息(我为了方便截图,用的mstsc来登陆,那个账户设置的是英文语言,sorry)。

显示的信息包括两个方面:

1,上次成功的交互式登陆的时间,如果比你自己记忆里的时间推迟了,那么说明你的密码已经泄露了,而且已经被人家登陆过你的电脑。

2,不成功的交互式登陆的尝试时间和次数,这个信息如果不是你自己失误输错密码所留下的记录,就可能是有人觊觎你电脑里的信息哦。

这个设置是不是很有安全感?如果和前面说的两条传统的策略结合起来用,是不是更加安全呢?嘿嘿……存放重要数据的计算机,服务器都可以用这个加强安全。是不是很不错的小技巧呢。

(适用Vista及以上平台)

今天是元月2号,我在这里先给大家拜个晚年,大家新年好!

前几天,我一舍友的本子有爆掉的趋势。玩游戏像看漫画不说,连上网都卡,速度慢还经常no responding。他让我帮忙诊断一下。

打开他电脑的任务管理器看了一下,一个叫dwm.exe的进程始终保持在30%以上的cpu使用率,这个进程的描述是桌面窗口管理器,是windows的系统进程之一啊。不过看这个情况,问题应该就出在它身上了。个人猜测资源过高肯定是什么地方调用出问题了,所以想看看栈有没有问题。这个还是要用windbg的,但是我同学机器上没这个东西。不过还好他是vista sp2的系统。在任务管理器右击进程,然后点击“创建转储文件”就可以抓个dump文件了。

创建好的dump文件是c:\user\%username%\appdata\local\temp\filename.dmp这个文件,把这个copy到我的计算机,就可以用windbg来看个究竟了。

0:000> k
ChildEBP RetAddr 
000cf594 77085610 ntdll!KiFastSystemCallRet
000cf598 7719a5d7 ntdll!NtWaitForMultipleObjects+0xc
000cf634 75ed0f8d kernel32!WaitForMultipleObjectsEx+0x11d
000cf688 00f71adb user32!RealMsgWaitForMultipleObjectsEx+0x13c
000cf6b4 00f71a90 dwm!CDwmAppHost::WaitForAndProcessEvent+0x3a
000cf6e8 00f74caa dwm!CDwmAppHost::Run+0x6a
000cf6f8 00f7449d dwm!WinMain+0x46
000cf788 00f753a2 dwm!_initterm_e+0x1a1
000cf790 7719d0e9 dwm!_WinMainStartup+0x11
000cf79c 770619bb kernel32!BaseThreadInitThunk+0xe
000cf7dc 7706198e ntdll!__RtlUserThreadStart+0x23
000cf7f4 00000000 ntdll!_RtlUserThreadStart+0x1b

查看了下call stack,没发现什么异常,忽然有点不知所措了。不过一下子回忆到了上次被某公司面试的题目,我茅塞顿开了哈!

windows中一个进程包含了一个或者多个线程,在windows系统中,cpu分配和调度的最基本的单位是线程,而进程是内存分配的最小单位。这里可以把进程看成一个容器,一个装线程的容器。我忽然觉得,这个进程应该有不止一个线程,我可以再看其他的线程的call stack,这样应该会有什么发现。

怎么切换线程呢?使用~N s,就会切到第N个线程,这里的N从0开始计算到N-1。详细用法可以参阅张银奎大师的《软件调试》914-915页内容,再次膜拜下张大师哈。

0:000> ~1 s
eax=000000c0 ebx=00000002 ecx=08b43be0 edx=08b43be0 esi=00e8fb8c edi=00000000
eip=77085e74 esp=00e8fb1c ebp=00e8fbb8 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!KiFastSystemCallRet:
77085e74 c3              ret
0:001> k
ChildEBP RetAddr 
00e8fb18 77085610 ntdll!KiFastSystemCallRet
00e8fb1c 7719a5d7 ntdll!NtWaitForMultipleObjects+0xc
00e8fbb8 7719a6f0 kernel32!WaitForMultipleObjectsEx+0x11d
00e8fbd4 6f9d2da9 kernel32!WaitForMultipleObjects+0x18
00e8fcfc 6f9d2cfe milcore!CMilChannel::WaitForNextMessage+0xac
00e8fd1c 707b14a7 milcore!MilComposition_WaitForNextMessage+0x5d
00e8fd8c 707b1447 dwmredir!CMilWindowManager::WaitForMultipleObjects+0xa1
00e8fda0 00f714c2 dwmredir!DwmRedirectionManagerWaitForMultipleObjects+0x14
00e8fdbc 00f71692 dwm!CSessionPort::WaitForMultipleObjects+0x1b
00e8fde4 00f75015 dwm!CPortBase::PortThreadInternal+0x42
00e8fdf0 7719d0e9 dwm!CPortBase::PortThread+0xe
00e8fdfc 770619bb kernel32!BaseThreadInitThunk+0xe
00e8fe3c 7706198e ntdll!__RtlUserThreadStart+0x23
00e8fe54 00000000 ntdll!_RtlUserThreadStart+0x1b

如上,切到1这个线程再看call stack,就和0的时候不一样了。按下Alt+9可以调出view选项卡中的processes and threads窗口,在这个窗口里显示了详细的线程情况。

如果每次用命令切换线程再查看call stack的话会比较麻烦。按下Alt+6调出view选项卡中的call stack窗口可以直接查看栈,而且在processes and threads中用鼠标点击切换线程后call stack也会相应刷新。

0:001> ~6 s
eax=041c7f94 ebx=03e21854 ecx=00000000 edx=00000000 esi=00000000 edi=00000000
eip=77085e74 esp=07c9fd98 ebp=07c9fe08 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!KiFastSystemCallRet:
77085e74 c3              ret
0:006> k
ChildEBP RetAddr 
07c9fd94 77085620 ntdll!KiFastSystemCallRet
07c9fd98 77199884 ntdll!NtWaitForSingleObject+0xc
07c9fe08 771997f2 kernel32!WaitForSingleObjectEx+0xbe
07c9fe1c 10259a78 kernel32!WaitForSingleObject+0x12
WARNING: Stack unwind information not available. Following frames may be wrong.
07c9fe34 102599aa nvd3dum!QueryOglResource+0x4a5d8
07c9fe3c 1034e369 nvd3dum!QueryOglResource+0x4a50a
00000000 00000000 nvd3dum!NvDiagUmdCommand+0xc02a9

0:006> lmvm nvd3dum
start    end        module name
10000000 105a1000   nvd3dum    (export symbols)       nvd3dum.dll
    Loaded symbol image file: nvd3dum.dll
    Image path: C:\Windows\System32\nvd3dum.dll
    Image name: nvd3dum.dll
    Timestamp:        Mon Jun 09 23:33:51 2008 (484D4D5F)
    CheckSum:         005A3375
    ImageSize:        005A1000
    File version:     7.15.11.7597
    Product version:  7.15.11.7597
    File flags:       8 (Mask 3F) Private
    File OS:          40004 NT Win32
    File type:        3.4 Driver
    File date:        00000000.00000000
    Translations:     0409.04e4
    CompanyName:      NVIDIA Corporation
    ProductName:      NVIDIA Windows Vista WDDM driver
    InternalName:     NVD3DUM
    OriginalFilename: NVD3DUM.DLL
    ProductVersion:   7.15.11.7597
    FileVersion:      7.15.11.7597
    FileDescription:  NVIDIA Compatible Vista WDDM D3D Driver, Version 175.97
    LegalCopyright:   (C) NVIDIA Corporation. All rights reserved.

把线程都看了一遍,有2-3个线程都显示nvd3dum有问题,我就那第7个线程分析了。根据经验nv开头的什么3d的很可能是nvidia的显示驱动,用windbg查看下也证实了它的出身。

0:000> !lmi nvd3dum
Loaded Module Info: [nvd3dum]
         Module: nvd3dum
   Base Address: 10000000
     Image Name: nvd3dum.dll
   Machine Type: 332 (I386)
     Time Stamp: 484d4d5f Mon Jun 09 23:33:51 2008
           Size: 5a1000
       CheckSum: 5a3375
Characteristics: 210e 
Debug Data Dirs: Type  Size     VA  Pointer
             CODEVIEW    58, 3a0b54,  3a0b54 RSDS - GUID: {9752768E-07BE-4747-B2A2-CD39E8F210FF}
               Age: 1, Pdb: d:\bld\r173_00\drivers\ddraw\_out\winlh_x86_release\nvd3dum.pdb
    Symbol Type: DEFERRED - No error - symbol load deferred
    Load Report: no symbols loaded

查看块信息,发现这个块的基址竟然是Base Address: 10000000,其他用lm查看到的加载到dwm的块基址都是在0x7XXXXXXXh的用户态高地址空间的,她的基址竟然在比较低的地址空间,还是那么工整的数字(0x10000000h),我这里就比较困惑了。为了进一步发现什么,我决定和我自己正常的电脑对比一下。

我在我自己的正常电脑上用process exporer搜索了下nvd3dum这个dll,发现它并没有被dwm.exe调用,而且他被加载的地址也不是0x10000000h这么巧合的整数地址。我把自己电脑的dwm.exe给dump出来,再用windbg查了下,也没有加载nvd3dum这个dll。

果然,应该说这个nvidia的驱动应该是不请自来的,而且就是它搞的桌面窗口管理器异常。

再回到前面提及的某公司面试的问题,interviewer问我关于栈的问题,然后问到栈是线程还是进程。我当时一懵,直接就没觉得这两样东西有联系。

栈在程序中一般用于函数调用,它传递返回值、参数,存放局部变量等。而线程和进程是任务调度、内存分配方面的概念。当时可以说我就没明白考官的问题意图,战战兢兢的,就答了个不会= =!但是现在明白了,而且是深刻的明白了。

最近看了本写c和汇编的书,感觉每当看本书都会有新的收获。那写书上也讲到很多栈的用法,感觉受益匪浅啊!而且现在觉得栈真是无处不在,还有intel的开发手册上写到,CPU在ring0-3之间切换也要用到栈,而且每个环都有个栈。其实cpu就那么多点寄存器,处理那么多任务,寄存器状态、相关指针都要做现场保护,所以我现在就觉得,但凡要做cpu调度的都离不开栈了。呵呵……

最后还是祝朋友们新年新气象,2010更美好!

上次返校时,由于赶火车,走的急急忙忙。笔记本包放在板凳上没放稳,结果自由落体了。好在有电脑包护体,本子没坏,但是电脑启动不了了。

当时的情况是,windows7在开机出现logo后就不动了,再开启后就是自动修复。但是,自动修复也是很长时间没反应。这个就很让人担心了,硬盘估计有问题了,最糟糕的情况就是数据全丢。我顿时深感焦急啊!我硬盘里非常多的资料,什么webcast、平时的作业,技术文档。“几十年”的发展成果很可能就一夜回到解放前了。

不过,我当时也没有乱了阵脚,因为对于我和我那台本子而言,这样的情况已经是第二次了。嘿嘿……所以在这里希望把相关经验和教训分享出来,希望对大家有所帮助。

首先,说下上次的情况。上次的情况和这次差不多,原因都是赶火车,然后看时间差不多了,直接按电源5秒钟关机的。由于是强制关机,硬盘磁头没归位,在火车上一阵颠簸,估计磁头磕盘片上面去了。

由于温彻斯特硬盘特殊的物理结构,所以硬盘也是最容易损坏的部件了。温彻斯特硬盘中,磁头和磁盘之间的距离非常的近,磁头是靠盘片告诉旋转产生的热气流托起的。而且他们运转是之间的距离只有头发的n分之1(0.1~0.3μm)。当硬盘停止的时候,几乎可以看成磁头就放在盘片上,这是被颠簸后果很严重哦。自从上次的教训之后,我坚决不玩按电源强行关机了。(虽然以前也知道要规范操作,但是人就是这样,总要点教训才能学乖哈。)希望有这种坏习惯的朋友能及时改正。

现在回到这次事故的处理来,现在的情况是操作系统正常进不去,死在开机logo画面了。只能尝试安全模式能不能启动了,安全模式的开机画面列举了正在加载的驱动,在其中一个驱动的地方停止了。这下就明白了,硬盘摔出问题了,有驱动文件读不出来,所以windows7启动不了了。看到这一幕心里好受很多,系统起不来的话,其他文件还能尽量救回来,不至于数据全部丢光了!淡定……

接下来我就考虑进一步怎么办了,所以要想办法了解硬盘的健康状况如何,系统有没有办法恢复(虽然重装系统不会造成太大损失,但是毕竟麻烦)。所以我请出了一款很经典的硬盘工具MHDD,这是一款DOS下的磁盘工具,我用的是MHDD 4.6的iso版,然后刻成光盘,然后用这个光盘引导的启动。

启动之后选定目标硬盘就可以对硬盘扫描,我就是选的默认参数扫描、修复的。当然,扫描开始前可以配置扫描的。

start LBA 填入你硬盘坏道的起始扇区 end LBA 填入你硬盘坏道结束扇区

Remap 表示是否开启修复功能(坏扇区重新影射)。

Timeout 为超时时间,一盘是默认。

LOOP/TEST REPAIR 设置表示是否开启反复擦写,可以修复玩固环道。

ERASE 为擦写选项,会破坏数据。所以有数据的硬盘千万别选,不然就会悲剧了。

设置完成,按F4开始修理了。

按照我的经验,不是很严重的错误默认设置就能解决。而且这样最安全,不会破坏数据。

扫描时,软件会对硬盘逐块扫描,并进行统计归类,汇总在右边。这样可以一览整个硬盘的健康状况,而且如果有坏道也会显示在右下角。可以根据实际情况决定是否更换硬盘和转移数据。

顶行右半部是扫描状况:AMNF 地址标记出错,T0NF 0磁道没找到,ABRT 指令被中止,IDNF 扇区标志出错,UNCR 校验错误,又称ECC错误,BBK 坏块标记错误。

我就是按照默认的参数扫描的,扫描过后windows7就能正常进入了,所以默认扫描也有一定的修复功能的。我觉得现在的存储成本已经很低了,这个软件最大的用处就是查看硬盘的健康和性能了。如果有坏道就立刻转移数据吧,毕竟硬盘有价、数据无价。转移数据不及时而丢数据就很后悔了!当然,如果默认参数扫描过还是不能进系统,也可以开启Remap再尝试一下。

我很幸运的是两次事故,都是进不了系统,然后用这个默认扫描后都能正常进入了。不过不同的是第一次事故由于磁头没归位,磕出了坏道。第二次没有坏道,但是硬盘性能和我才买来时比下降了很多。由于我硬盘快不够用了,我还是决定买个大硬盘,把数据倒过去,原来的硬盘改个移动硬盘,再把数据备份一遍,这样会比较保险。

至于导硬盘数据,我用的是Ghost的disk to disk功能,两次都是这样操作的。即使坏道盘也顺利把数据导过去了,系统都没重装。这个也是我最骄傲的地方,呵呵。

注意:

1.MHDD是DOS下的软件,ACHI的硬盘必须调整成IDE模式使用,BIOS不支持调整的就只能拆到其他机器上测试了……

2.这个不支持从盘,只支持主盘。

3.数据抢救不一定都成功,我只是分享心得也不能保证以上方法一定成功。有什么严重后果我只能深表遗憾呵!

映射网络拓扑是windows vista开始加入的一个小功能。

它位于网络和共享中心的右上方,如上图。而且可以单击上图红框所示的位置映射更详细的拓扑。

他可以显示当前计算机的联网状态,就像计算机状态栏的那个网络状态的图标。不过,他的重要性远不止这些,很多其他的功能都要依赖它,比如windows 7中的家庭组。

家庭组是windows 7中的一项新功能,可以在家庭网络中方便的共享文件和打印机。我就非常喜欢这个功能,但是在加入家庭组的时候我却遇到了麻烦。

首先,show下家里的网络环境,三台电脑都是windows 7 RTM,而且在一个LAN里面。

我在台式机orpheus-530上创建了一个家庭组,然后让其他两台笔记本加入这个家庭组,但是却不能正常加入。

情况如上图,我在orpheus-PC这个本子上截取的,它发现了orpheus-530建立的家庭组(上图上面红框)。密码也确保是对的,因为我是在orpheus-PC上mstsc到orpheus-530上直接把密码copy过来的,检查IP地址也没有问题,都在192.168.1.0/24这个网段。

不过还好windows 7的诊断工具做的不错,我点了上图下面红框的位置启动了诊断工具。

诊断的结果说是多重网络导致的,我就开始怀疑VMware了,我装了vmware workstation,装了这个东西会产生2个虚拟网卡。我disable了那2个网卡,再次尝试加入家庭组。结果还是和上面一样……

我换了笔记本创建家庭组,让台式机加,情况还是这样的。还尝试了重启家庭组相关的服务,仍然没用!这样弄都不行,忽然不知道从何入手了。盲目尝试了一天,直接就没连上。最后冷静下来想想,盆盆老大批评我的,他说我总是浮躁,排错应该把可能的错误慢慢分析出来,列出来,再排查。我列了一些可能的原因,在总结上面的尝试所排除的情况,猜想了一个可能性。就是台式机是有线连接路由器,笔记本是无线的,他们的物理层和数据链路层肯定有所不同,是不是这个造成的原因呢?我该如何验证我的猜想呢?

这里我就想到了映射网络拓扑这个功能。

依照上面的网络环境,在orpheus-PC上生成的网络拓扑。orpheus-PC和han-T61在上面的拓扑里面,而且用虚线连接路由器了,orpheus-530直接就没被映射进来。这个也许就是不能加入家庭组的原因吧。

为了验证上面的结论,我找了根网线,把orpheus-PC这个笔记本用网线连上路由器。再次映射了网络拓扑,orpheus-PC这次和orpheus-530被映射到一起了(有线连接是实线,无线是虚线),han-T61这时被扔出拓扑之外了。

这时我再在orpheus-PC上加入家庭组,就瞬间OK了。正如盆盆老大教我的那样,良好的排错习惯和思路很重要啊。

从这个实验可以看出,家庭组的发现是依赖网络层的,但是加入的过程必须依赖数据链路层。所以,这个在无线和有线环境中就出现问题了。用常规的方法都找不出问题所在,甚至windows 7的诊断工具也无能为力。但是,映射网络拓扑这个功能却给我们释疑了。

再举个相关的例子,我以前写过《windows 7对ad hoc无线共享网络的改进》这个文章,里面提到windows 7建立ad hoc之后会问你是否要共享Internet。这里也要在网络拓扑探测到Internet时才会这么问,如果没有探测到Internet,windows 7就直接建立个ad hoc,而不共享Internet。如果你已经连如Internet,而拓扑没探测到的话,又想做上述共享操作怎么办呢?把网线拔了再重插,这样系统会刷新拓扑,然后再做操作即可。

昨天是个历史性的日子,windows 7正式全球发布了,从此正式进入了win7时代。可喜可贺啊~~~

从8月win7发布rtm以来,我就一直用着win7的英文版,之所以用英文版是因为前面考mcitp,微软英文资料看习惯了,反而对中文汉化不习惯了哈。从rtm到现在大约两个月的时间里,我用的中文版软件几乎都能完美的跑在英文版win7下,只有我经常和宿舍人休闲的《魔兽争霸3》中文版游戏玩不了。

这里并不是要以游戏为讨论焦点,而是讨论其为何不支持中文、破除限制方法以及相关原理。希望大家不要误会哈!

我从同学那里copy过来《魔兽争霸3》中文版,这个游戏经过国内游戏论坛的补丁修改,是可以直接运行的(就是不需要安装)。我在英文版windows7里运行《魔兽争霸3》中文版,游戏玩不了,并且给出“此版本魔兽争霸III需要特定语言版本之windows”,然后就自动推出了。难道我就必须去找个中文语言包,或者是装个英文版本的游戏?

我去网上搜索了相关的资料,除了找一堆软件、换key这些很麻烦的方法,我找了2种很容易的方法。

方法一:

1.备份注册表!绝对要备份注册表!
2.Start -> Run, 输入 regedit, 按 Ok
3.HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\Language\
4.在右边找InstallLanguage,应该是最后的一个,把数值改成0804。(英文版原是0409)
5.重新启动

方法二:

在魔兽安装目录找到game.dll文件,用UltraEdit 打开,然后查找3D0408000074串,将第一个结果中的74改为EB保存。然后就可以运行了。

原理分析:

上面第一种方法,直接就是修改注册表么,欺骗系统,让系统认为自己是英文版。这种方法修改貌似会造成系统问题呢,比如update更新有很多补丁是区分语言的,欺骗系统可能造成我英文系统补了中文补丁,然后会产生什么后果就很难说了。这种为了一个游戏,修改操作系统的方法相当不可行,完全是削足适履。我与其这样还不如直接装个win7的中文补丁包。

方法二,我倒是觉得是个不错的方法,只修改游戏文件,改爆了顶多删除游戏存放的文件夹,不玩呗。不过,我更感兴趣的是它为什么这样改就可以,它的原理是什么,所以我决定研究一下,把其中的原理弄清楚。

首先,我大略观察了一下那个字串,就产生了联想哈。3D0408000074,看其中的04080000和方法一里面的区域数值0804,是不是很眼熟?AI32汇编里面,数据存储是每8位一组,低位先于高位的哈。0804存储就应该是0408,然后因为AI32的数据长度是32位,最高位补0,16位16个0就应该是16进制0x0000,这4个0对应放在0408后面就是04080000了。

在AI32汇编的分支结构中,一般都先是cmp或者test(比较命令),这些指令影响FR(标志寄存器),然后后面紧跟条件转跳指令。显然,上面的04080000应该是一个32位操作数,所以我就猜想3D是比较指令、74是转跳指令了。

当然,光猜想是不行的,我们必须去验证一下。我这里没有用方法二里面提到的UltraEdit,因为UltraEdit只能修改,不能反汇编。要看其原理,当然要反汇编,所以我用了C32ASM这个反汇编工具。

用这个软件打开game.dll,然后选择十六进制显示方式,查找到3D0408000074,并右击鼠标、选择“对应汇编模式编辑”就可以看到代码的汇编指令了:

果然,3D这个指令是将操作数(04080000)和EAX寄存器比较,接下来的几行(000076F8-0000770B)分别是EAX和0804、1004、0C04比较,如果相等则跳到0000771A。0804是简体中文的区域代码(中文 - 中华人民共和国),那么1004、0C04又是什么呢?这里我查了一下:1004是中文 - 新加坡,0C04是中文 - 中华人民共和国香港特别行政区。

EAX就很明显的是存放了操作系统的区域代码了,这个区域代码也许是通过GetSystemDefaultLangID(void)函数获得并赋给EAX的吧,应该就是方法一里面的那个注册表值。

这段代码的意思就是,如果地区是中文 - 中华人民共和国、中文 - 新加坡或中文 - 中华人民共和国香港特别行政区,就转跳到0000771A,程序继续往下运行(74是JE命令,表示cmp比较的两个操作数相等就转跳,不相等就执行下一条指令,74后面的1B、14、0D是转跳距离。)。如果不是这三个区域,程序到了00007711就会call到其他位置,而这里call转到的地方应该就是那个“此版本魔兽争霸III需要特定语言版本之windows”的提示,并结束程序了吧。这段代码是在游戏程序里故意限制简体中文版只能在上述三个语言版本的windows系统上运行,这个可能和blizzard的语言与版本发行策略有关吧。

方法二中,为什么把74改成EB呢?我修改了一下,然后再反汇编看看是什么哈。

74改成EB后,JE对应的成了JMP(无条件跳转命令),就不考虑比较结果了,程序直接跳过去(00007711处)执行了哈。这样改不管什么语言版本的windows都能运行了……

为了验证结论的正确性,我又做了个实验,不改74为EB,而是把操作数从04080000改成09040000:

程序在000076F8处判断EAX是否为0409(英文),如果是则转跳到00007711处执行(游戏运行),这样正好配合了我的英文操作系统,照此修改的文件反而不能运行在中文windows上了,修改成功!嘿嘿~~~

这里捣鼓了半天,觉得汇编语言还是很猛的哈,如果有原程序,修改原程序固然简单,对于已经编译且没原文件的程序,只能用汇编了哈!对汇编了了解和敏感,在做小修改或者破解时可能有意想不到的作用呢,但是汇编程序往往很难读,即使有修改思路,运气的成分貌似也很多呢。分享一下我的一些理解和思路给大家,希望对大家有所启发!

家里升级到了windows7,其他都还好。就是老爸总是抱怨,说是家里windows7和单位的XP在office里显示的字体都不一样,给办公带来很多不便。我还真不信,堂堂windows 7连兼容的字体还能没xp多。

我在XP的虚拟机里面装了个office 2003,再和我windows 7里面的office 2007打开同一文档对比一下。

悲剧了,还真不一样。我看了下XP里office 2003里面的正文字体是仿宋_GB2312。windows 7里office 2007里面所选的正文显示的是一样的字体。神气,难道windows 7里面的仿宋_GB2312被整容的更“帅”了?

我决定一探究竟。打开C:\Windows\Fonts,找了半天,里面大多数都是非中文的字体,中文的就几个,而且真就没找到仿宋_GB2312。这下心里基本就有数了。

打开XP,把C:\Windows\Fonts里面那些中文字体复制到windows 7的C:\Windows\Fonts。

怎么样?左右现实的字体是不是一样了?

office文档虽然记录了字体,但是显示还要字体文件支持。windows 7下面还真的没有很多XP下的字体,所以虽然显示正文是仿宋_GB2312,但是却是拿其他字体来代替显示的。把XP里相关的中文字体文件(在C:\Windows\Fonts下)复制到windows7的C:\Windows\Fonts下,windows7就能找到相关字体文件正常显示了。(vista没试验过,但是估计也行。)

更多内容 下一页 »