使用WinIO訪問底層埠 暫存器

2021-08-03 12:28:54 字數 1975 閱讀 7391

在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下。將該檔案複製乙份,重新命名...