本發(fā)明涉及計算機驅動技術領域,尤其涉及一種修復驅動程序的方法、裝置及電子設備。
背景技術:
隨著互聯網技術的發(fā)展,病毒、木馬等惡意程序技術層出不窮,應用程序,例如,金山毒霸,也需相應地實現技術上的更新。金山毒霸在使用過程中,可能會被競爭軟件或者惡意軟件攔截、破壞。其中一種破壞場景為,當系統進程在加載金山毒霸驅動程序的時候,會被競爭軟件或惡意軟件強制加上退出指令,以修改驅動程序的驅動入口,導致驅動程序被競爭軟件或惡意軟件破壞,以至于驅動程序無法正常使用,從而,使得金山毒霸的各種防御功能失效,這樣,競爭軟件或惡意軟件就可以破壞金山毒霸及系統中的其他文件、注冊表等數據。
現有技術中的驅動程序修復方案是針對驅動程序的注冊表數據被刪除,通過修復驅動程序加載時所需的注冊表數據,重新加載驅動程序讓應用程序的驅動程序生效,該驅動程序的修復方案不適用于在應用程序的驅動程序在加載時被強制加上退出指令,導致應用程序的驅動程序無法正常工作的場景。
技術實現要素:
有鑒于此,本發(fā)明實施例提供一種修復驅動程序的方法、裝置及電子設備,以解決現有的驅動程序修復方案無法修復驅動入口被修改的驅動程序的問題。
第一方面,本發(fā)明實施例提供一種修復驅動程序的方法,包括:
啟動待修復驅動程序對應的驅動修復程序;
通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改;
若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。
結合第一方面,在第一方面的第一種實施方式中,所述啟動待修復驅動程序對應的驅動修復程序之前,包括:
安裝所述待修復驅動程序對應的驅動修復程序。
結合第一方面的第一種實施方式,在第一方面的第二種實施方式中,所述安裝所述待修復驅動程序對應的驅動修復程序,包括:
查詢預先保存的驅動修復程序配置文件中的配置信息是否處于可啟用狀態(tài),其中,所述驅動修復程序配置文件中預設有一條或多條配置信息,每條配置信息包括:所述驅動修復程序的文件名、所述驅動修復程序安裝到注冊表上的驅動服務鍵名及表示當前條配置信息是否可啟用的啟用標志;
若當前條配置信息處于可啟用狀態(tài),則提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名;
獲取所述驅動修復程序文件名指定的文件進行安裝的同時,將提取的所述驅動服務鍵名寫入注冊表。
結合第一方面的第二種實施方式,在第一方面的第三種實施方式中,所述驅動修復程序配置文件的文件格式為可擴展標記語言(Extensible Markup Language,英文縮寫為xml)格式;
所述提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名,包括:
使用xml公共類解析所述驅動修復程序配置文件中的配置信息;
提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名。
結合第一方面,在第一方面的第四種實施方式中,所述啟動待修復驅動程序對應的驅動修復程序包括:
以啟動服務的方式啟動所述待修復驅動程序對應的驅動修復程序。
結合第一方面,在第一方面的第五種實現方式中,所述通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改包括:
通過所述驅動修復程序檢測所述待修復驅動程序是否能打開;
若不能打開,則判斷是否能獲取到所述待修復驅動程序的驅動入口函數;
若能獲取到所述待修復驅動程序的驅動入口函數,則確定所述待修復驅動程序的驅動入口被修改。
結合第一方面的第五種實施方式,在第一方面的第六種實現方式中,所述獲取到所述待修復驅動程序的驅動入口函數包括:
獲取指向所述待修復驅動程序的驅動對象指針;
依據獲取到的所述驅動對象指針,獲取所述待修復驅動程序的驅動入口函數。
結合第一方面的第五種實施方式,在第一方面的第七種實施方式中,所述方法還包括:
若所述待修復驅動程序不能打開,且無法獲取到所述待修復驅動程序的驅動入口函數,則主動創(chuàng)建所述待修復驅動程序的注冊表啟動項,重新加載所述待修復驅動程序。
結合第一方面的第七種實施方式,在第一方面的第八種實施方式中,所述創(chuàng)建所述待修復驅動程序的注冊表啟動項包括:
創(chuàng)建所述待修復驅動程序的安裝路徑;
創(chuàng)建所述待修復驅動程序的啟動類型。
第二方面,本發(fā)明實施例提供一種修復驅動程序的裝置,包括:
啟動模塊,用于啟動待修復驅動程序對應的驅動修復程序;
檢測模塊,用于通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改;
修復模塊,用于若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。
結合第二方面,在第二方面的第一種實施方式中,所述系統還包括:
安裝模塊,用于安裝所述待修復驅動程序對應的驅動修復程序。
結合第二方面的第一種實施方式,在第二方面的第二種實施方式中,所述安裝模塊包括:
查詢子模塊,用于查詢預先保存的驅動修復程序配置文件中的配置信息是否處于可啟用狀態(tài),其中,所述驅動修復程序配置文件中預設有一條或多條配置信息,每條配置信息包括:所述驅動修復程序的文件名、所述驅動修復程序安裝到注冊表上的驅動服務鍵名及表示當前條配置信息是否可啟用的啟用標志;
提取子模塊,用于若當前條配置信息處于可啟用狀態(tài),則提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名;
安裝子模塊,用于獲取所述驅動修復程序文件名指定的文件進行安裝的同時,將提取的所述驅動服務鍵名寫入注冊表。
結合第二方面的第二種實施方式,在第二方面的第三種實施方式中,所述驅動修復程序配置文件的文件格式為xml格式;
所述提取子模塊包括:
解析單元,用于使用xml公共類解析所述驅動修復程序配置文件中的配置信息;
提取單元,用于提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名。
結合第二方面,在第二方面的第四種實施方式中,所述啟動模塊,具體用于以啟動服務的方式啟動所述待修復驅動程序對應的驅動修復程序。
結合第二方面,在第二方面的第五種實施方式中,所述檢測模塊包括:
檢測子模塊,用于通過所述驅動修復程序檢測所述待修復驅動程序是否能打開;
判斷子模塊,用于當所述待修復驅動程序不能打開時,則判斷是否能獲取到所述待修復驅動程序的驅動入口函數;
確定子模塊,用于當能獲取到所述待修復驅動程序的驅動入口函數時,則確定所述待修復驅動程序的驅動入口被修改。
結合第二方面的第五種實施方式,在第二方面的第六種實施方式中,所述檢測模塊還包括:獲取子模塊;所述獲取子模塊包括:
第一獲取單元,用于獲取指向所述待修復驅動程序的驅動對象指針;
第二獲取單元,用于依據獲取到的所述驅動對象指針,獲取所述待修復驅動程序的驅動入口函數。
結合第二方面的第五種實施方式,在第二方面的第七種實施方式中,所述裝置還包括:創(chuàng)建模塊;
所述創(chuàng)建模塊,用于當所述待修復驅動程序不能打開,且無法獲取到所述待修復驅動程序的驅動入口函數時,則主動創(chuàng)建所述待修復驅動程序的注冊表啟動項,重新加載所述待修復驅動程序。
結合第二方面的第七種實施方式,在第二方面的第八種實施方式中,所述創(chuàng)建模塊包括:
第一創(chuàng)建子模塊,用于創(chuàng)建所述待修復驅動程序的安裝路徑;
第二創(chuàng)建子模塊,用于創(chuàng)建所述待修復驅動程序的啟動類型。
第三方面,本發(fā)明實施例提供一種電子設備,所述電子設備包括:殼體、處理器、存儲器、電路板和電源電路,其中,電路板安置在殼體圍成的空間內部,處理器和存儲器設置在電路板上;電源電路,用于為上述電子設備的各個電路或器件供電;存儲器用于存儲可執(zhí)行程序代碼;處理器通過讀取存儲器中存儲的可執(zhí)行程序代碼來運行與可執(zhí)行程序代碼對應的程序,用于執(zhí)行前述任一所述的修復驅動程序的方法。
本發(fā)明實施例提供的一種修復驅動程序的方法、裝置及電子設備,通過啟動待修復驅動程序對應的驅動修復程序;并通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改;若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。這樣,通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數,避免通過系統進程加載驅動程序時,被競爭軟件或惡意軟件修改驅動程序的驅動入口,從而解決現有的驅動程序修復方案無法修復驅動入口被修改的驅動程序的問題。
附圖說明
為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其它的附圖。
圖1為本發(fā)明的實施例修復驅動程序的方法流程示意圖;
圖2為本發(fā)明的實施例修復驅動程序的方法具體流程示意圖;
圖3為本發(fā)明的實施例修復驅動程序的裝置結構示意圖;
圖4為本發(fā)明電子設備一個實施例的結構示意圖。
具體實施方式
下面結合附圖對本發(fā)明實施例進行詳細描述。
應當明確,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
圖1為本發(fā)明的實施例修復驅動程序的方法流程示意圖,如圖1所示,本實施例的方法可以包括:
步驟101、啟動待修復驅動程序對應的驅動修復程序。
本實施例中,所述待修復驅動程序以金山毒霸的驅動程序為例,當然也可以是其他應用程序的驅動程序,在此不作限定。在啟動金山毒霸的驅動程序對應的驅動修復程序之前,需安裝金山毒霸驅動程序對應的驅動修復程序。
本實施例中,作為一可選實施例,所述啟動待修復驅動程序對應的驅動修復程序之前,包括:
安裝所述待修復驅動程序對應的驅動修復程序。
本實施例中,安裝金山毒霸驅動程序對應的驅動修復程序之后,可以通過系統中的StartService函數啟動所述驅動修復程序。
本發(fā)明實施例中,作為一可選實施例,所述啟動待修復驅動程序對應的驅動修復程序包括:
以啟動服務的方式啟動所述待修復驅動程序對應的驅動修復程序。
步驟102、通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改。
本實施例中,由于金山毒霸的驅動程序是被競爭軟件或惡意軟件修改了驅動入口,強加上退出指令,讓金山毒霸的驅動程序失效的,所以所述驅動修復程序先判斷金山毒霸的驅動程序是否工作正常,具體的,可以調用CreateFile函數打開kisknl(金山毒霸驅動程序的名稱),看是否可以打開成功,打開成功說明金山毒霸的驅動程序正常,打開失敗,說明金山毒霸的驅動程序已失效,若金山毒霸的驅動程序已失效,則繼續(xù)判斷是否能獲取到金山毒霸驅動程序的驅動入口函數。
本實施例中,由于金山毒霸的驅動程序是被競爭軟件或惡意軟件修改了驅動入口數據,但未刪除金山毒霸驅動程序的注冊表的啟動項數據,所以注冊表無需修復,接著,嘗試獲取金山毒霸驅動程序的驅動入口函數,如果可以獲取到金山毒霸驅動程序的驅動入口函數,則說明金山毒霸的驅動程序已經被加載,但是,驅動入口被修改了。
本實施例中,作為一可選實施例,所述通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改包括:
通過所述驅動修復程序檢測所述待修復驅動程序是否能打開;
若不能打開,則判斷是否能獲取到所述待修復驅動程序的驅動入口函數;
若能獲取到所述待修復驅動程序的驅動入口函數,則確定所述待修復驅動程序的驅動入口被修改。
本實施例中,獲取金山毒霸驅動程序的驅動入口函數,具體的,可以調用函數ObReferenceObiectByName獲取到指向kisknl的驅動對象指針,由指向kisknl的驅動對象指針可定位到kisknl的DriverInit(驅動入口函數)。
本實施例中,作為又一可選實施例,所述獲取到所述待修復驅動程序的驅動入口函數包括:
獲取指向所述待修復驅動程序的驅動對象指針;
依據獲取到的所述驅動對象指針,獲取所述待修復驅動程序的驅動入口函數。
步驟103、若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。
本實施例中,為了更好的理解本實施例,需對正常的驅動程序加載流程進行說明:
在正常情況下,由系統進程加載金山毒霸的驅動程序并調用金山毒霸驅動程序的驅動入口函數,在系統進程加載金山毒霸驅動程序時,競爭軟件或惡意軟件會修改金山毒霸驅動程序的驅動入口(例如,加上退出指令),也就是說,驅動入口的修改是發(fā)生在每一次加載驅動程序的時候,且是以系統進程的方式加載驅動程序的時候,被修改的是內存數據,當再次加載驅動程序時,加載到內存中的驅動入口是全新的數據,被修改的驅動入口是上一次被加載的驅動入口。
本實施例中,通過驅動修復程序去直接主動地調用(不通過系統進程)金山毒霸驅動程序的驅動入口函數,使得金山毒霸驅動程序的驅動入口再次被調用,由于此時,不通過系統進程加載金山毒霸驅動程序,競爭軟件或惡意軟件就無法修改金山毒霸驅動程序的驅動入口,也就無法在金山毒霸驅動程序的驅動入口函數里寫入退出指令,從而可以達到修復金山毒霸驅動程序的目的,對維護系統安全有積極意義。
本實施例提供的一種修復驅動程序的方法,通過啟動待修復驅動程序對應的驅動修復程序;并通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改;若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。這樣,通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數,避免通過系統進程加載驅動程序時,被競爭軟件或惡意軟件修改驅動程序的驅動入口,從而解決現有的驅動程序修復方案無法修復驅動入口被修改的驅動程序的問題。
本實施例中,如果金山毒霸驅動程序不能被成功打開,且不能獲取到金山毒霸驅動程序的驅動入口函數,即說明,金山毒霸的驅動程序并不是被修改了驅動入口,所以不能執(zhí)行步驟103修復金山毒霸驅動程序,則需主動創(chuàng)建金山毒霸驅動程序的注冊表啟動項,然后調用對應的內核函數,例如,ZwLoadDriver重新加載金山毒霸的驅動程序,以達到修復金山毒霸驅動程序的目的。
本實施例中,作為一可選實施例,所述方法還包括:
若所述待修復驅動程序不能打開,且無法獲取到所述待修復驅動程序的驅動入口函數,則主動創(chuàng)建所述待修復驅動程序的注冊表啟動項,重新加載所述待修復驅動程序。
本實施例中,作為又一可選實施例,所述創(chuàng)建所述待修復驅動程序的注冊表啟動項包括:
創(chuàng)建所述待修復驅動程序的安裝路徑;
創(chuàng)建所述待修復驅動程序的啟動類型。
本實施例中,所述啟動類型至少可以包括:按需啟動、BOOT類型啟動中的一種或多種,本實施例不作限定。
圖2為本發(fā)明實施例修復驅動程序的方法具體流程示意圖,如圖2所示,本實施例的方法可以包括:
步驟201、查詢預先保存的驅動修復程序配置文件中的配置信息是否處于可啟用狀態(tài),其中,所述驅動修復程序配置文件中預設有一條或多條配置信息,每條配置信息包括:所述驅動修復程序的文件名、所述驅動修復程序安裝到注冊表上的驅動服務鍵名及表示當前條配置信息是否可啟用的啟用標志。
本實施例中,例如,所述驅動修復程序配置文件的內容如下:
在所述驅動修復程序配置文件中,name用于記錄驅動修復程序的文件名,regname用于記錄所述驅動修復程序安裝到注冊表上的驅動服務鍵名,enable用于表示當前條配置信息是否可啟用的啟用標志,所述驅動修復程序的name、regname、enable是可配置的,將所述驅動修復程序的name、regname、enable配置在配置文件中,當通過所述驅動修復程序修復驅動程序時,不易被競爭軟件或惡意軟件發(fā)現或刪除,即使被發(fā)現,也可快速更新配置文件中的信息,例如,更新regname信息,從而使得所述驅動修復程序長期有效。
本實施例中,在實際使用過程中,可以根據實際情況,擴展或修改所述驅動修復程序配置文件中的配置項,能夠提高驅動修復程序相關信息的靈活性。
本實施例中,第一條配置信息中的fixkisknldriverinitial.sys為用于修復金山毒霸驅動程序的驅動入口被修改的驅動修復程序的文件名,fixkisknldriverinitial.sys加載到注冊表的鍵名是abc,且此條配置信息處于可啟用狀態(tài)。第二條配置信息中的fixkisknlstart.sys為用于修復金山毒霸驅動程序的注冊表啟動項被修改的驅動修復程序的文件名,fixkisknlstart.sys加載到注冊表的鍵名是astart,且此條配置信息處于不可啟用狀態(tài)。
步驟202、若當前條配置信息處于可啟用狀態(tài),則提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名。
本實施例中,查詢預先保存的驅動修復程序配置文件中的配置信息,第一條配置信息處于可啟用狀態(tài),提取第一條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名。
本實施例中,作為一可選實施例,所述驅動修復程序配置文件的文件格式為xml格式;
所述提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名,包括:
使用xml公共類解析所述驅動修復程序配置文件中的配置信息;
提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名。
步驟203、獲取所述驅動修復程序文件名指定的文件進行安裝的同時,將提取的所述驅動服務鍵名寫入注冊表。
本實施例中,所述驅動修復程序文件名指定的文件是保存在指定的目錄下,例如,“系統盤:\Windows\System32\drivers”目錄下,在安裝時,到“系統盤:\Windows\System32\drivers”目錄下,獲取第一條配置信息中的驅動修復程序文件名指定的文件(fixkisknldriverinitial.sys)進行安裝,同時將提取的所述驅動服務鍵名“abc”寫入注冊表。
本實施例中,當需要對“系統盤:\Windows\System32\drivers”目錄下的fixkisknldriverinitial.sys進行更新時,新的fixkisknldriverinitial.sys文件會替換原始的fixkisknldriverinitial.sys文件。
步驟204、啟動待修復驅動程序對應的驅動修復程序。
本實施例中,步驟204的過程和上述方法實施例的步驟101類似,此處不再贅述。
步驟205、通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改。
本實施例中,步驟205的過程和上述方法實施例的步驟102類似,此處不再贅述。
步驟206、若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。
本實施例中,步驟206的過程和上述方法實施例的步驟103類似,此處不再贅述。
本發(fā)明實施例提供的一種修復驅動程序的方法、裝置及電子設備,通過啟動待修復驅動程序對應的驅動修復程序;并通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改;若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。這樣,通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數,避免通過系統進程加載驅動程序時,被競爭軟件或惡意軟件修改驅動程序的驅動入口,從而解決現有的驅動程序修復方案無法修復驅動入口被修改的驅動程序的問題,且所述驅動修復程序的文件名、安裝到注冊表上的驅動服務鍵名是可配置,不易被競爭軟件或惡意軟件發(fā)現或刪除,即使被發(fā)現,也可快速更新配置信息,從而使得所述驅動修復程序長期有效。
圖3為本發(fā)明修復驅動程序的裝置的結構示意圖,如圖3所示,本實施例的裝置可以包括:啟動模塊11、檢測模塊12和修復模塊13,其中,
所述啟動模塊11,用于啟動待修復驅動程序對應的驅動修復程序。
本實施例中,所述待修復驅動程序以金山毒霸的驅動程序為例,當然也可以是其他應用程序的驅動程序,在此不作限定。在啟動金山毒霸的驅動程序對應的驅動修復程序之前,需安裝金山毒霸驅動程序對應的驅動修復程序。
本實施例中,作為一可選實施例,所述系統還包括:安裝模塊;
所述安裝模塊,用于安裝所述待修復驅動程序對應的驅動修復程序。
本實施例中,安裝金山毒霸驅動程序對應的驅動修復程序之后,可以通過系統中的StartService函數啟動所述驅動修復程序。
本發(fā)明實施例中,作為一可選實施例,所述啟動模塊11,具體用于以啟動服務的方式啟動所述待修復驅動程序對應的驅動修復程序。
本發(fā)明實施例中,作為一可選實施例,所述安裝模塊包括:查詢子模塊、提取子模塊及安裝子模塊;
所述查詢子模塊,用于查詢預先保存的驅動修復程序配置文件中的配置信息是否處于可啟用狀態(tài),其中,所述驅動修復程序配置文件中預設有一條或多條配置信息,每條配置信息包括:所述驅動修復程序的文件名、所述驅動修復程序安裝到注冊表上的驅動服務鍵名及表示當前條配置信息是否可啟用的啟用標志。
本實施例中,例如,所述驅動修復程序配置文件的內容如下:
在所述驅動修復程序配置文件中,name用于記錄驅動修復程序的文件名,regname用于記錄所述驅動修復程序安裝到注冊表上的驅動服務鍵名,enable用于表示當前條配置信息是否可啟用的啟用標志,所述驅動修復程序的name、regname、enable是可配置的,將所述驅動修復程序的name、regname、enable配置在配置文件中,當通過所述驅動修復程序修復驅動程序時,不易被競爭軟件或惡意軟件發(fā)現或刪除,即使被發(fā)現,也可快速更新配置文件中的信息,例如,更新regname信息,從而使得所述驅動修復程序長期有效。
本實施例中,在實際使用過程中,可以根據實際情況,擴展或修改所述驅動修復程序配置文件中的配置項,能夠提高驅動修復程序相關信息的靈活性。
本實施例中,第一條配置信息中的fixkisknldriverinitial.sys為用于修復金山毒霸驅動程序的驅動入口被修改的驅動修復程序的文件名,fixkisknldriverinitial.sys加載到注冊表的鍵名是abc,且此條配置信息處于可啟用狀態(tài)。第二條配置信息中的fixkisknlstart.sys為用于修復金山毒霸驅動程序的注冊表啟動項被修改的驅動修復程序的文件名,fixkisknlstart.sys加載到注冊表的鍵名是astart,且此條配置信息處于不可啟用狀態(tài)。
所述提取子模塊,用于若當前條配置信息處于可啟用狀態(tài),則提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名。
本實施例中,查詢預先保存的驅動修復程序配置文件中的配置信息,第一條配置信息處于可啟用狀態(tài),提取第一條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名。
本實施例中,作為一可選實施例,所述驅動修復程序配置文件的文件格式為xml格式;
所述提取子模塊包括:
解析單元,用于使用xml公共類解析所述驅動修復程序配置文件中的配置信息;
提取單元,用于提取當前條配置信息中的驅動修復程序的文件名及所述驅動修復程序安裝到注冊表上的驅動服務鍵名。
所述安裝子模塊,用于獲取所述驅動修復程序文件名指定的文件進行安裝的同時,將提取的所述驅動服務鍵名寫入注冊表。
本實施例中,所述驅動修復程序文件名指定的文件是保存在指定的目錄下,例如,“系統盤:\Windows\System32\drivers”目錄下,在安裝時,到“系統盤:\Windows\System32\drivers”目錄下,獲取第一條配置信息中的驅動修復程序文件名指定的文件(fixkisknldriverinitial.sys)進行安裝,同時將提取的所述驅動服務鍵名“abc”寫入注冊表。
本實施例中,當需要對“系統盤:\Windows\System32\drivers”目錄下的fixkisknldriverinitial.sys進行更新時,新的fixkisknldriverinitial.sys文件會替換原始的fixkisknldriverinitial.sys文件。
所述檢測模塊12,用于通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改。
本實施例中,由于金山毒霸的驅動程序是被競爭軟件或惡意軟件修改了驅動入口,強加上退出指令,讓金山毒霸的驅動程序失效的,所以所述驅動修復程序先判斷金山毒霸的驅動程序是否工作正常,具體的,可以調用CreateFile函數打開kisknl(金山毒霸驅動程序的名稱),看是否可以打開成功,打開成功說明金山毒霸的驅動程序正常,打開失敗,說明金山毒霸的驅動程序已失效,若金山毒霸的驅動程序已失效,則繼續(xù)判斷是否能獲取到金山毒霸驅動程序的驅動入口函數。
本實施例中,由于金山毒霸的驅動程序是被競爭軟件或惡意軟件修改了驅動入口數據,但未刪除金山毒霸驅動程序的注冊表的啟動項數據,所以注冊表無需修復,接著,嘗試獲取金山毒霸驅動程序的驅動入口函數,如果可以獲取到金山毒霸驅動程序的驅動入口函數,則說明金山毒霸的驅動程序已經被加載,但是,驅動入口被修改了。
本實施例中,作為一可選實施例,所述檢測模塊12包括:檢測子模塊、判斷子模塊及確定子模塊;
所述檢測子模塊,用于通過所述驅動修復程序檢測所述待修復驅動程序是否能打開。
所述判斷子模塊,用于當所述待修復驅動程序不能打開時,則判斷是否能獲取到所述待修復驅動程序的驅動入口函數。
所述確定子模塊,用于當能獲取到所述待修復驅動程序的驅動入口函數時,則確定所述待修復驅動程序的驅動入口被修改。
本實施例中,獲取金山毒霸驅動程序的驅動入口函數,具體的,可以調用函數ObReferenceObiectByName獲取到指向kisknl的驅動對象指針,由指向kisknl的驅動對象指針可定位到kisknl的DriverInit(驅動入口函數)。
本實施例中,作為又一可選實施例,所述檢測模塊12還包括:獲取子模塊;所述獲取子模塊包括:
第一獲取單元,用于獲取指向所述待修復驅動程序的驅動對象指針;
第二獲取單元,用于依據獲取到的所述驅動對象指針,獲取所述待修復驅動程序的驅動入口函數。
修復模塊13,用于若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。
本實施例中,為了更好的理解本實施例,需對正常的驅動程序加載流程進行說明:
在正常情況下,由系統進程加載金山毒霸的驅動程序并調用金山毒霸驅動程序的驅動入口函數,在系統進程加載金山毒霸驅動程序時,競爭軟件或惡意軟件會修改金山毒霸驅動程序的驅動入口(例如,加上退出指令),也就是說,驅動入口的修改是發(fā)生在每一次加載驅動程序的時候,且是以系統進程的方式加載驅動程序的時候,被修改的是內存數據,當再次加載驅動程序時,加載到內存中的驅動入口是全新的數據,被修改的驅動入口是上一次被加載的驅動入口。
本實施例中,通過驅動修復程序去直接主動地調用(不通過系統進程)金山毒霸驅動程序的驅動入口函數,使得金山毒霸驅動程序的驅動入口再次被調用,由于此時,不通過系統進程加載金山毒霸驅動程序,競爭軟件或惡意軟件就無法修改金山毒霸驅動程序的驅動入口,也就無法在金山毒霸驅動程序的驅動入口函數里寫入退出指令,從而可以達到修復金山毒霸驅動程序的目的,對維護系統安全有積極意義。
本實施例提供的一種修復驅動程序的裝置,通過啟動待修復驅動程序對應的驅動修復程序;并通過所述驅動修復程序檢測所述待修復驅動程序的驅動入口是否被修改;若檢測到所述待修復驅動程序的驅動入口被修改,則通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數。這樣,通過所述驅動修復程序主動調用所述待修復驅動程序的驅動入口函數,避免通過系統進程加載驅動程序時,被競爭軟件或惡意軟件修改驅動程序的驅動入口,從而解決現有的驅動程序修復方案無法修復驅動入口被修改的驅動程序的問題。
本實施例中,如果金山毒霸驅動程序不能被成功打開,且不能獲取到金山毒霸驅動程序的驅動入口函數,即說明,金山毒霸的驅動程序并不是被修改了驅動入口,所以不能通過修復模塊13修復金山毒霸驅動程序,則需主動創(chuàng)建金山毒霸驅動程序的注冊表啟動項,然后調用對應的內核函數,例如,ZwLoadDriver重新加載金山毒霸的驅動程序,以達到修復金山毒霸驅動程序的目的。
本實施例中,作為又一可選實施例,所述裝置還包括:創(chuàng)建模塊;
所述創(chuàng)建模塊,用于當所述待修復驅動程序不能打開,且無法獲取到所述待修復驅動程序的驅動入口函數時,則主動創(chuàng)建所述待修復驅動程序的注冊表啟動項,重新加載所述待修復驅動程序。
本實施例中,作為又一可選實施例,所述創(chuàng)建模塊包括:
第一創(chuàng)建子模塊,用于創(chuàng)建所述待修復驅動程序的安裝路徑;
第二創(chuàng)建子模塊,用于創(chuàng)建所述待修復驅動程序的啟動類型。
本實施例中,所述啟動類型至少可以包括:按需啟動、BOOT類型啟動中的一種或多種,本實施例不作限定。
需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
本說明書中的各個實施例均采用相關的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。
尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認為是用于實現邏輯功能的可執(zhí)行指令的定序列表,可以具體實現在任何計算機可讀介質中,以供指令執(zhí)行系統、裝置或設備(如基于計算機的系統、包括處理器的系統或其他可以從指令執(zhí)行系統、裝置或設備取指令并執(zhí)行指令的系統)使用,或結合這些指令執(zhí)行系統、裝置或設備而使用。就本說明書而言,”計算機可讀介質”可以是任何可以包含、存儲、通信、傳播或傳輸程序以供指令執(zhí)行系統、裝置或設備或結合這些指令執(zhí)行系統、裝置或設備而使用的裝置。計算機可讀介質的更具體的示例(非窮盡性列表)包括以下:具有一個或多個布線的電連接部(電子裝置),便攜式計算機盤盒(磁裝置),隨機存取存儲器(RAM),只讀存儲器(ROM),可擦除可編輯只讀存儲器(EPROM或閃速存儲器),光纖裝置,以及便攜式光盤只讀存儲器(CDROM)。另外,計算機可讀介質甚至可以是可在其上打印所述程序的紙或其他合適的介質,因為可以例如通過對紙或其他介質進行光學掃描,接著進行編輯、解譯或必要時以其他合適方式進行處理來以電子方式獲得所述程序,然后將其存儲在計算機存儲器中。
應當理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實現。
在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統執(zhí)行的軟件或固件來實現。例如,如果用硬件來實現,和在另一實施方式中一樣,可用本領域公知的下列技術中的任一項或他們的組合來實現:具有用于對數據信號實現邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現場可編程門陣列(FPGA)等。
本發(fā)明實施例還提供一種電子設備。圖4為本發(fā)明電子設備一個實施例的結構示意圖,可以實現本發(fā)明圖1或2所示實施例的流程,如圖4所示,上述電子設備可以包括:殼體41、處理器42、存儲器43、電路板44和電源電路45,其中,電路板44安置在殼體41圍成的空間內部,處理器42和存儲器43設置在電路板44上;電源電路45,用于為上述電子設備的各個電路或器件供電;存儲器43用于存儲可執(zhí)行程序代碼;處理器42通過讀取存儲器43中存儲的可執(zhí)行程序代碼來運行與可執(zhí)行程序代碼對應的程序,用于執(zhí)行前述任一實施例所述的修復驅動程序的方法。
處理器42對上述步驟的具體執(zhí)行過程以及處理器42通過運行可執(zhí)行程序代碼來進一步執(zhí)行的步驟,可以參見本發(fā)明圖1-3所示實施例的描述,在此不再贅述。
該電子設備以多種形式存在,包括但不限于:
(1)移動通信設備:這類設備的特點是具備移動通信功能,并且以提供話音、數據通信為主要目標。這類終端包括:智能手機(例如iPhone)、多媒體手機、功能性手機,以及低端手機等。
(2)超移動個人計算機設備:這類設備屬于個人計算機的范疇,有計算和處理功能,一般也具備移動上網特性。這類終端包括:PDA、MID和UMPC設備等,例如iPad。
(3)便攜式娛樂設備:這類設備可以顯示和播放多媒體內容。該類設備包括:音頻、視頻播放器(例如iPod),掌上游戲機,電子書,以及智能玩具和便攜式車載導航設備。
(4)服務器:提供計算服務的設備,服務器的構成包括處理器、硬盤、內存、系統總線等,服務器和通用的計算機架構類似,但是由于需要提供高可靠的服務,因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴展性、可管理性等方面要求較高。
(5)其他具有數據交互功能的電子設備。
本技術領域的普通技術人員可以理解實現上述實施例方法攜帶的全部或部分步驟是可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,該程序在執(zhí)行時,包括方法實施例的步驟之一或其組合。
為了描述的方便,描述以上裝置是以功能分為各種單元/模塊分別描述。當然,在實施本發(fā)明時可以把各單元/模塊的功能在同一個或多個軟件和/或硬件中實現。
通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品可以存儲在存儲介質中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random Access Memory,RAM)等。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應以權利要求的保護范圍為準。