吳義滿
(鹽城衛(wèi)生職業(yè)技術(shù)學(xué)院 江蘇 鹽城224001)
XP系統(tǒng)下對(duì)內(nèi)存和IO端口訪問(wèn)的研究
吳義滿
(鹽城衛(wèi)生職業(yè)技術(shù)學(xué)院 江蘇 鹽城224001)
在工業(yè)控制領(lǐng)域,ISA總線等的計(jì)算機(jī)和擴(kuò)展板在廠商不提供LabVIEW驅(qū)動(dòng)的情況下,由用戶自己編寫(xiě)驅(qū)動(dòng)程序?qū)U(kuò)展板進(jìn)行訪問(wèn)是十分困難的事。本文通過(guò)使用早期LabVIEW版本的cvintdrv.sys底層驅(qū)動(dòng),結(jié)合新版本Lab-VIEW的強(qiáng)大功能,以調(diào)用cviVXDWrapper.dll的方式就可以實(shí)現(xiàn)對(duì)物理內(nèi)存和IO端口的訪問(wèn)。此方法實(shí)現(xiàn)在XP系統(tǒng)下對(duì)內(nèi)存和IO端口的訪問(wèn),通過(guò)實(shí)踐驗(yàn)證與用其它方法相比,實(shí)現(xiàn)效率更高,對(duì)相關(guān)研究在對(duì)內(nèi)存和IO端口的訪問(wèn)工程師有一定的理論和實(shí)踐指導(dǎo)意義。
LabVIEW;物理內(nèi)存訪問(wèn);IO端口讀寫(xiě);DLL調(diào)用
在工業(yè)控制或者儀器儀表檢測(cè)中,工程師經(jīng)常會(huì)用到ISA總線、PC104總線、PCI總線等的計(jì)算機(jī)主板和各種數(shù)字量、模擬量輸入輸出的采集板一起使用組成功能強(qiáng)大的測(cè)試控制系統(tǒng)[1-6]。在測(cè)試系統(tǒng)中人機(jī)界面是很重要的部分,所以工程師一般會(huì)選用Windows XP這種人人熟知的操作系統(tǒng),采用LabVIEW編寫(xiě)測(cè)試程序。之所以很多工程師喜歡選擇LabVIEW編寫(xiě)測(cè)試程序,是與LabVIEW軟件獨(dú)特的編程優(yōu)勢(shì)分不開(kāi)的:LabVIEW是專為測(cè)量、數(shù)據(jù)分析并提交結(jié)果而設(shè)計(jì),以G語(yǔ)言為基礎(chǔ),采用圖形化的編程方式,無(wú)須掌握復(fù)雜的編程技巧便可完成程序設(shè)計(jì),操作簡(jiǎn)便卻功能強(qiáng)大[7-8]。
因一些采集板廠商不提供在LabVIEW環(huán)境下編程的驅(qū)動(dòng),則需要工程師自己想辦法實(shí)現(xiàn)對(duì)采集板的讀寫(xiě)操作,而寫(xiě)驅(qū)動(dòng)程序需要一定的專業(yè)知識(shí),對(duì)沒(méi)有寫(xiě)過(guò)驅(qū)動(dòng)的工程師來(lái)說(shuō)并不是件容易的事,尋找一個(gè)簡(jiǎn)單的方式在XP系統(tǒng)下利用LabVIEW軟件對(duì)內(nèi)存和IO口的訪問(wèn)就顯得十分重要。
cvintdrv.sys是LabVIEW實(shí)現(xiàn)I/O端口VI和物理內(nèi)存訪問(wèn)函數(shù)的底層驅(qū)動(dòng)。該驅(qū)動(dòng)安裝在帶有LabVIEW運(yùn)行引擎和LabWindows/CVI運(yùn)行引擎的Windows操作系統(tǒng)中。
但在2011年11月NI公司檢測(cè)到該驅(qū)動(dòng)存在安全漏洞,該安全漏洞可能導(dǎo)致沒(méi)有管理員權(quán)限的應(yīng)用程序獲得權(quán)限的非法升級(jí)。所以將此驅(qū)動(dòng)程序進(jìn)行了升級(jí),升級(jí)后,使用I/O端口VI的底層驅(qū)動(dòng)的應(yīng)用程序只有獲得管理員權(quán)限,才能夠運(yùn)行。如果沒(méi)有獲得管理員權(quán)限,調(diào)用I/O端口VI和函數(shù)將返回運(yùn)行錯(cuò)誤。應(yīng)用程序不再能使用物理內(nèi)存訪問(wèn)函數(shù)。所有條件下,物理內(nèi)存訪問(wèn)將返回運(yùn)行錯(cuò)誤。這樣一來(lái),使得對(duì)內(nèi)存的訪問(wèn)變成了不可能,對(duì)IO端口的訪問(wèn)也受到了一定的限制。
查找相關(guān)材料發(fā)現(xiàn):關(guān)于讀寫(xiě)物理內(nèi)存的方法,有工程師介紹用 LabVIEW 帶的 cviVXDWrapper.dll中的函數(shù)Read From Physical Memory,來(lái)實(shí)現(xiàn)對(duì)物理內(nèi)存的讀操作。遺憾的是,實(shí)際上按照此方法做了之后并不能讀取到數(shù)據(jù),原因就是因?yàn)楝F(xiàn)在所使用的版本的LabVIEW已經(jīng)將此功能取消,不再允許用戶使用。那么能否將現(xiàn)版本的LabVIEW的此項(xiàng)功能恢復(fù)呢?答案是肯定的。其實(shí)LabVIEW8.0版本的此項(xiàng)功能是完全可以使用的,但是8.0版本在其他方面并不能像2013等較新的版本滿足用戶的使用需求。如果能在現(xiàn)在主流的版本上也能使用訪問(wèn)物理內(nèi)存和IO口,是最想要的。可以按照下面方法實(shí)現(xiàn)能在現(xiàn)在主流的版本上也能使用訪問(wèn)物理內(nèi)存和 IO口。首先安裝 LabVIEW8.0版本,安裝后 C: WINDOWSsystem32drivers下會(huì)產(chǎn)生一個(gè) cvintdrv系統(tǒng)文件,此文件是尚未升級(jí)的驅(qū)動(dòng)文件,將此文件備份。然后再安裝想用的LabVIEW版本,完成后同樣會(huì)生成cvintdrv系統(tǒng)文件,將原來(lái)保存的尚未升級(jí)的驅(qū)動(dòng)文件替代新的驅(qū)動(dòng)文件。這樣新版本的軟件就可以實(shí)現(xiàn)物理內(nèi)存的訪問(wèn)和IO端口的讀寫(xiě)了。其實(shí)新舊版本的LabVIEW的安裝順序并無(wú)要求,只要保證最終使用的驅(qū)動(dòng)程序文件cvintdrv.sys是未更新之前的就可以了,筆者的是2004-7-26的。下面給出使用方法:首先,在函數(shù)選板里面找到互連接口,在其庫(kù)與可執(zhí)行程序下面找到調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)如圖1所示。

圖1 調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)Fig.1 Call library function node
接著,雙擊上面庫(kù)函數(shù)節(jié)點(diǎn)進(jìn)入調(diào)用函數(shù)庫(kù)設(shè)置如圖2所示。

圖2 調(diào)用函數(shù)庫(kù)設(shè)置Fig.2 Set the function library
點(diǎn)擊上面的路徑選擇找到安裝路徑下的resource文件夾下的cviVXDWrapper.dll文件,在函數(shù)名中選擇需要用的函數(shù),在線程中選擇在任意線程中運(yùn)行,在調(diào)用規(guī)范中選擇stdcall(WINAPI)圖3所示。

圖3 調(diào)用函數(shù)庫(kù)選擇Fig.3 Call the function library of choice
根據(jù)函數(shù)原型設(shè)置參數(shù),如圖4所示。

圖4 調(diào)用函數(shù)庫(kù)設(shè)置Fig.4 Set the function library
設(shè)置完成后就可以編寫(xiě)程序,簡(jiǎn)單的例子如圖5所示。

圖5 讀內(nèi)存程序Fig.5 The program of reading memory
前面板讀到的數(shù)據(jù)如圖6所示。

圖6 讀內(nèi)存程序運(yùn)行結(jié)果Fig.6 Operation result of reading memory program
成功讀到了內(nèi)存中的數(shù)據(jù),如果需要向內(nèi)存中寫(xiě)數(shù)據(jù),只要按照上面的步驟將圖3中函數(shù)名的選項(xiàng)選擇為WriteToPhysicalMemory即可。下面介紹對(duì)IO端口的讀寫(xiě)操作,IO端口的讀寫(xiě)操作有兩種方法,一種是利用LabVIEW封裝好的讀端口和寫(xiě)端口函數(shù),另一種是利用cviVXDWrapper.dll文件中的CVI_in和CVI_out函數(shù)。下面分別介紹使用方法。LabVIEW封裝好的讀端口和寫(xiě)端口函數(shù)位于互聯(lián)接口下的IO端口下,如圖7所示,點(diǎn)擊函數(shù)放到程序框圖上,對(duì)于讀端口函數(shù),可以選擇8位讀,16位讀和32位讀,也可以選擇自動(dòng),如圖8所示,然后在地址端連接地址輸入控件。在數(shù)據(jù)讀取端連接顯示控件,即可看到從輸入地址的端口讀取到數(shù)據(jù)。對(duì)于寫(xiě)端口函數(shù),卻不能像讀端口那樣選擇操作的位數(shù),只能進(jìn)行8位寫(xiě),將地址接線端和寫(xiě)入值接線端連接輸入控件,即可將寫(xiě)入值數(shù)據(jù)寫(xiě)入地址端口中。

圖7 讀端口和寫(xiě)端口函數(shù)Fig.7 Read and write ports function

圖8 讀端口位數(shù)選擇Fig.8 Read port digit selection
上面的寫(xiě)端口不能進(jìn)行16位和32位操作往往會(huì)給大家的使用帶來(lái)一些不方便,那么使用cviVXDWrapper.dll文件中的CVI_out函數(shù)便可輕松解決這個(gè)弊端。其使用方法,首先調(diào)用cviVXDWrapper.dll庫(kù)函數(shù),在函數(shù)名處選擇想要使用的函數(shù),CVI_outp為寫(xiě)入一個(gè)字節(jié),CVI_outpw為寫(xiě)入一個(gè)字,即兩個(gè)字節(jié),CVI_outpd為寫(xiě)入雙字,即4個(gè)字節(jié)。例如選擇CVI_outpw16位寫(xiě),參數(shù)設(shè)置,要分別設(shè)置了返回值、端口地址和寫(xiě)入數(shù)據(jù)。當(dāng)設(shè)置完參數(shù)后下面會(huì)有個(gè)函數(shù)原型顯示,int16_t CVI_outpw(uint16_t端口地址,int32_t寫(xiě)入數(shù)據(jù))。將此與正確的函數(shù)原型對(duì)比一下,以免設(shè)置錯(cuò)誤導(dǎo)致不正確的操作。
針對(duì)在XP系統(tǒng)下利用LabVIEW軟件對(duì)內(nèi)存和IO口的訪問(wèn)的難題,文中詳細(xì)闡述了 Windows XP系統(tǒng)下利用LabVIEW實(shí)現(xiàn)對(duì)計(jì)算機(jī)物理內(nèi)存和IO口的讀寫(xiě)的簡(jiǎn)單的實(shí)現(xiàn)方案。該實(shí)現(xiàn)方案通過(guò)實(shí)際工程驗(yàn)證簡(jiǎn)單易行,該方案方便了工程師在ISA、PC104、PCI等總線的測(cè)試系統(tǒng)中對(duì)擴(kuò)展板的操作。
由于此方法是NI公司作為漏洞對(duì)用戶關(guān)閉掉的功能,所以在使用過(guò)程中一定要注意對(duì)使用該功能的計(jì)算機(jī)使用權(quán)限的管理和保護(hù)。
對(duì)于有些應(yīng)用有時(shí)會(huì)遇到需要使用中斷的情況,比如AD轉(zhuǎn)換等,在文中介紹的動(dòng)態(tài)鏈接庫(kù)cviVXDWrapper.dll中也有對(duì)中斷的操作函數(shù)(中斷使能、讀取中斷狀態(tài)和中斷關(guān)閉)有興趣的工程師可以參照上面介紹的方法做進(jìn)一步的研究。
此外,近年來(lái)流行的物理內(nèi)存鏡像文件的內(nèi)存取證技術(shù)研究人員越來(lái)越多,本課題的研究對(duì)于研究物理內(nèi)存取證有一定的借鑒和啟發(fā)意義[9-11]。
[1]屈汝祥,劉成強(qiáng),胡喬朋,等.PC104總線在測(cè)試設(shè)備中的應(yīng)用[J].測(cè)控技術(shù),2014(4):107-109.QU Ru-xiang,LIU Cheng-qiang,HU Qiao-peng,et al.Application of PC104 bus in test equipment[J].Measurement& Control Technology,2014(4):107-109.
[2]張蕊,郎杰.基于PXI總線的自動(dòng)測(cè)試系統(tǒng)設(shè)計(jì)[J].光電技術(shù)應(yīng)用,2014(3):44-47.ZHANG Rui,LANG Jie.Academy of opto-electronics design of automatic test system based on PXI Bus[J].Electro-Optic Technology Application,2014(3):44-47.
[3]王炬城,陳平,李站.基于Compact PCI熱插拔模塊設(shè)計(jì)[J].中國(guó)集成電路,2014(3):27-31.WANG Ju-cheng,CHEN Ping,LI Zhan.Design of hot swapmodule based on Compact PCI[J].China Integrated Circuit, 2014(3):27-31.
[4]方寶林.PCI-E總線高速數(shù)據(jù)采集卡的研制[D].北京:北京交通大學(xué),2014.
[5]賈佳.基于LabVIEW的PCI數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].工業(yè)儀表與自動(dòng)化裝置,2012(6):69-71.JIA Jia.Design of PCI data acquisition system based on LabVIEW[J].Industrial Instrumentation&Automation, 2012(6):69-71.
[6]陽(yáng)建華,鄭瑩娜,曠雪梅,等.基于PCI-1220U的電動(dòng)助力轉(zhuǎn)向器性能測(cè)試系統(tǒng)研究 [J].工業(yè)儀表與自動(dòng)化裝置,2013(2):22-26.YANG Jian-hua,ZHENG Ying-na,KUANG Xue-mei,et al.Research on performance test of electric power steering system based on PCI-1220U[J].Industrial Instrumentation& Automation,2013(2):22-26.
[7]鄭對(duì)元.精通LabVIEW虛擬儀器程序設(shè)計(jì) [M].北京:清華大學(xué)出版社,2012.
[8]韓琪.基于虛擬儀器的數(shù)據(jù)采集與分析系統(tǒng)研究與設(shè)計(jì)[D].北京:北京交通大學(xué),2012.
[9]蘇貞.基于物理內(nèi)存獲取的在線取證的可信性分析[D].濟(jì)南:山東輕工業(yè)學(xué)院,2012.
[10]桑廳.內(nèi)存取證工具的研究與實(shí)現(xiàn)[D].上海:上海交通大學(xué), 2013.
[11]茍木理.面向Windows8物理內(nèi)存鏡像文件的內(nèi)存取證技術(shù)研究[D].重慶:重慶大學(xué),2013.
The countermeasure of access to memory and I/O port in W indows XP
WU Yi-man
(Yancheng Health Vocational and Technology College,Yancheng 224001,China)
In the field of industrial control,the computer and the expansion of the ISA bus and so on board vendors do not provide the LabVIEW driver,in case of which,the user can write his own driver on a visit to extended board which is a very difficult thing.In this paper,by using LabVIEW early version of the cvintdrv and Sys the underlying drivers,combined with the new version to the powerful features of the LabVIEW,to invoke cviVXDWrapper,DLL way can achieve access to physical memory and I/o ports.This method to implement under XP system access to memory and I/o ports,and compared with other methods are verified through the practice,to achieve more efficient,the related research on access to memory and I/o port engineer has certain theoretical and practical guiding significance.
LabVIEW;access to physical memory;read and write IO port;DLL call
TN0
A
1674-6236(2015)10-0033-03
2014-09-12 稿件編號(hào):201409094
吳義滿(1976—),男,安徽安慶人,碩士研究生,講師。研究方向:虛擬儀器、醫(yī)用電子儀器。