问题描述
我想用Python写一个MMIO工具来获取Win10 64下的一些芯片组寄存器值。
以下是我编写的示例代码,用于读取 MMIO 地址为 0xFD6E0604 的寄存器。
from ctypes import *
winio = windll.LoadLibrary("WinIo64.dll")
winio.InitializeWinIo()
print(winio.InitializeWinIo())
DWxData = c_ulong(4)
winio.GetPhysLong(0xFD6E0604,byref(DWxData))
print(hex(DWxData.value))
执行winio.InitializeWinIo()时总是返回false。 我尝试调试 WinIo64.dll 并使用以下修改重建它。
//DBG- bool __stdcall InitializeWinIo()
int __stdcall InitializeWinIo()
{
bool bResult;
int status = 0;
DWORD dwBytesReturned;
g_Is64BitOS = Is64BitOS();
hDriver = CreateFile(L"\\\\.\\WINIO",GENERIC_READ | GENERIC_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_norMAL,NULL);
// If the driver is not running,install it
if (hDriver == INVALID_HANDLE_VALUE)
{
GetDriverPath();
bResult = InstallWinIoDriver(szWinIoDriverPath,true);
if (!bResult)
status = 2;
//DBG- return false;
bResult = StartWinIoDriver();
if (!bResult)
status = 3;
//DBG- return false;
hDriver = CreateFile(L"\\\\.\\WINIO",FILE_SHARE_READ | FILE_SHARE_WRITE,NULL);
if (hDriver == INVALID_HANDLE_VALUE)
status = 4;
//DBG- return false;
}
// Enable I/O port access for this process if running on a 32 bit OS
if (!g_Is64BitOS)
{
if (!DeviceIoControl(hDriver,IOCTL_WINIO_ENABLEDIRECTIO,&dwBytesReturned,NULL))
{
status = 5;
//DBG- return false;
}
}
IsWinIoInitialized = true;
//DBG- return true;
return status;
}
我发现 InstallWinIoDriver() 和 StartWinIoDriver() 成功,但 hDriver 是 INVALID_HANDLE_VALUE。(总是返回 4。)
我不熟悉 Windows 驱动程序,请问如何解决这个问题?谢谢!!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)