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進行操
Linux下對MySQL/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)服務器
windows下Vcenter server vpostgres數據庫遷移
vcenter server一 環境 舊vcenter服務器 windows server 2008 r2 + vc6.0 新服務器 windows server 2012 R2 + 6.0二 說明 因為在舊的vc服務器上有配置很多東西,換新的服務器還要重新添加主機,並重新設置HA、交換機之類
Windows下mysql的基礎操作
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.0下對MongoDB的操作
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
Windows下SecureCRT串列埠終端顯示
在學習《朱有鵬老師嵌入式linux核心課程》的《1.16.ARM裸機第十六部分-shell原理和問答機制引入》的《1.16.3.shell實戰2-將簡易shell移植到開發板中》的部分的時候,通過看對應的“3.shell_x210”的程式程式碼總結出下面SecureCRT終
windows下putty的埠轉發
在windows機器下使用putty也可以建立埠轉發 假設從windows機器上將本地的8888埠轉發到B的21埠,可以做如下設定 Connection->SSH-Tunnels中可以設定putty的埠轉發,Source port為listen_port,填8888,
Windows下php擴充套件開發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&at=231&aurl=&cad=1&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