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

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