1. 程式人生 > >Windows下對硬體埠的操作---WinIo庫的使用

Windows下對硬體埠的操作---WinIo庫的使用

本文參考了網上的一篇文章“VC 2010下WinIo 3.0直接訪問I/O埠”;

由於Windows的核心保護機制,我們無法直接對通過核心操作硬體,通過使用WinIo可以繞過這一限制,實現對Windows硬體埠或者地址的直接操作。實際操作中發現WinIo庫既可以對普通的I/O埠進行操作,也可以對GPIO進行操作。

關於WinIO的相關內容網路上的參考資料很多,這裡只記錄我自己遇到的問題(使用中需要注意的點):

1.64位作業系統下需要將WinIo.sys驅動檔案新增數字簽名。

2.注意WinIo.sys和WinIo.dll這兩個檔案的存放路徑,如果路徑不對,會導致初始化失敗。

3.下載下來的WinIo檔案中有一個DLL資料夾,如果發現初始化失敗,我們可以打斷點跟蹤到dll裡面去檢視是哪裡出了問題。例如,我在win8.1下使用的時候發現初始化失敗,跟進去發現是OpenSCManager()函式返回了false,則是由於win8.1的使用者許可權設定導致的,通過查詢響應的登錄檔位置即可初始化成功(參考網上的解決辦法)。

 4.使用WinIo的函式之前我們需要知道具體想要操作的是哪個埠,或者地址位置才行。

5.需要先將將DLL根據響應的版本進行編譯(32位/64位)。

6.操作埠需要呼叫GetPortVal()/SetPortVal()函式,如果是操作具體的實體地址則需要呼叫GetPhyLong()/SetPhyLong()函式

下面是一個簡單是例項

 1 // WinIoDemo.cpp : 定義控制檯應用程式的入口點。
4 #include "stdafx.h" 5 #include <Windows.h> 6 #include <iostream> 7 #include "winio.h
" 8 #include <conio.h> 9 #include "GPIO_DLL.h" 10 using namespace std; 11 12 #define GPIO_PORT 0xFED10000 //假定的某個特定的物地址 17 int _tmain(int argc, _TCHAR* argv[]) 18 { 19 bool bResult; 20 21 bResult = InitializeWinIo(); 22 23 if (!bResult) 24 { 25 cout<<"error to initialize winio...
"<<endl; 26 27 return -1; 28 } 29 else 30 { 32 unsigned long val;
33 unsigned long Data;
34 GetPhysLong((PBYTE)GPIO_PORT,&val);
35 printf("Current Value: %4x \n",val); 36 43 Data = val | 0x02; //對bit1進行設定 45 46 printf("Current Value: %4x \n",Data); 47 48 bool br = SetPhysLong((PBYTE)GPIO_PORT,Data); 49 66 ShutdownWinIo(); 67 } 68 printf("\nPress anykey to continue...");
69 _getch();
70 return 0; 71 }

相關推薦

Windows硬體操作---WinIo的使用

本文參考了網上的一篇文章“VC 2010下WinIo 3.0直接訪問I/O埠”; 由於Windows的核心保護機制,我們無法直接對通過核心操作硬體,通過使用WinIo可以繞過這一限制,實現對Windows硬體埠或者地址的直接操作。實際操作中發現WinIo庫既可以對普通的I/O埠進行操作,也可以對GPIO進行操

LinuxMySQL/MariaDB數據的基本操作以及linux mysql添加用戶,刪除用戶,以及用戶權限的授予

信息 查看 let quit mar 普通用戶 表名 mys xxxx 文章引用地址:https://www.cnblogs.com/Glory-D/p/7518541.html、https://www.cnblogs.com/zhchoutai/p/6929103.htm

MFC串列操作以及定時器的呼叫

最近研究了一下MFC下對串列埠的操作,測試了一下對裝置的讀寫。 1.開啟串列埠 1 GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(FALSE); 2 m_hComm = CreateFile("COM1",

python在windows連接mysql數據

安裝mysql () install 代碼 baidu text htm led n-1 一,安裝MySQL-python   python 連接mysql數據庫需要 Python interface to Mysql包,包名為 MySQL-python ,PyPI上現在到

windows 安裝 rabbitMQ 及操作常用命令(轉)

點擊 結束 進程 重啟 開始 use 完成 題解 五類 windows下 安裝 rabbitMQ 及操作常用命令 rabbitMQ是一個在AMQP協議標準基礎上完整的,可服用的企業消息系統。它遵循Mozilla Public License開源協議,采用 Erlang

windows 安裝 rabbitMQ 及操作常用命令

log 控制臺命令 讀寫權限 ofo 下載 分享 monitor perm 服務 rabbitMQ是一個在AMQP協議標準基礎上完整的,可服用的企業消息系統。它遵循Mozilla Public License開源協議,采用 Erlang 實現的工業級的消息隊列(MQ)服務器

windowsVcenter server vpostgres數據遷移

vcenter server一 環境 舊vcenter服務器 windows server 2008 r2 + vc6.0 新服務器 windows server 2012 R2 + 6.0二 說明 因為在舊的vc服務器上有配置很多東西,換新的服務器還要重新添加主機,並重新設置HA、交換機之類

Windowsmysql的基礎操作

charset rop hang char 刪除數據 創建 databases -- cmd 1.數據庫表操作: - 首先啟動mysql服務器,在安裝mysql的目錄下打開cmd窗口,運行mysql:‘mysql.exe -hlocalhost -p3306 -uroot

windows提交前檢測操作

comm mit win 文件 all sta mod 更改 原因 按照之前的那篇文章,接下來更改某個文件,應該是可以執行check腳本了,但是博主window並沒有pre-commit。在github上找到了原因, 因為在window下pre-commit npm,由於權

windows如何檢視,關閉,開啟

如何檢視埠 在Windows 2000/XP/Server 2003中要檢視埠,可以使用NETSTAT命令: “開始">"執行”>“cmd”,開啟 命令提示符視窗。在命令提示符狀態下鍵入“NETSTAT -a -n”,按下回車鍵後就可以看到以數字形式顯示的TCP和UDP連

Php 7.0MongoDB的操作

mogoDB的增刪改查操作 /** mongo測試 @throws MongoCursorException @throws MongoCursorTimeoutException @throws MongoException */ public function mongotest(){

windows編譯 ffmpeg原始碼生成靜態用於Dev-C++工程

  1 set-Up 1.1.下載ffmpeg原始碼ffmpeg-4.0.2.tar.bz2,http://ffmpeg.org/download.html 解壓到 D:\04_project\ffmpeg\ffmpeg-4.0.2 1.2下載mingw 安裝程式 m

WindowsSecureCRT串列終端顯示

在學習《朱有鵬老師嵌入式linux核心課程》的《1.16.ARM裸機第十六部分-shell原理和問答機制引入》的《1.16.3.shell實戰2-將簡易shell移植到開發板中》的部分的時候,通過看對應的“3.shell_x210”的程式程式碼總結出下面SecureCRT終

windowsputty的轉發

在windows機器下使用putty也可以建立埠轉發 假設從windows機器上將本地的8888埠轉發到B的21埠,可以做如下設定 Connection->SSH-Tunnels中可以設定putty的埠轉發,Source port為listen_port,填8888,

Windowsphp擴充套件開發c++動態

PHP擴充套件開發,從零瞭解到初步完成一個小專案,經過三天的仔細研究,現整理如下 一、需求介紹 PHP擴充套件開發,呼叫自己之前的c++動態庫,完成功能 二、專案之前 系統:windows xp  開發工具:vs 2008 web環境:apache2.4  PHP5.3.2

windows 安裝 rabbitMQ 及操作常用命令 安裝mq的時候,計算機使用者名稱是中文名的解決辦法

    rabbitMQ是一個在AMQP協議標準基礎上完整的,可服用的企業訊息系統。它遵循Mozilla Public License開源協議,採用 Erlang 實現的工業級的訊息佇列(MQ)伺服器,Rabbit MQ 是建立在Erlang OTP平臺上。 1.安裝Erlang&n

windows關閉指定服務,解決tomcat端口占用問題

<iframe id="cproIframe_595135_2" width="250" height="250" src="http://cb.baidu.com/ecom?adn=3&amp;at=231&amp;aurl=&amp;cad=1&amp;ccd=24

關於多執行緒集合的操作

一、        集合簡介 list與linkedlist、arrylist、Vector、Map區別: 1) List與LinkedList List是陣列連結串列 LinkedList是指標連結串列 選擇List還是LinkedList要看你的使用特點. 陣列連結串列訪

windows關閉某個所處的程序

1. netstat -ano |findstr  埠號    得到程序號   (findstr 很像linux下的grep命令)2.  taskkill /pid  程序號  /f 3.  netstat -ano |findstr  埠號 可以再驗證下該埠還開著沒

Windows編譯libevent 64位靜態總結

參照:https://my.oschina.net/jacobin/blog/146567 http://blog.csdn.net/qingfengpu99/article/details/45113841 http://blog.csdn.net/xiaoluer/ar