我需要访问风扇速度。
板子是 KGPE-D16 和 Winbond W83667HGA。
我有关于连接器的 SMBIOS 数据,我需要读/写它们
[Port Connector Information] (Type 8)
08 09 17 00 01 FF 00 00 FF 46 52 4E 54 5F 46 41 .........FRNT_FA
4E 31 00 00 N1..
Type 0x08 (8)
Length 0x09 (9)
Handle 0x0017 (23)
Internal Reference Designator String1 - "FRNT_FAN1"
Internal Connector Type 0xFF - Other
External Reference Designator NULL
External Connector Type 0x00 - None
Port Type 0xFF - Other
问题是我从不习惯 WDK 和 WMI 的东西。我正在查看 Open-Hardware-Monitor 并且无法理解如何插入其中。我也有 RWEverything,但它的命令/地址系统很难理解。这个问题很简单——我只想读/写一个数字。
添加1。风扇速度已由 BIOS 控制。所以我想先读一下。
添加2。在 RWEverything 中做事应该更容易。但我不明白它的 CLI。
添加3。在 RWEverything 中有 command: I{len} {port}
。我还没有让它工作。
添加4。做IO的函数是这样的
private byte ReadByte(byte bank, byte register) {
Ring0.WriteIoPort(
(ushort)(address + ADDRESS_REGISTER_OFFSET), BANK_SELECT_REGISTER);
Ring0.WriteIoPort(
(ushort)(address + DATA_REGISTER_OFFSET), bank);
Ring0.WriteIoPort(
(ushort)(address + ADDRESS_REGISTER_OFFSET), register);
return Ring0.ReadIoPort(
(ushort)(address + DATA_REGISTER_OFFSET));
}
private void WriteByte(byte bank, byte register, byte value) {
Ring0.WriteIoPort(
(ushort)(address + ADDRESS_REGISTER_OFFSET), BANK_SELECT_REGISTER);
Ring0.WriteIoPort(
(ushort)(address + DATA_REGISTER_OFFSET), bank);
Ring0.WriteIoPort(
(ushort)(address + ADDRESS_REGISTER_OFFSET), register);
Ring0.WriteIoPort(
(ushort)(address + DATA_REGISTER_OFFSET), value);
}
读取的函数调用如下所示
ReadByte(0, FAN_BIT_REG[i]);
ReadByte(FAN_TACHO_BANK[i], FAN_TACHO_REG[i]);
因为来自 OpenHardwareMonitor 的代码是愚蠢的,我无法理解“地址”到底是什么。