微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Python 中使用 WinIo?

如何解决如何在 Python 中使用 WinIo?

我想用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 举报,一经查实,本站将立刻删除。