基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)通訊技術(shù)領(lǐng)域,尤其涉及一種基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法。
【背景技術(shù)】
[0002]在Windows顯示體系下,用戶態(tài)應(yīng)用程序無(wú)法和顯卡端口驅(qū)動(dòng)進(jìn)行直接通信,用戶態(tài)應(yīng)用程序想和顯卡端口驅(qū)動(dòng)進(jìn)行通信,需要通過(guò)顯示驅(qū)動(dòng)模塊來(lái)中轉(zhuǎn),該通信數(shù)據(jù)流如圖1所示:當(dāng)顯示驅(qū)動(dòng)模塊未加載的時(shí)候,則無(wú)法與顯卡端口驅(qū)動(dòng)進(jìn)行通信。這樣在一些情況下,用戶態(tài)應(yīng)用程序要和顯卡端口驅(qū)動(dòng)進(jìn)行通信時(shí),就必須對(duì)顯示驅(qū)動(dòng)模塊進(jìn)行加載,加載該顯示驅(qū)動(dòng)模塊不僅浪費(fèi)系統(tǒng)資源,而且還要消耗一定的時(shí)間。
【發(fā)明內(nèi)容】
[0003]本發(fā)明要解決的技術(shù)問(wèn)題,在于提供一種基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,實(shí)現(xiàn)用戶態(tài)應(yīng)用程序繞過(guò)顯示驅(qū)動(dòng)模塊,直接與顯卡端口驅(qū)動(dòng)完成通信,同時(shí)又不會(huì)影響到顯卡端口驅(qū)動(dòng)本身的通信行為。
[0004]本發(fā)明是這樣實(shí)現(xiàn)的:一種基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,所述方法需提供用戶態(tài)應(yīng)用程序、數(shù)據(jù)分發(fā)模塊以及私有通信處理模塊;所述方法具體包括如下步驟:
[0005]步驟10、所述顯卡端口驅(qū)動(dòng)在加載的過(guò)程中創(chuàng)建一全局對(duì)象表和一私有的通信對(duì)象,并將所述私有的通信對(duì)象保存在全局對(duì)象表中;
[0006]步驟20、在顯卡端口驅(qū)動(dòng)加載過(guò)程中用顯卡端口驅(qū)動(dòng)的函數(shù)分發(fā)表來(lái)接收所述用戶態(tài)應(yīng)用程序的通信請(qǐng)求;
[0007]步驟30、所述顯卡端口驅(qū)動(dòng)接收到所述用戶態(tài)應(yīng)用程序發(fā)送的通信請(qǐng)求后,將請(qǐng)求轉(zhuǎn)發(fā)到所述數(shù)據(jù)分發(fā)模塊;
[0008]步驟40、所述數(shù)據(jù)分發(fā)模塊根據(jù)所述全局對(duì)象表來(lái)判斷該請(qǐng)求是否是發(fā)送給所述私有的通信對(duì)象,是,則,轉(zhuǎn)發(fā)給私有通信處理模塊來(lái)完成該請(qǐng)求進(jìn)行通信;否,則進(jìn)行其他的通信請(qǐng)求操作。
[0009]進(jìn)一步的,所述步驟20和步驟30之間還包括:
[0010]步驟21、所述用戶態(tài)應(yīng)用程序使用Windows系統(tǒng)提供的應(yīng)用程序編程接口 API打開(kāi)所述私有的通信對(duì)象,使用Windows系統(tǒng)提供的應(yīng)用程序編程接口 API與私有的通信對(duì)象來(lái)進(jìn)行通信。
[0011]進(jìn)一步的,所述其他的通信請(qǐng)求包括Windows系統(tǒng)的顯示驅(qū)動(dòng)模塊的通信請(qǐng)求。
[0012]進(jìn)一步的,所述步驟40中進(jìn)行其他的通信請(qǐng)求操作,具體為:將其他的通信請(qǐng)求發(fā)送給一數(shù)據(jù)轉(zhuǎn)換模塊,所述顯卡端口驅(qū)動(dòng)本身只能處理VRP請(qǐng)求,則數(shù)據(jù)轉(zhuǎn)換模塊將接收到的其他的通信中的IRP請(qǐng)求轉(zhuǎn)換成VRP請(qǐng)求,再轉(zhuǎn)發(fā)給顯卡端口驅(qū)動(dòng),從而完成了私有通信。
[0013]進(jìn)一步的,其中,步驟40、所述數(shù)據(jù)分發(fā)模塊根據(jù)所述全局對(duì)象表來(lái)判斷該請(qǐng)求是否是發(fā)送給所述私有的通信對(duì)象,具體為:通過(guò)枚舉當(dāng)前顯卡端口驅(qū)動(dòng)下面的每一個(gè)設(shè)備對(duì)象,通過(guò)對(duì)象的Hash值來(lái)構(gòu)造Hash表,表值為是否為私有通信對(duì)象,此表所構(gòu)成的即是全局對(duì)象表,放入二維數(shù)組來(lái)構(gòu)造全局對(duì)象表;將請(qǐng)求與全局對(duì)象表中的私有通信對(duì)象進(jìn)行對(duì)比來(lái)完成判斷。
[0014]本發(fā)明具有如下優(yōu)點(diǎn):本發(fā)明用戶態(tài)應(yīng)用程序繞過(guò)顯示驅(qū)動(dòng)模塊,直接與顯卡端口驅(qū)動(dòng)完成通信,同時(shí)又不會(huì)影響到顯卡端口驅(qū)動(dòng)本身的通信行為,如在存在多個(gè)顯示設(shè)備的系統(tǒng)中,其中部分顯示設(shè)備的顯示驅(qū)動(dòng)模塊還未加載,這時(shí)候用戶態(tài)應(yīng)用程序需要該顯示設(shè)備的顯卡端口驅(qū)動(dòng)完成一定的任務(wù),就需要繞過(guò)該顯示設(shè)備的顯示驅(qū)動(dòng)模塊,直接與顯卡端口驅(qū)動(dòng)進(jìn)行通信,降低了系統(tǒng)資源的消耗,提高了 Windows系統(tǒng)的執(zhí)行效率。
【附圖說(shuō)明】
[0015]圖1為現(xiàn)有技術(shù)中用戶態(tài)應(yīng)用程序和顯卡端口驅(qū)動(dòng)進(jìn)行通信的數(shù)據(jù)流程圖。
[0016]圖2為本發(fā)明的方法流程示意圖。
[0017]圖3為本發(fā)明的方法執(zhí)行框圖。
【具體實(shí)施方式】
[0018]請(qǐng)參閱圖2和圖3所示,本發(fā)明的一種基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,所述方法需提供用戶態(tài)應(yīng)用程序、數(shù)據(jù)分發(fā)模塊、私有通信處理模塊以及數(shù)據(jù)轉(zhuǎn)換模塊;所述方法具體包括如下步驟:
[0019]步驟10、所述顯卡端口驅(qū)動(dòng)在加載的過(guò)程中創(chuàng)建一全局對(duì)象表和一私有的通信對(duì)象,并將所述私有的通信對(duì)象保存在全局對(duì)象表中;
[0020]步驟20、在顯卡端口驅(qū)動(dòng)加載過(guò)程中用顯卡端口驅(qū)動(dòng)的函數(shù)分發(fā)表來(lái)接收所述用戶態(tài)應(yīng)用程序的通信請(qǐng)求;
[0021]步驟21、所述用戶態(tài)應(yīng)用程序使用Windows系統(tǒng)提供的應(yīng)用程序編程接口 API打開(kāi)所述私有的通信對(duì)象,使用Windows系統(tǒng)提供的應(yīng)用程序編程接口 API與私有的通信對(duì)象來(lái)進(jìn)行通信。
[0022]步驟30、所述顯卡端口驅(qū)動(dòng)接收到所述用戶態(tài)應(yīng)用程序發(fā)送的通信請(qǐng)求后,將請(qǐng)求轉(zhuǎn)發(fā)到所述數(shù)據(jù)分發(fā)模塊;
[0023]步驟40、所述數(shù)據(jù)分發(fā)模塊根據(jù)所述全局對(duì)象表來(lái)判斷該請(qǐng)求是否是發(fā)送給所述私有的通信對(duì)象,是,則,轉(zhuǎn)發(fā)給私有通信處理模塊來(lái)完成該請(qǐng)求進(jìn)行通信;否,則進(jìn)行其他的通信請(qǐng)求操作。
[0024]其中,所述其他的通信請(qǐng)求包括Windows系統(tǒng)的顯示驅(qū)動(dòng)模塊的通信請(qǐng)求。
[0025]所述用戶態(tài)應(yīng)用程序:通過(guò)用戶態(tài)應(yīng)用程序來(lái)通知顯卡端口驅(qū)動(dòng)來(lái)完成一些特定的任務(wù)。所述顯示驅(qū)動(dòng)模塊:Windows顯示體系下的顯示驅(qū)動(dòng),主要完成⑶I引擎發(fā)送來(lái)的顯示請(qǐng)求。所述顯卡端口驅(qū)動(dòng):WindowS顯示體系下的小端口驅(qū)動(dòng),主要完成顯示驅(qū)動(dòng)發(fā)送來(lái)的顯示請(qǐng)求。所述私有通信對(duì)象:在顯卡端口驅(qū)動(dòng)中創(chuàng)建的私有通信對(duì)象,用戶態(tài)應(yīng)用程序可以打開(kāi)該對(duì)象,并與之通信。所述全局對(duì)象表:用于存放端口驅(qū)動(dòng)中存在的各類對(duì)象,包括本專利中創(chuàng)建的私有通信對(duì)象。所述數(shù)據(jù)分發(fā)模塊:通過(guò)匹配全局對(duì)象表,來(lái)轉(zhuǎn)發(fā)各類通信請(qǐng)求。所述數(shù)據(jù)轉(zhuǎn)換模塊:用于將IRP(1請(qǐng)求包)請(qǐng)求轉(zhuǎn)換成VRP (視頻請(qǐng)求包)請(qǐng)求。所述私有通信處理模塊:用于完成用戶態(tài)應(yīng)用程序需要顯卡端口驅(qū)動(dòng)完成的任務(wù)。
[0026]所述步驟40中進(jìn)行其他的通信請(qǐng)求操作,具體為:將其他的通信請(qǐng)求發(fā)送給一數(shù)據(jù)轉(zhuǎn)換模塊,所述顯卡端口驅(qū)動(dòng)本身只能處理VRP請(qǐng)求,則數(shù)據(jù)轉(zhuǎn)換模塊將接收到的其他的通信中的IRP請(qǐng)求轉(zhuǎn)換成VRP請(qǐng)求,再轉(zhuǎn)發(fā)給顯卡端口驅(qū)動(dòng),從而完成了私有通信。由于顯卡端口驅(qū)動(dòng)本身只能處理VRP請(qǐng)求,為了不影響顯卡端口驅(qū)動(dòng)原本的通信請(qǐng)求,故數(shù)據(jù)轉(zhuǎn)換模塊將IRP請(qǐng)求轉(zhuǎn)換成VRP請(qǐng)求,再轉(zhuǎn)發(fā)給顯卡端口驅(qū)動(dòng),這樣既能完成了私有通信,也不會(huì)干擾到顯卡小端口驅(qū)動(dòng)原本的通信。
[0027]這里值得一提的是:步驟40、所述數(shù)據(jù)分發(fā)模塊根據(jù)所述全局對(duì)象表來(lái)判斷該請(qǐng)求是否是發(fā)送給所述私有的通信對(duì)象,具體為:通過(guò)枚舉當(dāng)前顯卡端口驅(qū)動(dòng)下面的每一個(gè)設(shè)備對(duì)象,通過(guò)對(duì)象的Hash值來(lái)構(gòu)造Hash表,表值為是否為私有通信對(duì)象,此表所構(gòu)成的即是全局對(duì)象表,放入二維數(shù)組來(lái)構(gòu)造全局對(duì)象表;將請(qǐng)求與全局對(duì)象表中的私有通信對(duì)象進(jìn)行對(duì)比來(lái)完成判斷。
[0028]總之,本發(fā)明在顯卡端口驅(qū)動(dòng)的加載過(guò)程中,創(chuàng)建私有的通信對(duì)象,并替換掉顯卡端口驅(qū)動(dòng)原本的函數(shù)分發(fā)表,這樣用戶態(tài)的應(yīng)用程序就可以直接打開(kāi)該通信對(duì)象,與之完成通信,降低了系統(tǒng)資源的消耗,提高了 Windows系統(tǒng)的執(zhí)行效率。
[0029]以上所述僅為本發(fā)明的較佳實(shí)施例,凡依本發(fā)明申請(qǐng)專利范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。
【主權(quán)項(xiàng)】
1.一種基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,其特征在于:所述方法需提供用戶態(tài)應(yīng)用程序、數(shù)據(jù)分發(fā)模塊以及私有通信處理模塊;所述方法具體包括如下步驟: 步驟10、所述顯卡端口驅(qū)動(dòng)在加載的過(guò)程中創(chuàng)建一全局對(duì)象表和一私有的通信對(duì)象,并將所述私有的通信對(duì)象保存在全局對(duì)象表中; 步驟20、在顯卡端口驅(qū)動(dòng)加載過(guò)程中用顯卡端口驅(qū)動(dòng)的函數(shù)分發(fā)表來(lái)接收所述用戶態(tài)應(yīng)用程序的通信請(qǐng)求; 步驟30、所述顯卡端口驅(qū)動(dòng)接收到所述用戶態(tài)應(yīng)用程序發(fā)送的通信請(qǐng)求后,將請(qǐng)求轉(zhuǎn)發(fā)到所述數(shù)據(jù)分發(fā)模塊; 步驟40、所述數(shù)據(jù)分發(fā)模塊根據(jù)所述全局對(duì)象表來(lái)判斷該請(qǐng)求是否是發(fā)送給所述私有的通信對(duì)象,是,則,轉(zhuǎn)發(fā)給私有通信處理模塊來(lái)完成該請(qǐng)求進(jìn)行通信;否,則進(jìn)行其他的通信請(qǐng)求操作。2.根據(jù)權(quán)利要求1所述的基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,其特征在于:所述步驟20和步驟30之間還包括: 步驟21、所述用戶態(tài)應(yīng)用程序使用Windows系統(tǒng)提供的應(yīng)用程序編程接口 API打開(kāi)所述私有的通信對(duì)象,使用Windows系統(tǒng)提供的應(yīng)用程序編程接口 API與私有的通信對(duì)象來(lái)進(jìn)行通?目。3.根據(jù)權(quán)利要求1所述的基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,其特征在于:所述其他的通信請(qǐng)求包括Windows系統(tǒng)的顯示驅(qū)動(dòng)模塊的通信請(qǐng)求。4.根據(jù)權(quán)利要求1所述的基于Windiws顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,其特征在于:所述步驟40中進(jìn)行其他的通信請(qǐng)求操作,具體為:將其他的通信請(qǐng)求發(fā)送給一數(shù)據(jù)轉(zhuǎn)換模塊,所述顯卡端口驅(qū)動(dòng)本身只能處理VRP請(qǐng)求,則數(shù)據(jù)轉(zhuǎn)換模塊將接收到的其他的通信中的IRP請(qǐng)求轉(zhuǎn)換成VRP請(qǐng)求,再轉(zhuǎn)發(fā)給顯卡端口驅(qū)動(dòng),從而完成了私有通信。5.根據(jù)權(quán)利要求1所述的基于Windiws顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,其特征在于:其中,步驟40、所述數(shù)據(jù)分發(fā)模塊根據(jù)所述全局對(duì)象表來(lái)判斷該請(qǐng)求是否是發(fā)送給所述私有的通信對(duì)象,具體為:通過(guò)枚舉當(dāng)前顯卡端口驅(qū)動(dòng)下面的每一個(gè)設(shè)備對(duì)象,通過(guò)對(duì)象的Hash值來(lái)構(gòu)造Hash表,表值為是否為私有通信對(duì)象,此表所構(gòu)成的即是全局對(duì)象表,放入二維數(shù)組來(lái)構(gòu)造全局對(duì)象表;將請(qǐng)求與全局對(duì)象表中的私有通信對(duì)象進(jìn)行對(duì)比來(lái)完成判斷。
【專利摘要】本發(fā)明提供一種基于Windows顯示體系下與顯卡端口驅(qū)動(dòng)通信方法,該方法為:1、顯卡端口驅(qū)動(dòng)在加載的過(guò)程中創(chuàng)建一全局對(duì)象表和一私有的通信對(duì)象,并將所述私有的通信對(duì)象保存在全局對(duì)象表中;2、在顯卡端口驅(qū)動(dòng)加載過(guò)程中用顯卡端口驅(qū)動(dòng)的函數(shù)分發(fā)表來(lái)接收用戶態(tài)應(yīng)用程序的通信請(qǐng)求;3、顯卡端口驅(qū)動(dòng)接收到所述用戶態(tài)應(yīng)用程序發(fā)送的通信請(qǐng)求后,將請(qǐng)求轉(zhuǎn)發(fā)到所述數(shù)據(jù)分發(fā)模塊;4、數(shù)據(jù)分發(fā)模塊根據(jù)全局對(duì)象表來(lái)判斷該請(qǐng)求是否是發(fā)送給私有的通信對(duì)象,是,則,轉(zhuǎn)發(fā)給私有通信處理模塊來(lái)完成該請(qǐng)求進(jìn)行通信。本發(fā)明實(shí)現(xiàn)用戶態(tài)應(yīng)用程序繞過(guò)顯示驅(qū)動(dòng)模塊,直接與顯卡端口驅(qū)動(dòng)完成通信,同時(shí)又不會(huì)影響到顯卡端口驅(qū)動(dòng)本身的通信行為。
【IPC分類】G06F9/54
【公開(kāi)號(hào)】CN105373439
【申請(qǐng)?zhí)枴緾N201510929635
【發(fā)明人】張輝, 夏威, 鄭芳友
【申請(qǐng)人】福建升騰資訊有限公司
【公開(kāi)日】2016年3月2日
【申請(qǐng)日】2015年12月15日