Windows equivalent of inb(), outb(), low level i/o

喜夏-厌秋 提交于 2019-12-01 10:43:19

问题


I have some Linux code that monitors our hardware by collecting temperatures, voltages, and fan speeds, from the motherboard using inb(), outb(), inl(), etc. low level i/o functions.

My challenge is to port that code over to run under Windows as a simple console app. But am puzzled in what functions Win32 (or .NET) provide that allow me permission to access direct memory mapped ports.

I don't want to code a system driver either.

My Windows tool preference is VS2008. (fyi)

Is this possible?


回答1:


The default protection level for I/O ports in Windows prevents a user-mode program from using inp and out instructions on any port. Your program will die with a GPF. There are several freely available drivers around that change that protection level so that ring 3 code can access the ports. Which is okay if you're interested in killer pokes.

The canonical one is inpout32.




回答2:


Most hardware locations are mapped in areas not accesible from userspace, so you are going to need a device driver that provides the desired API.

You can also check the UNIX Application Migration Guide ad MSDN.




回答3:


Well, after much searching with some trial and error, the two most useful bits I found to be helpful are:

WinRing0 and IO.DLL .

They pretty much do the same thing, the difference is the samples of code you will find to help you get started using them.

Hope this helps for others.



来源:https://stackoverflow.com/questions/2607657/windows-equivalent-of-inb-outb-low-level-i-o

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!