国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)方法及其系統(tǒng)的制作方法

      文檔序號:9375509閱讀:1024來源:國知局
      虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)方法及其系統(tǒng)的制作方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)方法及其系統(tǒng)。
      【背景技術(shù)】
      [0002]在Windows 2000系統(tǒng)下,幾乎所有的I/O都是包驅(qū)動的,每個工作命令描述一個單獨(dú)的I/o操作,這個命令告訴驅(qū)動程序需要做什么,并且通過I/O子系統(tǒng)跟蹤請求的進(jìn)展,這些命令被封裝成為輸入請求包(Iuput Request Package,簡稱IRP)的形式,當(dāng)發(fā)出一個I/O系統(tǒng)服務(wù)時(比如創(chuàng)建文件或讀文件的請求),I/O管理器就會通過構(gòu)造一個描述此請求的IRP,并將該IRP的一個指針傳給設(shè)備驅(qū)動開始對該請求進(jìn)行處理。如果OS向I/O管理器和設(shè)備驅(qū)動完整地描述一個I/O請求,那么IRP中保存的信息就可以達(dá)到這個目的。
      [0003]過濾層驅(qū)動就是一個攔截到一些已有軟件模塊的請求的中間層驅(qū)動,依靠在請求到達(dá)目標(biāo)前截獲請求,過濾驅(qū)動就有機(jī)會擴(kuò)展或修改請求的原始接收者所提供的功能或服務(wù)。
      [0004]Windows 公開了一些應(yīng)用程序編程接口(Applicat1n Programming Interface,簡稱API)函數(shù),通過調(diào)用這些API或者發(fā)送消息的機(jī)制來達(dá)到對鼠標(biāo)和鍵盤的控制。
      [0005]在一些應(yīng)用場景中,比如在系統(tǒng)修復(fù)自動化項(xiàng)目、軟件安裝卸載自動化項(xiàng)目、痕跡清理自動化項(xiàng)目等場景下,某些軟件為了防止被利用或者非法破解、或者網(wǎng)絡(luò)游戲出于對控制輸入速度的和反外掛的目的,它們會對普通的鼠標(biāo)和鍵盤API進(jìn)行過濾,從而導(dǎo)致從應(yīng)用層無法操作它們的界面,普通的控制鼠標(biāo)和鍵盤的API函數(shù)都是無效的。
      [0006]對于上述問題,現(xiàn)有技術(shù)中的一種解決方案是通過Win1軟件包直接控制鼠標(biāo)和鍵盤硬件端口。Win1是一個現(xiàn)在比較流行的第三方庫,通過加載一個內(nèi)核模式的設(shè)備驅(qū)動程序,利用幾種底層編程技巧,使得Windows應(yīng)用程序可以直接對1/0端口和物理內(nèi)存進(jìn)行存取,從而繞過了 Windows系統(tǒng)的保護(hù)機(jī)制。Win1包含了 3個文件:Win1.dll、Win1.sys和WIN10.VXD,其中WIN10.VXD驅(qū)動程序用在Win95/98系統(tǒng)上,Winl0.sys驅(qū)動程序用在WinNT/2000/XP系統(tǒng)上,ffinl0.dll提供了功能函數(shù)的調(diào)用。在Winl0.dll中有兩個函數(shù)最重要=InitializeWin1用來初始化Win1的驅(qū)動程序,必須在調(diào)用所有其它功能函數(shù)之前調(diào)用該函數(shù);ShutdownWin1用來卸載Win1的驅(qū)動程序,在中止應(yīng)用函數(shù)之前或者不再需要使用Win1時調(diào)用。
      [0007]但是,在使用Win1向鼠標(biāo)或者鍵盤發(fā)送數(shù)據(jù)的時候,必須有硬件的支持(電腦上必須插入PS2鼠標(biāo));向串口直接讀寫數(shù)據(jù)存在效率的問題,而且存在串口數(shù)據(jù)同步問題。假如I秒內(nèi)連續(xù)發(fā)送了 100個數(shù)據(jù),可能串口實(shí)際響應(yīng)的只有10個數(shù)據(jù),這樣就存在同步的問題。WIN1是對物理鼠標(biāo)直接發(fā)送數(shù)據(jù),然而在程序發(fā)送數(shù)據(jù)的時候,人為的也可以對物理鼠標(biāo)或鍵盤進(jìn)行操作,這樣就有可能導(dǎo)致數(shù)據(jù)混亂,出現(xiàn)鼠標(biāo)滿屏幕飛的效果或者鍵入字符錯誤的效果。
      [0008]綜上所述,對于屏蔽控制鼠標(biāo)或鍵盤的API函數(shù)的情況下導(dǎo)致無法控制或鍵盤的問題,現(xiàn)有技術(shù)中尚未提出有效地解決方案。

      【發(fā)明內(nèi)容】

      [0009]有鑒于屏蔽控制鼠標(biāo)或鍵盤的API函數(shù)的情況下導(dǎo)致無法控制或鍵盤的問題而做出本發(fā)明,為此本發(fā)明的主要目的在于提供一種虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)方法及其系統(tǒng),其中:
      [0010]為解決上述問題,本發(fā)明提供一種虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)方法,包括:
      [0011]調(diào)用系統(tǒng)應(yīng)用程序編程接口 API創(chuàng)建虛擬輸入設(shè)備,在驅(qū)動層上掛載所述虛擬輸入設(shè)備;
      [0012]將系統(tǒng)輸入設(shè)備的函數(shù)地址記錄到所述虛擬輸入設(shè)備的設(shè)備擴(kuò)展結(jié)構(gòu)體中,以使驅(qū)動層自動獲得系統(tǒng)輸入設(shè)備的函數(shù)地址;
      [0013]獲取應(yīng)用層發(fā)送給所述虛擬輸入設(shè)備的輸入數(shù)據(jù)結(jié)構(gòu)體;
      [0014]所述驅(qū)動層根據(jù)虛擬輸入設(shè)備中記錄的設(shè)備擴(kuò)展結(jié)構(gòu)體,使用所獲取的輸入數(shù)據(jù)結(jié)構(gòu)體控制虛擬輸入設(shè)備的行為。
      [0015]其中,所述設(shè)備擴(kuò)展結(jié)構(gòu)體,可以包括:系統(tǒng)輸入設(shè)備的屬性、連接系統(tǒng)輸入設(shè)備的驅(qū)動地址、系統(tǒng)輸入設(shè)備的端口地址、本驅(qū)動所處設(shè)備棧的位置信息,和/或所掛載設(shè)備的地址。
      [0016]其中,所述輸入數(shù)據(jù)結(jié)構(gòu)體,可以包括:鍵盤的鍵碼、鍵盤按鍵行為、鼠標(biāo)的坐標(biāo)、鼠標(biāo)的按鍵類型、鼠標(biāo)的點(diǎn)擊行為、鼠標(biāo)滾輪的滾動單位數(shù)值、和/或鼠標(biāo)移動軌跡。
      [0017]其中,所述虛擬輸入設(shè)備的設(shè)備擴(kuò)展結(jié)構(gòu)體可以在創(chuàng)建所述虛擬輸入設(shè)備的過程中生成。
      [0018]其中,所述獲取應(yīng)用層發(fā)送給所述虛擬輸入設(shè)備的輸入數(shù)據(jù)結(jié)構(gòu)體的步驟,可以包括:
      [0019]獲取應(yīng)用層發(fā)送至驅(qū)動層的控制所述虛擬輸入設(shè)備的輸入請求包IRP ;
      [0020]解析所述IRP得到所述虛擬輸入設(shè)備的輸入數(shù)據(jù)結(jié)構(gòu)體。
      [0021]其中,所述獲取應(yīng)用層發(fā)送至驅(qū)動層的控制所述虛擬輸入設(shè)備的IRP的步驟,可以包括:
      [0022]創(chuàng)建控制設(shè)備對象⑶O ;
      [0023]利用所述⑶O獲取應(yīng)用層發(fā)送至驅(qū)動層的控制所述虛擬輸入設(shè)備的IRP。
      [0024]所述控制虛擬輸入設(shè)備的行為的步驟,可以包括:通過設(shè)備擴(kuò)展結(jié)構(gòu)體對輸入數(shù)據(jù)結(jié)構(gòu)體進(jìn)行回調(diào)實(shí)現(xiàn)控制。
      [0025]本發(fā)明進(jìn)而還一種虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)系統(tǒng),包括:
      [0026]虛擬輸入設(shè)備創(chuàng)建模塊,用于調(diào)用系統(tǒng)應(yīng)用程序編程接口 API創(chuàng)建虛擬輸入設(shè)備,在驅(qū)動層上掛載所述虛擬輸入設(shè)備;
      [0027]記錄模塊,用于將系統(tǒng)輸入設(shè)備的函數(shù)地址記錄到所述虛擬輸入設(shè)備的設(shè)備擴(kuò)展結(jié)構(gòu)體中,以使驅(qū)動層自動獲得系統(tǒng)輸入設(shè)備的函數(shù)地址;
      [0028]獲取模塊,用于獲取應(yīng)用層發(fā)送給所述虛擬輸入設(shè)備的輸入數(shù)據(jù)結(jié)構(gòu)體;
      [0029]控制模塊,用于所述驅(qū)動層根據(jù)虛擬輸入設(shè)備中記錄的設(shè)備擴(kuò)展結(jié)構(gòu)體,使用所獲取的輸入數(shù)據(jù)結(jié)構(gòu)體控制虛擬輸入設(shè)備的行為。
      [0030]其中,所述設(shè)備擴(kuò)展結(jié)構(gòu)體,可以包括:系統(tǒng)輸入設(shè)備的屬性、連接系統(tǒng)輸入設(shè)備的驅(qū)動地址、系統(tǒng)輸入設(shè)備的端口地址、本驅(qū)動所處設(shè)備棧的位置信息,和/或所掛載設(shè)備的地址。
      [0031]其中,所述輸入數(shù)據(jù)結(jié)構(gòu)體,可以包括:鍵盤的鍵碼、鍵盤按鍵行為、鼠標(biāo)的坐標(biāo)、鼠標(biāo)的按鍵類型、鼠標(biāo)的點(diǎn)擊行為、鼠標(biāo)滾輪的滾動單位數(shù)值、和/或鼠標(biāo)移動軌跡。
      [0032]其中,所述虛擬輸入設(shè)備的設(shè)備擴(kuò)展結(jié)構(gòu)體可以在創(chuàng)建所述虛擬輸入設(shè)備的過程中生成。
      [0033]其中,所述獲取模塊,可以包括:
      [0034]IRP獲取單元,用于獲取應(yīng)用層發(fā)送至驅(qū)動層的控制所述虛擬輸入設(shè)備的輸入請求包IRP ;
      [0035]解析單元,用于解析所述IRP得到所述虛擬輸入設(shè)備的輸入數(shù)據(jù)結(jié)構(gòu)體。
      [0036]其中,所述IRP獲取單元,創(chuàng)建控制設(shè)備對象⑶0,利用所述⑶O獲取應(yīng)用層發(fā)送至驅(qū)動層的控制所述虛擬輸入設(shè)備的IRP。
      [0037]其中,所述控制模塊,通過設(shè)備擴(kuò)展結(jié)構(gòu)體對輸入數(shù)據(jù)結(jié)構(gòu)體進(jìn)行回調(diào)實(shí)現(xiàn)控制。
      [0038]綜上所示,根據(jù)本發(fā)明上述技術(shù)方案,在軟件屏蔽虛擬輸入設(shè)備消息的情況下也能夠控制虛擬輸入設(shè)備,有效地防止軟件的限制,并且具有操作精度高,速度快的特點(diǎn)。
      【附圖說明】
      [0039]此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
      [0040]圖1是根據(jù)本發(fā)明實(shí)施例的虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)方法的流程圖;
      [0041]圖2是根據(jù)本發(fā)明實(shí)施例的虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)系統(tǒng)的結(jié)構(gòu)框圖;
      [0042]圖3是根據(jù)本發(fā)明實(shí)施例的虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)系統(tǒng)的優(yōu)選結(jié)構(gòu)的框圖。
      【具體實(shí)施方式】
      [0043]本發(fā)明利用應(yīng)用層發(fā)送的程序中自定義IRP,然后驅(qū)動該截獲此IRP,經(jīng)過分析該IRP,并利用分析后的結(jié)果控制虛擬輸入設(shè)備,使得對虛擬輸入設(shè)備的控制可以不受windows API的限制。需要說明,本發(fā)明中提到的虛擬輸入設(shè)備包括但不限于以下設(shè)備:虛擬鼠標(biāo)、虛擬鍵盤、虛擬光驅(qū)、虛擬硬盤。
      [0044]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,以下結(jié)合附圖及具體實(shí)施例,對本發(fā)明作進(jìn)一步地詳細(xì)說明。
      [0045]根據(jù)本發(fā)明的實(shí)施例,提供了一種虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)方法。
      [0046]圖1是根據(jù)本發(fā)明實(shí)施例的虛擬輸入設(shè)備在驅(qū)動層的實(shí)現(xiàn)方法的流程圖,如圖1所示,該方法包括(步驟S12-S18):
      [0047]步驟S12,調(diào)用系統(tǒng)應(yīng)用程序編程接口(API)創(chuàng)建虛擬輸入設(shè)備,在驅(qū)動層上掛載虛擬輸入設(shè)備。
      [0048]步驟S14,將系統(tǒng)輸入設(shè)備的函數(shù)地址記錄到虛擬輸入設(shè)備的設(shè)備擴(kuò)展結(jié)構(gòu)體中,以使驅(qū)動層自動獲得系統(tǒng)輸入設(shè)備的函數(shù)地址。其中,該虛擬輸入設(shè)備的設(shè)備擴(kuò)展結(jié)構(gòu)體包括但不限于:系統(tǒng)輸入設(shè)備的屬性、連接系統(tǒng)輸入設(shè)備的驅(qū)動地址、系統(tǒng)輸入設(shè)備的端口地址、本驅(qū)動所處設(shè)備棧的位置信息,和/或所掛載設(shè)備的地址。
      [0049]首先,在AddDevice例程中調(diào)用系統(tǒng)API創(chuàng)建虛擬輸入設(shè)備,將創(chuàng)建的虛擬輸入設(shè)備掛載到系統(tǒng)輸入設(shè)備上,并且記錄系統(tǒng)輸入設(shè)備的信息到創(chuàng)建的虛擬輸入設(shè)備的設(shè)備擴(kuò)展結(jié)構(gòu)體中,根據(jù)這些信息獲取底層系統(tǒng)輸入設(shè)備驅(qū)動的一些特性供驅(qū)動層所使用。然后,響應(yīng)虛擬輸入設(shè)備的IRP_MJ_INTERNAL_DEVICE_CONTROL,并且把系統(tǒng)輸入設(shè)備中的一些數(shù)據(jù)結(jié)構(gòu)的指針(即底層系統(tǒng)輸入設(shè)備的函數(shù)指針)記錄到創(chuàng)建的虛擬輸入設(shè)備的設(shè)備擴(kuò)展結(jié)構(gòu)體中,其中,數(shù)據(jù)結(jié)構(gòu)的指針是供驅(qū)動層所調(diào)用的在系統(tǒng)設(shè)備已經(jīng)實(shí)現(xiàn)的函數(shù)接口地址。
      [0050]在驅(qū)動中,設(shè)備是分層的結(jié)構(gòu)。實(shí)際的輸入設(shè)備(例如:鼠標(biāo))屬于最下層(即底層設(shè)備),它是由操作系統(tǒng)所創(chuàng)建的;而驅(qū)動層創(chuàng)建的虛擬輸入設(shè)備是在底層設(shè)備的上層,所以創(chuàng)建虛擬輸入設(shè)備時就可以把創(chuàng)建出的虛擬輸入設(shè)備掛載到系統(tǒng)創(chuàng)建的輸入設(shè)備之上,這樣就形成一個設(shè)備棧。
      [0051]需要說明,在創(chuàng)建虛擬輸入設(shè)備時,不依賴于實(shí)際的硬件輸入設(shè)備是否存在以及硬件輸入設(shè)備的類型。例如:在創(chuàng)建虛擬鼠標(biāo)和虛擬鍵盤時,無論電腦是否安裝有鼠標(biāo)和鍵盤,也無論鼠標(biāo)和鍵盤的類型是USB還是PS2,都不影響虛擬鼠標(biāo)和虛擬鍵盤的創(chuàng)建。
      [0052]步驟S16,獲取
      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1