繁体   English   中英

如何在Windows XP中写入I / O端口? (Delphi7的)

[英]How to write to I/O ports in Windows XP? (Delphi7)

我试图写入端口0x60和0x64,没有运气。

德尔福代码:

procedure PortOut(IOport: WORD; Value: BYTE); assembler; register;
asm
  XCHG DX,AX
  OUT DX,AL
end;

在调用PortOut时,我得到一个EPrivilege Privileged指令异常,因为INOUT只能作为Ring0执行。

我想知道如何获得我的应用程序的Ring0权限或如何使用一些现有的外部库写入端口0x60和0x64。

看看Geek HideoutIO.DLL

IO.DLL允许使用相同库对Windows 95/98 / NT / 2000 / XP进行无缝端口I / O操作。

下面是一个示例: 并行端口I / O使用Delphi V 6.0

处理这种情况的正确方法是编写Windows驱动程序,但由于缺乏支持,无法在Delphi中完成。 它需要DDK和C编译器。 此处介绍的其他解决方案有效,但请注意,通常可以访问任何 I / O端口,而不仅仅是应用程序所需的端口。 这可能是一个安全问题 - 如果x86架构让系统程序员定义IOPL(I / O权限级别)并且大多数系统将其设置为响铃0,那就有一个原因。 一般访问I / O端口驱动程序对于测试和原型设计或权宜之计措施很有用,但我会非常小心地部署它们,特别是如果系统没有严格控制。 如果您需要这种访问,您肯定需要了解Windows内核及其驱动程序的工作原理以及原因 - 并实现自己的驱动程序。 大多数情况下,Windows本身并不是不安全的 - 它运行到许多不安全的软件,并且具有错误的特权。

当然,这可能会给驱动程序控制的设备带来麻烦。 像IO.DLL这样的东西主要用于接口没有Windows驱动程序的卡,或者Windows驱动程序在激活之前处于休眠状态。

由于端口60h是键盘控制器,并且键盘通常在使用中,因此可能会导致问题。

如果您没有连接古老的硬件,而只是尝试移植dos(TP)代码,我建议您根据普通的Windows API重写上述代码。

哎呀,

对我来说已经很久了。 我刚刚启动了我的DPro 2006以查看VCL并对其进行了轰炸。 (猜猜这就是我在过去几年没有在这台机器上执行任何Delphi代码所得到的...并且保持最新修补,再加上安装/卸载包装盒上的其他付费和FOSS包...... 。)

但在我看来,如果您抓住Windows驱动程序框架的头文件,或者查看Project JEDI的网站,您可能会发现将Miniport驱动程序等组合在一起的东西。

只需0.02美元

/ s / BezantSoft

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM