Pencil.C++

更新速度可能会晚于http://blog.csdn.net/bilaopao

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 0 文章 :: 40 评论 :: 0 Trackbacks

程序有英语 简体中文 两种语言,根据操作系统环境来选择language.
      代码下载:http://bilaopao.download.csdn.net/
      开发工具:VS 2008

 修复过程分【普通修复】和【强力修复】。
   XP和VISTA/WIN7下的修复操作还是有很多区别的。但基于的原理是一样的。 并且因为Vista/Win7下的Smart Card 服务的scardsvr.exe可执行文件被更改为scardsvr.dll,也就没有了scardsvr的相关安装命令。我用dependency查看了下scardsvr.dll,只能看到一个入口函数。能力有限,google了一些资料也没有结果。就没分析下去了。

   【普通修复】的修复过程(以XP下的修复过程讲述,vista/win7下操作请看代码):
(1)检查"智能卡服务"是否为自启动。并设置其为自启动。
(2)检测服务当前状态是否为SERVICE_RUNNING,并设置其状态为运行中。
(3)检测前两步是否成功,如果成功则向用户弹出messagebox询问moveable device功能是否正常。
(4)如果功能仍abnormal,则初步判断是服务登陆账户为非"NT AUTHORITY\LocalService" ,则用CreateProcess来运行 sc.exe config SCardSvr obj= \"NT AUTHORITY\LocalService" password= ""    ,改变其用户为localservice(smart card service只有在此登陆账户下才正常运行)。

(5)如果在普通修复过程中遇到服务查询不到等error时,程序自动启动强力修复来安装smart card service.

注意:普通修复中的第3,4步中有点问题,在这个地方其实最好是直接检查服务的登陆账户。然后做出相应的动作,但是我这个地方没有想到实现的办法。望前辈提示。另外就是sc的命令格式有严格的限制,编码的时候要注意等号后面首先是空格。我当时被这个空格困扰到了。

    【强力修复】的修复过程(XP下的修复,vista/win7 下没有强力修复)
其实强力修复的过程就是网上流传的那个修复过程,我只不过在这个修复过程中增加了验证和配置修改。
修复过程:
(1)ScardSvr.exe reinstall
(2)regsvr32.exe SCardssp.dll
(3)sc.exe config SCardSvr obj= \"NT AUTHORITY\LocalService" password= ""
(4)通过以上三步之后,剩下的配置修改就跟普通修复过程一样了。而以上三步通过CreateProcess和WaitForSingleObject来配合控制。

应该差不多了。代码是半个月前写的,一些地方可能有疏漏。
在代码实现中还有很多地方需要注意,我也都在代码中做出了注释。可自行查看。

如需交流,可mailto:pencil@yeah.net  MSN:pencil@yeah.net

 

posted on 2009-12-07 20:40 Pencil.C++ 阅读(1650) 评论(0)  编辑 收藏 引用 所属分类: VC

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理