ISA端口与Visual Basic的通信

时间:2012-11-04 11:58:49

标签: vb.net driver isa

我是否有机会在Visual Basic .Net for Windows XP及更高版本中为ISA卡写一些东西? (我知道Win XP和更高版本有限制因此无法直接将数据写入端口)

我也做了一些研究,如果我了解情况,我只有两个选择:

  1. 编写驱动程序(非常有问题的选项:))或

  2. 尝试使用kernel32中的现有驱动程序来驱动 serial / paralel 端口。

  3. 如果没有其他选项,我如何修改“使用 serial / paralel port”将其用于ISA端口?

1 个答案:

答案 0 :(得分:1)

Windows的现代版本不允许来自用户应用程序的直接端口I / O.您的程序在Ring 3中运行,而不是在Ring 0中运行。您需要某种驱动程序代表您的应用程序执行端口I / O.

要做的第一件事就是联系卡制造商,看看他们是否为您的主板制作了Windows驱动程序。

如果Windows驱动程序不可用,并且您只想进行基本的reigster读写操作(无中断或DMA),则可以下载一些可自由下载的库来执行端口I / O.基本上,该库包含一个虚拟“驱动程序”,它位于Ring 0中并为您执行I / O.我对 WinIO 有最丰富的经验。

WinIO有一个C / C ++ API,没有.Net / CLR。您需要使用P / Invoke从托管代码调用WinIO函数。

如果您四处搜索,您可能会发现一个类似于WinIO的工具包,它为托管代码提供API。 (编辑:这是我收藏的一个名为DirectIO的书。)

WinIO最大的问题是您只能使用基本的寄存器读/写。如果你需要中断或DMA,那你就不走运了。那时,你需要写一个“真正的”驱动程序。

写一个驱动程序对于没有经验的人来说可能是一项非常重要的任务(你会搞得很多)。您需要先获取Windows Driver Kit的副本,然后学习Microsoft的Kernel Mode Driver Framework。您还可以考虑购买Jungo WinDriver的副本。 WinDriver是第三方工具,可以大大简化驱动程序开发,但对于一次性项目而言,这是非常昂贵的。