一
在window系統中應用層程式沒有許可權訪問底層,為了實現埠或者暫存器操作,就要借助高許可權的程式。一般是將winio.dll 載入到驅動,借道實現底層操作。就好像我們借助驅動程式操作外設一樣。
64位系統的應用層是相容32位程式的,但驅動層是不能向下相容的,所以winio64和winio32要用對。
因為需要載入驅動,程式要以管理員許可權執行,我用的是64位win7系統,還需要對winio64.sys做交叉簽名才能正常載入,沒有簽名的同學需要使用32位系統或使用測試模式。為了省去動態載入dll,再動態獲取函式位址去呼叫的麻煩,用官方的dll原始碼,編譯生成winio.lib,新增一行#pragma
comment(lib,"winio.lib"),修改一下winio.h,然後include就可以了。
二 winio.dll中提供的函式:
bool _stdcall initializewinio();
本函式初始化wioio函式庫。
必須在呼叫所有其它功能函式之前呼叫本函式。
void _stdcall shutdownwinio();
本函式在記憶體中清除winio庫
本函式必須在中止應用函式之前或者不再需要winio庫時呼叫,
bool _stdcall getportval(word wportaddr, pdword pdwportval, byte bsize);
使用此函式從乙個輸入或輸出埠讀取乙個位元組/字/雙字資料。
引數:wportaddr – 輸入輸出埠位址
pdwportval – 指向雙字變數的指標,接收從埠得到的資料。
bsize – 需要讀的位元組數,可以是1 (byte), 2 (word) or 4 (dword).
bool _stdcall setportval(word wportaddr, dword dwportval, byte bsize);
使用本函式將乙個位元組/字/雙字的資料寫入輸入或輸出介面。
引數:wportaddr – 輸入輸出口位址
dwportval – 要寫入口的資料
bsize – 要寫的資料個數,可以是 1 (byte), 2 (word) or 4 (dword).
從指定的實體地址讀取乙個雙字資料。
引數:pbphysaddr – 指向實體地址的指標。
pdwphysval – 指向乙個雙字變數的指標,接收從物理記憶體中傳來的資料。
如果此函式呼叫成功,返回乙個非零值。
如果函式呼叫失敗,則返回乙個零值。
bool _stdcall setphyslong(pbyte pbphysaddr, dword dwphysval);
三 呼叫
mfc:
[dllimport("winio64.dll")]
public static extern bool initializewinio();
bcb: 用函式指標來實現的
hwinio = loadlibrary("winio32.dll"); //載入動態鏈結檔
if ( hwinio != null )
呼叫:unsigned long v = 0;
xx_getportval(p, &v, 2); // 要讀的位址, 讀回的資料,資料的位元組數
釋放資源
freelibrary(hwinio);
hwinio = null;
四 .使用
比如要訪問superio 83627 ,superio 的入口位址是:superio_cfg = 0x295; superio_dat = 0x296;
xx_setportval(0x295,0x5d, 1);
sleep(50);
xx_getportval(0x296 , &buffer,1);
C C 使用WinIO讀取CMOS資料
實現 注意事項 測試模式 證書安裝 pc機的主機板上整合有cmos實時時鐘,為作業系統提供時間資訊 年 月 日與時 分 秒。它附有128或256個位元組的ram,用於存放時間與硬碟 記憶體 顯示卡等最基本的硬體配置資訊。作業系統啟動時,從cmos實時時鐘中讀取時間資訊作為系統的基準時間。系統斷電後由...
裝置埠的訪問
申請 struct resource request mem region start,len,name 本函式申請乙個從start開始,長度為len位元組的記憶體區,成功返回 非null 否則返回null,所 有已經在使用的i o內存在 proc iomem中列出。void ioremap phy...
WampServer下使用多埠訪問的技巧
因為學習中要用到跨域請求,所以不得不在wamp整合環境下新增多站點服務。1 首先你要確保已經正確安裝了wamp。2 接著在wamp的安裝目錄下找到apache2的httpd.conf檔案,比如我的是在c wamp bin apache apache2.2.21 conf下。將該檔案複製乙份,重新命名...