今天遇到一個(gè)非常奇怪的問(wèn)題,有臺(tái)裝XP的電腦,插上USB鍵盤沒(méi)反應(yīng),還以為是鍵盤壞了,又找來(lái)兩個(gè)不同型號(hào)的鍵盤,依然不行,又以為是USB接口壞了,結(jié)果在電腦啟動(dòng)的時(shí)候又可以按F2進(jìn)入BIOS,這樣就只有一個(gè)原因,Windows的驅(qū)動(dòng)沒(méi)裝上了。
幸好這電腦還有傳統(tǒng)的PS/2口,而且插上就能識(shí)別,否則連Windows都進(jìn)不去,因?yàn)榘碈trl+Alt+Del沒(méi)反應(yīng)。
進(jìn)去之后提示安裝USB鍵盤驅(qū)動(dòng),到最后一步提示安裝失敗,原因是拒絕訪問(wèn)。
上網(wǎng)搜了一下,安裝驅(qū)動(dòng)拒絕訪問(wèn)的其中一個(gè)原因是注冊(cè)表有個(gè)鍵的權(quán)限設(shè)置有問(wèn)題,改過(guò)來(lái)即可,但是我打開(kāi)注冊(cè)表,連那個(gè)鍵都沒(méi)找到,不是這個(gè)原因。
不過(guò)從這個(gè)解決方案中也知道了驅(qū)動(dòng)安裝的日志是在Windows目錄下的setupapi.log文件里面,于是打開(kāi)那個(gè)文件,發(fā)現(xiàn)每次安裝都有兩個(gè)拒絕訪問(wèn)的錯(cuò)誤,但并沒(méi)有說(shuō)是注冊(cè)表拒絕訪問(wèn),在拒絕訪問(wèn)之前,還提到一個(gè)叫MlCoInst.dll的文件沒(méi)有簽名。
上網(wǎng)搜MlCoInst.dll,沒(méi)有找到任何結(jié)果,在System32目錄下找到它,看屬性,果然沒(méi)有簽名,是個(gè)三無(wú)文件,不知道為什么每次安裝驅(qū)動(dòng)都要調(diào)用它。
日志里面還提到了“共同安裝程序”,似乎和CoInst有點(diǎn)關(guān)聯(lián),于是又查了一下,原來(lái)安裝驅(qū)動(dòng)的時(shí)候可以通過(guò)調(diào)用“共同安裝程序”來(lái)實(shí)現(xiàn)某些目的,例如修改驅(qū)動(dòng)程序的簽名狀態(tài),欺騙操作系統(tǒng),這樣就可以只安裝一次驅(qū)動(dòng)即可,不用每次插入都安裝一次。
于是嘗試把MlCoInst.dll刪除,提示刪除失敗。
在注冊(cè)表里面搜索MlCoInst.dll,把所有找到的鍵值都刪除,再次插拔鍵盤,順利安裝完畢,刪除MlCoInst.dll,也成功了,果然是它的問(wèn)題。
這個(gè)應(yīng)該是某個(gè)USB設(shè)備的驅(qū)動(dòng)引進(jìn)來(lái)的,而且修改了usb.inf,每次安裝任何USB設(shè)備都要調(diào)用它,但它可能與Windows的簽名機(jī)制有沖突,所以導(dǎo)致安裝失敗,真是坑爹!