專利名稱:Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域的數(shù)據(jù)終端設(shè)備,尤其涉及一種Win2000/XP下讀寫 數(shù)據(jù)終端設(shè)備PCI寄存器的方法及系統(tǒng)。
背景技術(shù):
基于PCMCIA ( Personal Computer Memory Card International Association, PC機(jī)內(nèi)存卡國際聯(lián)合會(huì))物理接口的數(shù)據(jù)終端設(shè)備,往往內(nèi)置USB主控制器 芯片,例如NEC和Philips 1562等等,這些芯片在PC側(cè)以符合PCI( Peripheral Component Interconnect,外部設(shè)備互連)總線協(xié)議的USB( Universal Serial Bus , 通用串行總線)主控制器的形式存在,同時(shí)暴露出PCI寄存器,通常芯片廠家 對(duì)主控制器的配置信息就保存在這些寄存器中。芯片出廠時(shí)配置信息通常被固化在PCI寄存器中,對(duì)于需要修改寄存器值 的場(chǎng)合, 一般通過昂貴的專有設(shè)備來實(shí)現(xiàn)。而芯片應(yīng)用廠商往往沒有專有設(shè)備, 出于成本和兼容性的考慮,只能在PC機(jī)中對(duì)PCI寄存器進(jìn)行修改。在Win98的操作系統(tǒng)下,現(xiàn)有技術(shù)可通過直接訪問IO端口來實(shí)現(xiàn)PCI寄 存器的讀寫,而在Win2000/XP的操作系統(tǒng)下,由于Win2000/XP操作系統(tǒng)把 系統(tǒng)分層,使得Win32程序,即普通的應(yīng)用程序無法直接對(duì)PCI寄存器進(jìn)行讀 寫,從而導(dǎo)致在必須使用Win2000/XP操作系統(tǒng)的場(chǎng)合,無法完成對(duì)PCI寄存 器的讀寫。發(fā)明內(nèi)容統(tǒng),用以解決現(xiàn)有技術(shù)中無法在Win2000/XP下用Win32應(yīng)用程序讀寫數(shù)據(jù)終端設(shè)備的PCI寄存器的問題。一種Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器的方法,包括步驟A、 Win32應(yīng)用程序通過虛擬設(shè)備驅(qū)動(dòng)為自身所在進(jìn)程向Win2000/XP操 作系統(tǒng)申請(qǐng)IO端口讀寫權(quán)限;B 、 Win32應(yīng)用程序向Win2000/XP操作系統(tǒng)發(fā)出讀寫PCI寄存器的請(qǐng)求, 若Win2000/XP操作系統(tǒng)鑒權(quán)該Win32應(yīng)用程序所在進(jìn)程具有IO端口讀寫權(quán) 限,則同意該請(qǐng)求;C、 Win32應(yīng)用程序根據(jù)PCI寄存器地址確定出PCI協(xié)議數(shù),并通過向特 定10端口寫入所述PCI協(xié)議數(shù)來實(shí)現(xiàn)對(duì)PCI寄存器的讀寫。所述步驟A與步驟B之間還包括虛擬設(shè)備驅(qū)動(dòng)向Win32應(yīng)用程序回復(fù)權(quán) 限申請(qǐng)成功消息的步驟。Win32應(yīng)用程序采用異步方式通過輸入輸出控制函數(shù)和虛擬設(shè)備驅(qū)動(dòng)通信。所述步驟A具體包括步驟Win32應(yīng)用程序?yàn)樽陨硭谶M(jìn)程向虛擬設(shè)備驅(qū)動(dòng)申請(qǐng)10端口讀寫權(quán)限; 虛擬設(shè)備驅(qū)動(dòng)申請(qǐng)非緩沖空間,根據(jù)Win32應(yīng)用程序所在進(jìn)程的IO許可位圖將空間大小設(shè)定為8K字節(jié),將其中和PCI寄存器有關(guān)的IO端口地址位賦值為1,其余賦值為0;虛擬設(shè)備驅(qū)動(dòng)將所述空間的內(nèi)容覆蓋到Win32應(yīng)用程序所在進(jìn)程的IO許可位圖中。所述步驟B中,當(dāng)Win2000/XP操作系統(tǒng)對(duì)Win32應(yīng)用程序所在進(jìn)程進(jìn)行 10端口訪問鑒權(quán)時(shí),允許Win32應(yīng)用程序所在進(jìn)程訪問賦值為1的10端口地 址位,使得Win32應(yīng)用程序可以讀寫PCI寄存器。 '虛擬設(shè)備驅(qū)動(dòng)將所述空間的內(nèi)容覆蓋到Win32應(yīng)用程序所在進(jìn)程的10許 可位圖中之前,先對(duì)Win32應(yīng)用程序所在進(jìn)程的IO許可位圖的內(nèi)容進(jìn)行備份 處理;Win32應(yīng)用程序讀寫PCI寄存器完成后,虛擬設(shè)備驅(qū)動(dòng)根據(jù)所述備份的10 許可位圖的內(nèi)容來恢復(fù)Win32應(yīng)用程序所在進(jìn)程的10許可位圖。Win32應(yīng)用程序根據(jù)數(shù)據(jù)終端設(shè)備的總線號(hào)、設(shè)備號(hào)、功能號(hào)及目標(biāo)讀寫 PCI寄存器的地址確定出一個(gè)32位的PCI協(xié)議數(shù)。所述PCI協(xié)議數(shù)的第0至7位是目標(biāo)PCI寄存器的地址,第8至10位是 PCI功能號(hào)的值,第11至15位是PCI設(shè)備號(hào)的值,第16至23位,是PCI總 線號(hào)的值,第24至30位是保留的,為O,第31為是PCI配置空間使能位,設(shè) 置為1。一種Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器的系統(tǒng),包括權(quán)限申請(qǐng) 模塊、驅(qū)動(dòng)申請(qǐng)權(quán)限模塊、鑒權(quán)模塊和寄存器讀寫模塊,其中,權(quán)限申請(qǐng)模塊,屬于Win32應(yīng)用程序,用于通過驅(qū)動(dòng)申請(qǐng)權(quán)限模塊為自身 所在進(jìn)程向Win2000/XP操作系統(tǒng)申請(qǐng)10端口讀寫^又限;驅(qū)動(dòng)申請(qǐng)權(quán)限模塊,屬于虛擬設(shè)備驅(qū)動(dòng)程序,用于為Win32應(yīng)用程序向 Win2000/XP操作系統(tǒng)申請(qǐng)10端口讀寫權(quán)限;鑒權(quán)模塊,屬于Win2000/XP操作系統(tǒng),用于鑒權(quán)Win32應(yīng)用程序所在進(jìn) 程是否具有IO端口讀寫權(quán)限;寄存器讀寫模塊,屬于Win32應(yīng)用程序,在OS鑒權(quán)模塊確定Win32應(yīng)用 程序所在進(jìn)程具有10端口讀寫權(quán)限時(shí),用于根據(jù)PCI寄存器地址確定出PCI 協(xié)議數(shù),并通過向特定10端口寫入所述PCI協(xié)議數(shù)來實(shí)現(xiàn)對(duì)PCI寄存器的讀 寫。還包括權(quán)限釋放模塊和驅(qū)動(dòng)釋放權(quán)限模塊,其中,權(quán)限釋放模塊、屬于Win32應(yīng)用程序,通過和驅(qū)動(dòng)釋放權(quán)限模塊交互,完 成自身所在的Win32應(yīng)用程序的10端口讀寫權(quán)限的釋放;驅(qū)動(dòng)釋放權(quán)限模塊,屬于虛擬設(shè)備驅(qū)動(dòng)程序,用于通過和Win2000/XP操 作系統(tǒng)交互為Win32應(yīng)用程序釋放IO端口讀寫權(quán)限。本發(fā)明通過虛擬設(shè)備驅(qū)動(dòng)來為Win32應(yīng)用程序和PCI硬件搭橋,以間接的
方式使得Win32應(yīng)用程序能夠讀寫PCI寄存器,從而解決了現(xiàn)有技術(shù)中無法在 Win2K/XP下用Win32程序讀寫數(shù)據(jù)終端設(shè)備的PCI寄存器的問題,達(dá)到了方 便的PCI寄存器讀寫的效果,節(jié)省了時(shí)間和成本,提高了數(shù)據(jù)終端設(shè)備產(chǎn)品研 發(fā)的定制化能力和速度。
圖1為本發(fā)明Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器的系統(tǒng)的結(jié)構(gòu) 框圖;圖2為本發(fā)明Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器的方法的流程圖;圖3為本發(fā)明中虛擬設(shè)備驅(qū)動(dòng)為Win32應(yīng)用程序所在的進(jìn)程申請(qǐng)讀寫IO 端口的權(quán)限的流程圖;圖4為本發(fā)明中PCI協(xié)議數(shù)的示意圖;圖5為本發(fā)明中Win32應(yīng)用程序通過向特定10端口寫入PCI協(xié)議數(shù)的示意圖。
具體實(shí)施方式
為解決上述現(xiàn)有技術(shù)中存在的無法在Win2000/XP下用Win32應(yīng)用程序讀 寫數(shù)據(jù)終端設(shè)備的PCI寄存器的問題,本發(fā)明通過虛擬設(shè)備驅(qū)動(dòng)來為Win32 應(yīng)用程序和PCI硬件搭橋,以間接的方式使得Win32應(yīng)用程序能夠讀寫PCI 寄存器。下面將結(jié)合各個(gè)附圖對(duì)本發(fā)明的具體實(shí)現(xiàn)過程進(jìn)行進(jìn)一步詳細(xì)的說明。 請(qǐng)參閱圖1,該圖為本發(fā)明Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器 的系統(tǒng)的結(jié)構(gòu)框圖,由圖中可見,本發(fā)明所述系統(tǒng)從邏輯的角度涉及到4個(gè)層 面, 一是Win32應(yīng)用層,二是驅(qū)動(dòng)層,三是OS(操作系統(tǒng))層,四是PCI硬 件層。其中OS層和PCI硬件層是已有的技術(shù),也就是說OS層指Win2000/XP,
已經(jīng)提供了對(duì)讀寫IO端口的鑒權(quán),由于現(xiàn)有技術(shù)中Win32應(yīng)用程序的IOPM (10 Permission Bit Map, IO許可位圖)無法通過該鑒權(quán),而導(dǎo)致不能讀寫IO 端口,更不能讀寫PCI寄存器。PCI硬件層是指數(shù)據(jù)終端設(shè)備,這類設(shè)備一般 都嵌入了 USB和PCI的轉(zhuǎn)接芯片,而這些芯片的配置寄存器如果能夠方便的 被讀寫,將給數(shù)據(jù)卡廠商帶來極大的便利性和可擴(kuò)展性。Win32應(yīng)用層和驅(qū)動(dòng) 層是本發(fā)明的重點(diǎn),本發(fā)明根據(jù)Win32應(yīng)用程序不被OS內(nèi)核信任,而虛擬設(shè) 備驅(qū)動(dòng)被內(nèi)核信任的特點(diǎn),利用虛擬設(shè)備驅(qū)動(dòng)來為Win32應(yīng)用程序申請(qǐng)讀寫IO 端口的權(quán)限。本發(fā)明中,應(yīng)用層依賴驅(qū)動(dòng)層來申請(qǐng)和釋放權(quán)限,驅(qū)動(dòng)層完成實(shí)際的申請(qǐng) 和釋放功能。Win32應(yīng)用程序通過OS層把PCI寄存器的地址解析成IO端口 地址,操作系統(tǒng)OS層和PCI硬件層交互實(shí)現(xiàn)對(duì)PCI寄存器的讀寫,從而從應(yīng) 用程序的角度,實(shí)現(xiàn)了直接讀寫PCI寄存器。由圖l可見,本發(fā)明所述系統(tǒng)主要包括以下模塊鑒權(quán)模塊、PCI硬件模 塊、權(quán)限申請(qǐng)模塊、權(quán)限釋放模塊、驅(qū)動(dòng)申請(qǐng)權(quán)限模塊、驅(qū)動(dòng)釋放權(quán)限模塊和 寄存器讀寫模塊。其中鑒權(quán)模塊和PCI硬件模塊是現(xiàn)有技術(shù)已經(jīng)實(shí)現(xiàn)的模塊, 而其他模塊屬于創(chuàng)新部分,下面分別簡(jiǎn)述一下各個(gè)模塊的主要功能。鑒權(quán)模塊,屬于Win2000/XP操作系統(tǒng)的一部分,用于鑒權(quán)Win32應(yīng)用程 序所在進(jìn)程是否有操作IO端口的權(quán)限。PCI硬件模塊,是由硬件組成的計(jì)算機(jī)外設(shè),進(jìn)一步說,只要以基于USB 架構(gòu)的PCI總線方式實(shí)現(xiàn)的硬件,即只要硬件中包括USB Host Controller芯片 組,例如Philips、 NEC等,就在本發(fā)明適用的范圍之內(nèi)。權(quán)限申請(qǐng)模塊,屬于上層Win32應(yīng)用程序的一部分,功能是通過和驅(qū)動(dòng)申 請(qǐng)權(quán)限模塊交互,完成自身所在的Win32應(yīng)用程序的IO端口讀寫權(quán)限的申請(qǐng)。權(quán)限釋放模塊,屬于上層Win32應(yīng)用程序的一部分,功能是通過和驅(qū)動(dòng)釋 放權(quán)限模塊交互,完成自身所在的Win32應(yīng)用程序的IO端口讀寫權(quán)限的釋放, 釋放權(quán)限的目的主要是為了維護(hù)Win2000/XP操作系統(tǒng)的穩(wěn)定性和安全性。 驅(qū)動(dòng)申請(qǐng)權(quán)限模塊,屬于虛擬設(shè)備驅(qū)動(dòng)程序的一部分,功能是通過Win2000/XP操作系統(tǒng)對(duì)自身的信任,為上層Win32應(yīng)用程序申請(qǐng)IO端口讀寫權(quán)限。驅(qū)動(dòng)釋放權(quán)限模塊,屬于虛擬設(shè)備驅(qū)動(dòng)程序的一部分,功能是通過 Win2000/XP操作系統(tǒng)對(duì)自身的信任,為上層Win32應(yīng)用程序釋放IO端口讀寫 權(quán)限。寄存器讀寫模塊,屬于上層Win32應(yīng)用程序的一部分,功能是把要讀寫的 PCI寄存器映射為IO端口地址,并對(duì)其進(jìn)行讀寫。上述七個(gè)模塊從邏輯的角度分屬于四個(gè)層面,其中權(quán)限申請(qǐng)模塊、權(quán)限釋 放模塊和寄存器讀寫模塊屬于Win32應(yīng)用層,驅(qū)動(dòng)申請(qǐng)權(quán)限模塊和驅(qū)動(dòng)釋放權(quán) 限模塊屬于驅(qū)動(dòng)層,鑒權(quán)模塊屬于OS層,PCI硬件模塊屬于硬件層。本發(fā)明 系統(tǒng)的各個(gè)組成模塊之間互相影響,緊密依存,共同實(shí)現(xiàn)了在Win2000/XP下 讀寫數(shù)據(jù)終端設(shè)備的PCI寄存器。請(qǐng)參閱圖2,該圖為本發(fā)明Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器 的方法的流程圖,其主要包括步驟步驟10、 Win32應(yīng)用程序向虛擬設(shè)備驅(qū)動(dòng)發(fā)出讀寫PCI寄存器的請(qǐng)求,請(qǐng) 求替自己所在進(jìn)程申請(qǐng)10端口的讀寫權(quán)限。本步驟中,Win32應(yīng)用程序通過IOCTL (Input Output Control,輸入輸出 控制)函數(shù)的方式和虛擬設(shè)備驅(qū)動(dòng)通信,實(shí)現(xiàn)必須采用異步的方式來完成。 Win32應(yīng)用程序異步打開虛擬設(shè)備,發(fā)送異步IOCTL請(qǐng)求給虛擬設(shè)備驅(qū)動(dòng), 虛擬設(shè)備驅(qū)動(dòng)直接開始處理或者將請(qǐng)求入隊(duì)。若虛擬設(shè)備驅(qū)動(dòng)將請(qǐng)求入隊(duì),則 向Win32應(yīng)用程序返回Pending(掛起),并依次處理隊(duì)列中的請(qǐng)求,此時(shí)Win32 應(yīng)用程序必須處理驅(qū)動(dòng)Pending (掛起)的情況,并且建議處理Cancel (取消) 的情況。進(jìn)一步說,由于虛擬設(shè)備驅(qū)動(dòng)的特殊性,Win32應(yīng)用程序不能用同步 等待的方式來獲取結(jié)果,本部分中有三個(gè)關(guān)鍵技術(shù)點(diǎn) 一個(gè)是Win32應(yīng)用程 序應(yīng)該用多線程的方式來處理和虛擬設(shè)備有關(guān)的交互,另 一個(gè)是Win32應(yīng)用程
序必須異步處理包括Pending和Cancel在內(nèi)的多種情況。三是若驅(qū)動(dòng)返回 Pending, Win32應(yīng)用程序需要使用信號(hào)量來掛起等待,而驅(qū)動(dòng)執(zhí)行完實(shí)際的請(qǐng) 求后,必須給Win32應(yīng)用程序發(fā)送信號(hào)量來通知,這樣Win32應(yīng)用程序就可 以根據(jù)返回的結(jié)果看對(duì)IOPM的修改是否成功。步驟11 、虛擬設(shè)備驅(qū)動(dòng)向Win2000/XP操作系統(tǒng)內(nèi)核申請(qǐng)讀寫IO端口的 權(quán)限。請(qǐng)參閱圖3,該圖為本發(fā)明中虛擬設(shè)備驅(qū)動(dòng)為Win32應(yīng)用程序所在的進(jìn)程 申請(qǐng)讀寫IO端口的權(quán)限的流程圖,其具體實(shí)現(xiàn)過程為步驟110、虛擬設(shè)備驅(qū)動(dòng)申請(qǐng)NonCache (非緩沖)空間,根據(jù)Win32應(yīng) 用程序所在進(jìn)程的IO許可位圖將空間大小設(shè)定為8K字節(jié);操作系統(tǒng)是根據(jù)進(jìn)程的IOPM (IO Permission Bit Map, IO許可位圖)來 確定進(jìn)程是否有訪問IO端口的權(quán)限。Win2000/XP支持至少16位的10端口尋 址,也就是64K個(gè)IO設(shè)備地址,如果用一個(gè)bit表示一個(gè)IO設(shè)備,那么需要 8K的空間,Windows操作系統(tǒng)給每個(gè)進(jìn)程分配8K空間用于標(biāo)志對(duì)10端口的 訪問情況。本步驟中需要將非緩存空間大小設(shè)定為0x2000,也就是8K字節(jié)。步驟111、虛擬設(shè)備驅(qū)動(dòng)將申請(qǐng)的非緩存空間中和PCI寄存器有關(guān)的10端 口地址位賦值為1,其余賦值為0;虛擬設(shè)備驅(qū)動(dòng)將和PCI寄存器有關(guān)的10端口地址,即該空間的Oxc仿和 Oxcfc位賦值為Oxl, 4巴其他bit賦值為0x0。進(jìn)一步說,就是允許Win32應(yīng)用 程序所在進(jìn)程對(duì)0xcf8和Oxcfc的10端口進(jìn)行訪問。步驟112、虛擬設(shè)備驅(qū)動(dòng)將所述空間的內(nèi)容覆蓋到Win32應(yīng)用程序所在進(jìn) 程的IO許可位圖中;另外,為了本發(fā)明方案的穩(wěn)定性和安全性,需要在對(duì)IOPM塊覆蓋之前, 先對(duì)其內(nèi)容進(jìn)行備份處理,然后再覆蓋,覆蓋后,Win32應(yīng)用程序可以依此完 成對(duì)PCI寄存器的讀寫,讀寫完成之后,需要根據(jù)備份的IOPM內(nèi)容來恢復(fù) IOPM。 步驟12、虛擬設(shè)備驅(qū)動(dòng)向Win32應(yīng)用程序返回權(quán)限申請(qǐng)成功消息。步驟13 、 Win32應(yīng)用程序向Win2000/XP操作系統(tǒng)發(fā)出讀寫PCI寄存器的 請(qǐng)求,Win2000/XP操作系統(tǒng)接到請(qǐng)求后,認(rèn)為PCI寄存器屬于10端口 ,于是 查該Win應(yīng)用程序所在進(jìn)程的IO端口讀寫權(quán)限,Win2000/XP操作系統(tǒng)會(huì)根據(jù) 賦值的Oxl來允許對(duì)OxcfB和Oxcfc這兩個(gè)10端口地址的訪問。步驟14、 Win32應(yīng)用程序根據(jù)數(shù)據(jù)終端設(shè)備的總線號(hào)、設(shè)備號(hào)、功能號(hào)及 目標(biāo)讀寫PCI寄存器的地址確定出一個(gè)32位的PCI協(xié)議數(shù)。請(qǐng)參閱圖4,該圖為本發(fā)明中PCI協(xié)議數(shù)的示意圖,PCI協(xié)議數(shù)的第O到 7位,共8bit是寄存器地址,根據(jù)PCI協(xié)議O到lbit必須為0,也就是說寄存 器號(hào)必須大于4,這個(gè)所有芯片的配置寄存器都大于4,是滿足的。PCI協(xié)議數(shù) 的第8到10位,共3bit是PCI功能號(hào)的值,也就是說功能號(hào)是不超過7的數(shù) 值。PCI協(xié)議數(shù)的第11到15位,共5bit是PCI設(shè)備號(hào)的值,也就是說設(shè)備 號(hào)是不能超過31的數(shù)值。PCI協(xié)議數(shù)的第16到23位,共8bit是PCI總線號(hào) 的值,也就是說總線號(hào)是不能超過255的數(shù)值。PCI協(xié)議數(shù)的第24到30位是 保留的,為0。第31為是PCI配置空間使能位,應(yīng)該設(shè)置為1。進(jìn)一步說,就 是用IO端口這種方式對(duì)PCI寄存器進(jìn)行讀寫,能夠?qū)ぶ纷疃?56條總線,32 個(gè)設(shè)備,8功能,128寄存器的尋址,并且對(duì)寄存器尋址必須第0到1位是保 留的0。步驟15、 Win32應(yīng)用程序通過向特定10端口寫入所述PCI協(xié)議數(shù)來實(shí)現(xiàn) 對(duì)PCI寄存器的讀寫。請(qǐng)參閱圖5,該圖為本發(fā)明中Win32應(yīng)用程序通過向特定10端口寫入PCI 協(xié)議數(shù)的示意圖,本發(fā)明中完成對(duì)PCI寄存器的讀寫是靠向特定10端口讀寫 PCI協(xié)議數(shù)來完成的,對(duì)于PCI寄存器,需要對(duì)IO端口地址0xcf8和0xcfc進(jìn) 行訪問,當(dāng)Win32應(yīng)用程序已經(jīng)申請(qǐng)了對(duì)這兩個(gè)地址讀寫的4又限以后,就可以 開始實(shí)現(xiàn)對(duì)PCI寄存器的讀寫了。對(duì)于讀,先向Oxcf8寫入PCI協(xié)議數(shù),之后, 對(duì)應(yīng)PCI設(shè)備的寄存器的值會(huì)自動(dòng)反映到10端口地址Oxcfc上,此時(shí)Win32
應(yīng)用程序從0xcfc地址讀取數(shù)值即可。對(duì)于寫,先向0xcf8寫入PCI協(xié)議數(shù), 然后向IO端口地址Oxcfc寫入需要設(shè)定的值即可。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā) 明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及 其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1、一種Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器的方法,其特征在于,包括步驟A、Win32應(yīng)用程序通過虛擬設(shè)備驅(qū)動(dòng)為自身所在進(jìn)程向Win2000/XP操作系統(tǒng)申請(qǐng)IO端口讀寫權(quán)限;B、Win32應(yīng)用程序向Win2000/XP操作系統(tǒng)發(fā)出讀寫PCI寄存器的請(qǐng)求,若Win2000/XP操作系統(tǒng)鑒權(quán)該Win32應(yīng)用程序所在進(jìn)程具有IO端口讀寫權(quán)限,則同意該請(qǐng)求;C、Win32應(yīng)用程序根據(jù)PCI寄存器地址確定出PCI協(xié)議數(shù),并通過向特定IO端口寫入所述PCI協(xié)議數(shù)來實(shí)現(xiàn)對(duì)PCI寄存器的讀寫。
2、 如權(quán)利要求l所述的方法,其特征在于,所述步驟A與步驟B之間還 包括虛擬設(shè)備驅(qū)動(dòng)向Win32應(yīng)用程序回復(fù)權(quán)限申請(qǐng)成功消息的步驟。
3、 如權(quán)利要求1所述的方法,其特征在于,Win32應(yīng)用程序采用異步方 式通過輸入輸出控制函數(shù)和虛擬設(shè)備驅(qū)動(dòng)通信。
4、 如權(quán)利要求l所述的方法,其特征在于,所述步驟A具體包括步驟 Win32應(yīng)用程序?yàn)樽陨硭谶M(jìn)程向虛擬設(shè)備驅(qū)動(dòng)申請(qǐng)IO端口讀寫權(quán)限; 虛擬設(shè)備驅(qū)動(dòng)申請(qǐng)非緩沖空間,根據(jù)Win32應(yīng)用程序所在進(jìn)程的10許可位圖將空間大小設(shè)定為8K字節(jié),將其中和PCI寄存器有關(guān)的10端口地址位 賦值為1,其余賦值為0;虛擬設(shè)備驅(qū)動(dòng)將所述空間的內(nèi)容覆蓋到Win32應(yīng)用程序所在進(jìn)程的IO許 可位圖中。
5、 如權(quán)利要求4所述的方法,其特征在于,所述步驟B中,當(dāng)Win2000/XP 操作系統(tǒng)對(duì)Win32應(yīng)用程序所在進(jìn)程進(jìn)行10端口訪問鑒權(quán)時(shí),允許Win32應(yīng) 用程序所在進(jìn)程訪問賦值為1的IO端口地址位,使得Win32應(yīng)用程序可以讀 寫PCI寄存器。
6、 如權(quán)利要求5所述的方法,其特征在于,虛擬設(shè)備驅(qū)動(dòng)將所述空間的 內(nèi)容覆蓋到Win32應(yīng)用程序所在進(jìn)程的10許可位圖中之前,先對(duì)Win32應(yīng)用 程序所在進(jìn)程的IO許可位圖的內(nèi)容進(jìn)行備份處理;Win32應(yīng)用程序讀寫PCI寄存器完成后,虛擬設(shè)備驅(qū)動(dòng)根據(jù)所述備份的10 許可位圖的內(nèi)容來恢復(fù)Win32應(yīng)用程序所在進(jìn)程的IO許可位圖。
7、 如權(quán)利要求1所述的方法,其特征在于,Win32應(yīng)用程序根據(jù)數(shù)據(jù)終 端設(shè)備的總線號(hào)、設(shè)備號(hào)、功能號(hào)及目標(biāo)讀寫PCI寄存器的地址確定出一個(gè)32 位的PCI協(xié)議數(shù)。
8、 如權(quán)利要求7所述的方法,其特征在于,所述PCI協(xié)議數(shù)的第0至7 位是目標(biāo)PCI寄存器的地址,第8至IO位是PCI功能號(hào)的值,第11至15位 是PCI設(shè)備號(hào)的值,第16至23位,是PCI總線號(hào)的值,第24至30位是保留 的,為O,第31為是PCI配置空間使能位,設(shè)置為1。
9、 一種Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器的系統(tǒng),其特征在于, 包括權(quán)限申請(qǐng)模塊、驅(qū)動(dòng)申請(qǐng)權(quán)限模塊、鑒權(quán)模塊和寄存器讀寫模塊,其中,權(quán)限申請(qǐng)模塊,屬于Win32應(yīng)用程序,用于通過驅(qū)動(dòng)申請(qǐng)權(quán)限模塊為自身 所在進(jìn)程向Win2000/XP操作系統(tǒng)申請(qǐng)10端口讀寫權(quán)限;驅(qū)動(dòng)申請(qǐng)權(quán)限模塊,屬于虛擬設(shè)備驅(qū)動(dòng)程序,用于為Win32應(yīng)用程序向 Win2000/XP操作系統(tǒng)申請(qǐng)IO端口讀寫權(quán)限;鑒權(quán)模塊,屬于Win2000/XP操作系統(tǒng),用于鑒權(quán)Win32應(yīng)用程序所在進(jìn) 程是否具有IO端口讀寫權(quán)限;寄存器讀寫模塊,屬于Win32應(yīng)用程序,在OS鑒權(quán)模塊確定Win32應(yīng)用 程序所在進(jìn)程具有10端口讀寫權(quán)限時(shí),用于根據(jù)PCI寄存器地址確定出PCI 協(xié)議數(shù),并通過向特定10端口寫入所述PCI協(xié)議數(shù)來實(shí)現(xiàn)對(duì)PCI寄存器的讀 寫。
10、 如權(quán)利要求9所述的系統(tǒng),其特征在于,還包括權(quán)限釋放模塊和驅(qū)動(dòng) 釋放權(quán)限模塊,其中,權(quán)限釋放模塊、屬于Win32應(yīng)用程序,通過和驅(qū)動(dòng)釋放權(quán)限模塊交互,完成自身所在的Win32應(yīng)用程序的10端口讀寫權(quán)限的釋放;驅(qū)動(dòng)釋放權(quán)限纟莫塊,屬于虛擬設(shè)備驅(qū)動(dòng)程序,用于通過和Win2000/XP操 作系統(tǒng)交互為Win32應(yīng)用程序釋放IO端口讀寫權(quán)限。
全文摘要
本發(fā)明公開了一種Win2000/XP下讀寫數(shù)據(jù)終端設(shè)備PCI寄存器的方法及系統(tǒng),所述方法包括Win32應(yīng)用程序通過虛擬設(shè)備驅(qū)動(dòng)為自身所在進(jìn)程向Win2000/XP操作系統(tǒng)申請(qǐng)IO端口讀寫權(quán)限,Win32應(yīng)用程序向Win2000/XP操作系統(tǒng)發(fā)出讀寫PCI寄存器的請(qǐng)求,若Win2000/XP操作系統(tǒng)鑒權(quán)同意該請(qǐng)求,Win32應(yīng)用程序根據(jù)PCI寄存器地址確定出PCI協(xié)議數(shù),并通過向特定IO端口寫入所述PCI協(xié)議數(shù)來實(shí)現(xiàn)對(duì)PCI寄存器的讀寫;所述系統(tǒng)包括權(quán)限申請(qǐng)模塊、驅(qū)動(dòng)申請(qǐng)權(quán)限模塊、鑒權(quán)模塊和寄存器讀寫模塊。本發(fā)明使得Win32應(yīng)用程序能夠以間接方式讀寫PCI寄存器。
文檔編號(hào)G06F13/10GK101131680SQ20071014288
公開日2008年2月27日 申請(qǐng)日期2007年8月2日 優(yōu)先權(quán)日2007年8月2日
發(fā)明者畢澤紅 申請(qǐng)人:中興通訊股份有限公司