如何将winio与python结合使用?

n6lpvg4x  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(398)

我想用python编写一个mmio工具,以获得win10 64下的一些芯片组寄存器值。
下面是我为读取mmio地址为0xfd6e0604的寄存器而编写的示例代码。

  1. from ctypes import *
  2. winio = windll.LoadLibrary("WinIo64.dll")
  3. winio.InitializeWinIo()
  4. print(winio.InitializeWinIo())
  5. DWxData = c_ulong(4)
  6. winio.GetPhysLong(0xFD6E0604, byref(DWxData))
  7. print(hex(DWxData.value))

当执行winio.initializewinio()时,它总是返回false。我尝试调试winio64.dll并通过以下修改重新构建它。

  1. //DBG- bool __stdcall InitializeWinIo()
  2. int __stdcall InitializeWinIo()
  3. {
  4. bool bResult;
  5. int status = 0;
  6. DWORD dwBytesReturned;
  7. g_Is64BitOS = Is64BitOS();
  8. hDriver = CreateFile(L"\\\\.\\WINIO",
  9. GENERIC_READ | GENERIC_WRITE,
  10. 0,
  11. NULL,
  12. OPEN_EXISTING,
  13. FILE_ATTRIBUTE_NORMAL,
  14. NULL);
  15. // If the driver is not running, install it
  16. if (hDriver == INVALID_HANDLE_VALUE)
  17. {
  18. GetDriverPath();
  19. bResult = InstallWinIoDriver(szWinIoDriverPath, true);
  20. if (!bResult)
  21. status = 2;
  22. //DBG- return false;
  23. bResult = StartWinIoDriver();
  24. if (!bResult)
  25. status = 3;
  26. //DBG- return false;
  27. hDriver = CreateFile(L"\\\\.\\WINIO",
  28. GENERIC_READ | GENERIC_WRITE,
  29. FILE_SHARE_READ | FILE_SHARE_WRITE,
  30. NULL,
  31. OPEN_EXISTING,
  32. FILE_ATTRIBUTE_NORMAL,
  33. NULL);
  34. if (hDriver == INVALID_HANDLE_VALUE)
  35. status = 4;
  36. //DBG- return false;
  37. }
  38. // Enable I/O port access for this process if running on a 32 bit OS
  39. if (!g_Is64BitOS)
  40. {
  41. if (!DeviceIoControl(hDriver, IOCTL_WINIO_ENABLEDIRECTIO, NULL,
  42. 0, NULL, 0, &dwBytesReturned, NULL))
  43. {
  44. status = 5;
  45. //DBG- return false;
  46. }
  47. }
  48. IsWinIoInitialized = true;
  49. //DBG- return true;
  50. return status;
  51. }

我发现installwiniodriver()和startwiniodriver()成功,但hdriver的句柄值无效。(始终返回4。)
我不熟悉windows驱动程序,请问如何解决这个问题?谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题