2

有没有机会我可以在 Visual Basic .Net for Windows XP 和更高版本的 ISA 卡上写一些东西?(我知道 Win XP 及更高版本有限制,所以你不能直接将数据写入端口)

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

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

  2. 尝试在kernel32类似驱动程序中使用现有驱动程序到串行/并行端口。

如果没有任何其他选项,我必须如何修改“使用串行/并行端口”以将其用于 ISA 端口?

4

1 回答 1

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 驱动程序工具包,并学习 Microsoft 的内核模式驱动程序框架。您还可以考虑购买Jungo WinDriver的副本。WinDriver 是一种第三方工具,可大大简化驱动程序的开发,但对于一次性项目而言,它的成本相当高。

于 2012-11-06T17:26:16.667 回答