0

我正在尝试在 Windows 上编写一个简单的 C# 程序,以在任何受支持的主板(如此处和此处所示)的调试端口(地址为:0x80h,也称为 POST 代码显示)上显示字符或数字。这已经在 Linux、C、Assembly 中通过名为“ TempLCD ”的免费软件完成了:

C(__outword命令示例):0x80 端口地址连接到什么?

组装:有没有办法手动更改主板 LCD 上的 BIOS POST 代码?

Linux:在 Linux 中将 LCD 温度写入调试端口

在此屏幕截图中,您可以在 80 处看到调试端口(设备管理器 > 查看 > 资源类型): 带有端口 80 的设备管理器

如何使用任何高级编程语言(例如 C#)将此端口用于读/写?SerialPort类失败,因为它需要 COM1、COM2 等。

4

1 回答 1

2

您只能在内核模式下写入此 I/O 端口。普通用户模式应用程序不支持对这些 I/O 端口的读/写操作。

您甚至可以在链接问题的解决方案中看到这些都需要内核模式驱动程序。特别是,Windows 解决方案__outword只是一个特定于 MSVC 的内在函数,它会导致发出x86OUT指令,并且正如 Intel x86 文档所说,OUT它是一个特权指令,不允许在 Ring 3 中执行(这是用户模式应用程序运行)。

由于无法从用户模式执行,因此根本无法从 .NET 应用程序执行。您不能使用 .NET 编写在 Ring 0 中运行的 Windows 驱动程序。您将需要使用可以生成本地(即非托管)代码的不同编程语言。C 和 C++ 是典型的选择。

如果您使用 C 或 C++ 等非托管语言编写驱动程序,则可以使用 P/Invoke ( DllImport) 机制从 C# 应用程序调用它。请参阅:从 C#和类似资源访问设备驱动程序。

于 2020-12-29T10:31:03.057 回答