專利名稱:一種自動配置設(shè)備驅(qū)動程序的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及設(shè)備驅(qū)動程序配置技術(shù),特別涉及一種自動配置設(shè)備驅(qū)動程序的方法。
背景技術(shù):
在學(xué)校機(jī)房或網(wǎng)吧等公共場所,往往部署著數(shù)量龐大的有盤或無盤工作站。并且,這些工作站通常都具有USB插口,用以連接為其配備的USB設(shè)備(例如鍵盤、鼠標(biāo)等)。
·
當(dāng)USB設(shè)備首次連接至工作站的USB插口時,工作站運(yùn)行的Windows操作系統(tǒng)會識別該USB設(shè)備、并安裝該USB設(shè)備的驅(qū)動程序。但是,由于Windows操作系統(tǒng)自身設(shè)計的原因,當(dāng)某臺工作站的USB設(shè)備從該工作站的一個USB插口換插至該工作站的另一個USB插口時,該工作站的Windows操作系統(tǒng)會再次識別該USB設(shè)備、并再次安裝該USB設(shè)備的驅(qū)動程序。此外,由于有盤和無盤的工作站均有重啟還原的特性,因此工作站的Windows操作系統(tǒng)在每次重啟后均會重新識別該USB設(shè)備、并重新安裝該USB設(shè)備的驅(qū)動程序。如上可見,只要是更換過USB設(shè)備在工作站的USB插口,無論工作站是否經(jīng)過重啟,都會導(dǎo)致Windows操作系統(tǒng)重新對USB設(shè)備進(jìn)行識別以及驅(qū)動程序安裝。這種識別和安裝過程通常需要花費(fèi)數(shù)秒甚至數(shù)十秒的時間,并且USB設(shè)備在識別和安裝完成之前無法使用。為了避免該問題,現(xiàn)有技術(shù)往往是在有盤工作站進(jìn)行母盤復(fù)刻、或在無盤工作站進(jìn)行鏡像上傳之前,對使用的每一種USB設(shè)備均在工作站的所有USB插口上逐一進(jìn)行識別和安裝。這顯然是件耗時耗力并且流程繁瑣的工作??梢姡瑢τ趽碛写罅抗ぷ髡镜臋C(jī)構(gòu)或營業(yè)場所來說,上述問題都會明顯增加系統(tǒng)
部署的工作量。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種配置過程快、對用戶無干擾、配置結(jié)果即時生效的自動配置設(shè)備驅(qū)動程序的方法。該方法包括步驟請求操作系統(tǒng)在發(fā)生注冊表訪問操作時發(fā)出注冊表訪問操作通知,并在接收所述操作系統(tǒng)發(fā)出的注冊表訪問操作通知后執(zhí)行如下步驟a、判斷所述注冊表訪問操作通知所包含的操作是否屬于設(shè)備驅(qū)動程序配置活動;b、當(dāng)所述注冊表訪問操作通知所包含的操作是屬于設(shè)備驅(qū)動程序配置活動時,從所述注冊表訪問操作通知中獲取當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑;C、檢查注冊表在所述設(shè)備實(shí)例路徑下是否已經(jīng)存在配置信息;d、當(dāng)注冊表在所述設(shè)備實(shí)例路徑下尚未存在配置信息時,檢查注冊表中是否存在可套用的同類型設(shè)備的配置信息;e、當(dāng)注冊表中存在可套用的同類型設(shè)備的配置信息時,將注冊表中同類型設(shè)備的配置信息套用至所述待進(jìn)行驅(qū)動程序配置的設(shè)備。優(yōu)選地,所述請求操作系統(tǒng)在發(fā)生注冊表訪問操作時發(fā)出注冊表訪問操作通知的步驟包括通過調(diào)用操作系統(tǒng)的內(nèi)核系統(tǒng)函數(shù),向操作系統(tǒng)登記一注冊表訪問操作通知的回調(diào)例程。優(yōu)選地,所述注冊表訪問操作通知中攜帶有回調(diào)通知參數(shù),并且該回調(diào)通知參數(shù)中包括注冊表操作類型和注冊表操作路徑。優(yōu)選地,所述步驟a包括-判斷所述回調(diào)通知參數(shù)中的注冊表操作類型是否為預(yù)建立注冊表鍵;
-判斷所述回調(diào)通知參數(shù)中的注冊表操作路徑是否包含設(shè)備實(shí)例路徑;若所述回調(diào)通知參數(shù)中的注冊表操作類型為預(yù)建立注冊表鍵、且所述回調(diào)通知參數(shù)中的注冊表操作路徑包含設(shè)備實(shí)例路徑,則確定所述注冊表訪問操作通知所包含的操作屬于設(shè)備驅(qū)動程序配置活動;否則,確定所述注冊表訪問操作通知所包含的操作不屬于設(shè)備驅(qū)動程序配置活動。優(yōu)選地,所述步驟b包括通過所述注冊表操作路徑獲得所述待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑。優(yōu)選地,所述步驟c和所述步驟d檢查的配置信息至少包括以注冊表鍵值項(xiàng)形式存儲的 Class、ClassGUID、ConfigFlags、Service 和 Driver。優(yōu)選地,所述步驟e包括el、將同類型設(shè)備的注冊表鍵值項(xiàng)Class、Class⑶ID、ConfigFlags和Service,復(fù)制到所述待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑下;e2、生成一個新的驅(qū)動類實(shí)例關(guān)鍵字作為注冊表鍵值項(xiàng)Driver的內(nèi)容、并設(shè)置到所述待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑下;e3、將同類型設(shè)備的注冊表鍵值項(xiàng)Driver所指向的在注冊表中的驅(qū)動類實(shí)例配置信息,復(fù)制到上述新生成的驅(qū)動類實(shí)例關(guān)鍵字所指向的在注冊表中的驅(qū)動類實(shí)例路徑下。由上述技術(shù)方案可見,本發(fā)明請求操作系統(tǒng)在發(fā)生注冊表訪問操作時發(fā)出通知,并能夠在有通知發(fā)生時篩選出屬于設(shè)備驅(qū)動程序配置活動的通知。然后,從篩選出的通知中獲取當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑,如果該設(shè)備實(shí)例路徑下尚未存在配置信息、并且注冊表中存在同類型設(shè)備的配置信息,則將注冊表中同類型設(shè)備的配置信息套用至當(dāng)前待進(jìn)行驅(qū)動程序配置活動的設(shè)備上。通過本發(fā)明,可自動對系統(tǒng)中相同類型的設(shè)備進(jìn)行驅(qū)動程序配置,并且配置過程快、對用戶無干擾、配置結(jié)果即時生效。特別對于在學(xué)校機(jī)房或網(wǎng)吧等公共場所廣泛使用的USB鍵盤和鼠標(biāo),應(yīng)用本發(fā)明可避免部署時需要在工作站所有USB插口上逐一進(jìn)行識別和安裝的不便,每種USB設(shè)備只需在任意一個插口進(jìn)行過識別和安裝,即可全插口可用。
圖I為本發(fā)明實(shí)施例中自動配置設(shè)備驅(qū)動程序的方法的一示例性流程圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對本發(fā)明進(jìn)一步詳細(xì)說明。圖I為本發(fā)明實(shí)施例中自動配置設(shè)備驅(qū)動程序的方法的一示例性流程圖。如圖I所示,本實(shí)施例中自動配置設(shè)備驅(qū)動程序的方法可以由一個底層內(nèi)核模式驅(qū)動程序來執(zhí)行,例如,該底層內(nèi)核模式驅(qū)動程序可命名為AutoDeviceConfig. sys,且該方法包括步驟100,底層內(nèi)核模式驅(qū)動程序請求操作系統(tǒng)在發(fā)生注冊表訪問操作時發(fā)出注冊表訪問操作通知。本步驟中,底層內(nèi)核模式驅(qū)動程序可以調(diào)用操作系統(tǒng)的內(nèi)核系統(tǒng)函數(shù),向操作系統(tǒng)登記一注冊表訪問操作通知的回調(diào)例程。例如,對于Windows操作系統(tǒng)來說,可供底層內(nèi)核模式驅(qū)動程序調(diào)用的內(nèi)核系統(tǒng)函數(shù)可以選為CmRegisterCalIback 或CmRegisterCallbackEx,底層內(nèi)核模式驅(qū)動程序注冊的回調(diào)例程可以命名為OnRegistryCallback0此后,底層內(nèi)核模式驅(qū)動程序在接收到操作系統(tǒng)發(fā)出的注冊表訪問操作通知之后,即可開始執(zhí)行包含步驟IOf 105的流程。其中,注冊表訪問操作通知中可以攜帶有回調(diào)通知參數(shù),并且該回調(diào)通知參數(shù)中包括注冊表操作類型和注冊表操作路徑。步驟101,底層內(nèi)核模式驅(qū)動程序判斷上述注冊表訪問操作通知所包含的操作是否屬于設(shè)備驅(qū)動程序配置活動,如果屬于則執(zhí)行步驟102,如果不屬于則結(jié)束。本步驟中,判斷該注冊表訪問操作通知所包含的操作是否屬于設(shè)備驅(qū)動程序配置活動至少可以使用如下篩選條件回調(diào)通知參數(shù)中的注冊表操作類型是否為預(yù)建立注冊表鍵,其中,預(yù)建立注冊表鍵可以為 RegNtPreCreateKey 或 RegNtPreCreateKeyEx ;以及,回調(diào)通知參數(shù)中的注冊表操作路徑是否包含設(shè)備實(shí)例路徑,其中設(shè)備實(shí)例路徑的形式可以為 “〈Enumerator>\〈Devi ce ID>\〈 Instance ID〉”。其中,上述設(shè)備實(shí)例路徑中的<Enumerator>、〈DeviceID>和〈UniquelD〉依次為設(shè)備枚舉器、設(shè)備ID和設(shè)備實(shí)例惟一 ID,三者聯(lián)合起來以標(biāo)記特定的設(shè)備實(shí)例路徑。如果所述回調(diào)通知參數(shù)中的注冊表操作類型為預(yù)建立注冊表鍵、且所述回調(diào)通知參數(shù)中的注冊表操作路徑包含設(shè)備實(shí)例路徑,則可判斷該注冊表訪問操作通知所包含的操作屬于設(shè)備驅(qū)動程序配置活動。步驟102,底層內(nèi)核模式驅(qū)動程序從注冊表訪問操作通知中獲取當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑,然后執(zhí)行步驟103。本步驟中,可以由回調(diào)通知參數(shù)中的注冊表操作路徑獲得當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑。步驟103,底層內(nèi)核模式驅(qū)動程序檢查上述在注冊表中對應(yīng)的設(shè)備實(shí)例路徑下是否已經(jīng)存在配置信息,如果不存在則執(zhí)行步驟104,如果存在則結(jié)束。其中,本步驟所檢查的設(shè)備實(shí)例路徑下的配置信息以注冊表鍵值項(xiàng)的形式存儲,且需要檢查的注冊表鍵值項(xiàng)可以包括Class、Class⑶ID、ConfigFlags、Service和Driver ;若檢查到上述注冊表鍵值項(xiàng)Class、Class⑶ID、ConfigFlags、Service和Driver全部存在,則確定當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備已經(jīng)被配置,即已經(jīng)存在配置信息。上述注冊表鍵值項(xiàng)Class為設(shè)備類名稱;上述注冊表鍵值項(xiàng)Class⑶ID為設(shè)備類的全局惟一標(biāo)識符;上述注冊表鍵值項(xiàng)ConfigFlags為設(shè)備的配置狀態(tài)標(biāo)記;上述注冊表鍵值項(xiàng)Service為設(shè)備的內(nèi)核模式驅(qū)動程序服務(wù)名稱;
上述注冊表鍵值項(xiàng)Driver為設(shè)備的驅(qū)動類實(shí)例關(guān)鍵字,記為〈DriverClassInstanceKey〉,對應(yīng)指向的在注冊表中的驅(qū)動類實(shí)例路徑為“\Registry\Machine\System\CurrentControlSet\Control\Class\<DriverClassInst anceKey>,,;更具體地,驅(qū)動類實(shí)例關(guān)鍵字〈DriverClassInstanceKey〉可進(jìn)一步描述為“〈Class⑶ID>\〈Index>”的形式,其中〈Class⑶ID>為設(shè)備類的全局惟一標(biāo)識符,而〈Index〉為一個取值區(qū)間從0000到9999的4位定寬整數(shù)。步驟104,底層內(nèi)核模式驅(qū)動程序檢查注冊表中是否存在可套用的同類型設(shè)備的配置信息,如果存在則執(zhí)行步驟105,如果不存在則結(jié)束。其中,本步驟所述的可套用配置信息的同類型設(shè)備是指與當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備相比,具有相同的設(shè)備特性、且配置信息可被當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備套用;以及,在注冊表中對應(yīng)的設(shè)備實(shí)例路徑具有相同的〈Enumerator〉和〈DevicelD〉、但〈InstancelD〉不同。本步驟所檢查的同類型設(shè)備的配置信息以注冊表鍵值項(xiàng)的形式存儲,且需要檢查的注冊表鍵值項(xiàng)可以包括Class、ClassGUID、ConfigFlags、Service和Driver (與步驟103中提及的注冊表鍵值項(xiàng)相同);若檢查到上述注冊表鍵值項(xiàng)Class、Class⑶ID、ConfigFlags^Service和Driver全部存在,則確定當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備可以從該同類型設(shè)備中套用配置信息。步驟105,底層內(nèi)核模式驅(qū)動程序?qū)⒆员碇型愋驮O(shè)備的配置信息套用至當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備,然后結(jié)束。本步驟中的具體處理過程可以包括a、將同類型設(shè)備的注冊表鍵值項(xiàng)Class、Class⑶ID、ConfigFlags和Service,復(fù)制到當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑下;b、生成一個新的驅(qū)動類實(shí)例關(guān)鍵字〈DriverClassInstanceKey〉作為注冊表鍵值項(xiàng)Driver的內(nèi)容、并設(shè)置到當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑下;C、將同類型設(shè)備的注冊表鍵值項(xiàng)Driver所指向的在注冊表中的驅(qū)動類實(shí)例配置信息,復(fù)制到上述新生成的驅(qū)動類實(shí)例關(guān)鍵字〈DriverClassInstanceKey〉所指向的在注冊表中的驅(qū)動類實(shí)例路徑下。另需要說明的是,圖I所示的步驟100可以僅執(zhí)行一次,而當(dāng)每次接收到操作系統(tǒng)發(fā)出的注冊表訪問操作通知后,均直接執(zhí)行步驟101至105。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍 之內(nèi)。
權(quán)利要求
1.一種自動配置設(shè)備驅(qū)動程序的方法,其特征在于包括步驟 請求操作系統(tǒng)在發(fā)生注冊表訪問操作時發(fā)出注冊表訪問操作通知,并在接收所述操作系統(tǒng)發(fā)出的注冊表訪問操作通知后執(zhí)行如下步驟 a、判斷所述注冊表訪問操作通知所包含的操作是否屬于設(shè)備驅(qū)動程序配置活動; b、當(dāng)所述注冊表訪問操作通知所包含的操作是屬于設(shè)備驅(qū)動程序配置活動時,從所述注冊表訪問操作通知中獲取當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑; C、檢查注冊表在所述設(shè)備實(shí)例路徑下是否已經(jīng)存在配置信息; d、當(dāng)注冊表在所述設(shè)備實(shí)例路徑下尚未存在配置信息時,檢查注冊表中是否存在可套用的同類型設(shè)備的配置信息; e、當(dāng)注冊表中存在可套用的同類型設(shè)備的配置信息時,將注冊表中同類型設(shè)備的配置信息套用至所述待進(jìn)行驅(qū)動程序配置的設(shè)備。
2.如權(quán)利要求I所述的方法,其特征在于,所述請求操作系統(tǒng)在發(fā)生注冊表訪問操作時發(fā)出注冊表訪問操作通知的步驟包括通過調(diào)用操作系統(tǒng)的內(nèi)核系統(tǒng)函數(shù),向操作系統(tǒng)登記一注冊表訪問操作通知的回調(diào)例程。
3.如權(quán)利要求2所述的方法,其特征在于,所述注冊表訪問操作通知中攜帶有回調(diào)通知參數(shù),并且該回調(diào)通知參數(shù)中包括注冊表操作類型和注冊表操作路徑。
4.如權(quán)利要求3所述的方法,其特征在于,所述步驟a包括步驟 -判斷所述回調(diào)通知參數(shù)中的注冊表操作類型是否為預(yù)建立注冊表鍵; -判斷所述回調(diào)通知參數(shù)中的注冊表操作路徑是否包含設(shè)備實(shí)例路徑。
若所述回調(diào)通知參數(shù)中的注冊表操作類型為預(yù)建立注冊表鍵、且所述回調(diào)通知參數(shù)中的注冊表操作路徑包含設(shè)備實(shí)例路徑,則確定所述注冊表訪問操作通知所包含的操作屬于設(shè)備驅(qū)動程序配置活動;否則,確定所述注冊表訪問操作通知所包含的操作不屬于設(shè)備驅(qū)動程序配置活動。
5.如權(quán)利要求3所述的方法,其特征在于,所述步驟b包括步驟通過所述注冊表操作路徑獲得所述待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑。
6.如權(quán)利要求3所述的方法,其特征在于,所述步驟c和所述步驟d檢查的配置信息至少包括以注冊表鍵值項(xiàng)形式存儲的Class、Class⑶ID、ConfigFlags、Service和Driver。
7.如權(quán)利要求6所述的方法,其特征在于,所述步驟e包括 el、將同類型設(shè)備的注冊表鍵值項(xiàng)Class、Class⑶ID、ConfigFlags和Service,復(fù)制到所述待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑下; e2、生成一個新的驅(qū)動類實(shí)例關(guān)鍵字作為注冊表鍵值項(xiàng)Driver的內(nèi)容、并設(shè)置到所述待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑下; e3、將同類型設(shè)備的注冊表鍵值項(xiàng)Driver所指向的在注冊表中的驅(qū)動類實(shí)例配置信息,復(fù)制到上述新生成的驅(qū)動類實(shí)例關(guān)鍵字所指向的在注冊表中的驅(qū)動類實(shí)例路徑下。
全文摘要
本發(fā)明公開了一種自動配置設(shè)備驅(qū)動程序的方法。本發(fā)明中,先請求操作系統(tǒng)在發(fā)生注冊表訪問操作時發(fā)出通知,并能夠在有通知發(fā)生時篩選出屬于設(shè)備驅(qū)動程序配置活動的通知。然后,從篩選出的通知中獲取當(dāng)前待進(jìn)行驅(qū)動程序配置的設(shè)備在注冊表中對應(yīng)的設(shè)備實(shí)例路徑,如果該設(shè)備實(shí)例路徑下尚未存在配置信息、并且注冊表中存在同類型設(shè)備的配置信息,則將注冊表中同類型設(shè)備的配置信息套用至當(dāng)前待進(jìn)行驅(qū)動程序配置活動的設(shè)備上。應(yīng)用本發(fā)明,可提高設(shè)備驅(qū)動程序的配置效率。
文檔編號G06F9/445GK102750164SQ20121017120
公開日2012年10月24日 申請日期2012年5月29日 優(yōu)先權(quán)日2012年5月29日
發(fā)明者朱堃, 鄺耀華 申請人:湖北盛天網(wǎng)絡(luò)技術(shù)股份有限公司