程序有英語 簡體中文 兩種語言,根據(jù)操作系統(tǒng)環(huán)境來選擇language.
代碼下載:http://bilaopao.download.csdn.net/
開發(fā)工具:VS 2008

修復(fù)過程分【普通修復(fù)】和【強(qiáng)力修復(fù)】。
XP和VISTA/WIN7下的修復(fù)操作還是有很多區(qū)別的。但基于的原理是一樣的。 并且因?yàn)閂ista/Win7下的Smart Card 服務(wù)的scardsvr.exe可執(zhí)行文件被更改為scardsvr.dll,也就沒有了scardsvr的相關(guān)安裝命令。我用dependency查看了下scardsvr.dll,只能看到一個(gè)入口函數(shù)。能力有限,google了一些資料也沒有結(jié)果。就沒分析下去了。
【普通修復(fù)】的修復(fù)過程(以XP下的修復(fù)過程講述,vista/win7下操作請(qǐng)看代碼):
(1)檢查"智能卡服務(wù)"是否為自啟動(dòng)。并設(shè)置其為自啟動(dòng)。
(2)檢測(cè)服務(wù)當(dāng)前狀態(tài)是否為SERVICE_RUNNING,并設(shè)置其狀態(tài)為運(yùn)行中。
(3)檢測(cè)前兩步是否成功,如果成功則向用戶彈出messagebox詢問moveable device功能是否正常。
(4)如果功能仍abnormal,則初步判斷是服務(wù)登陸賬戶為非"NT AUTHORITY\LocalService" ,則用CreateProcess來運(yùn)行 sc.exe config SCardSvr obj= \"NT AUTHORITY\LocalService" password= "" ,改變其用戶為localservice(smart card service只有在此登陸賬戶下才正常運(yùn)行)。
(5)如果在普通修復(fù)過程中遇到服務(wù)查詢不到等error時(shí),程序自動(dòng)啟動(dòng)強(qiáng)力修復(fù)來安裝smart card service.
注意:普通修復(fù)中的第3,4步中有點(diǎn)問題,在這個(gè)地方其實(shí)最好是直接檢查服務(wù)的登陸賬戶。然后做出相應(yīng)的動(dòng)作,但是我這個(gè)地方?jīng)]有想到實(shí)現(xiàn)的辦法。望前輩提示。另外就是sc的命令格式有嚴(yán)格的限制,編碼的時(shí)候要注意等號(hào)后面首先是空格。我當(dāng)時(shí)被這個(gè)空格困擾到了。
【強(qiáng)力修復(fù)】的修復(fù)過程(XP下的修復(fù),vista/win7 下沒有強(qiáng)力修復(fù))
其實(shí)強(qiáng)力修復(fù)的過程就是網(wǎng)上流傳的那個(gè)修復(fù)過程,我只不過在這個(gè)修復(fù)過程中增加了驗(yàn)證和配置修改。
修復(fù)過程:
(1)ScardSvr.exe reinstall
(2)regsvr32.exe SCardssp.dll
(3)sc.exe config SCardSvr obj= \"NT AUTHORITY\LocalService" password= ""
(4)通過以上三步之后,剩下的配置修改就跟普通修復(fù)過程一樣了。而以上三步通過CreateProcess和WaitForSingleObject來配合控制。
應(yīng)該差不多了。代碼是半個(gè)月前寫的,一些地方可能有疏漏。
在代碼實(shí)現(xiàn)中還有很多地方需要注意,我也都在代碼中做出了注釋。可自行查看。
如需交流,可mailto:pencil@yeah.net MSN:pencil@yeah.net