2016-01-29 120 views
0

我阅读了ctypes文档和一些教程,但我仍然不明白一些事情。如何使用ctypes调用WINAPI函数并存储返回值

  1. 是否ctypes.wintypes定义Windows类型,如HANDLE
  2. 我该如何调用,例如NtQueryInformationProcess,它返回一个NTSTATUS值,并存储返回值?
  3. 如何取消引用指针以使用ctypes走012bd结构?

示例代码将不胜感激。

+0

如果发现[[NtQueryInformationProcess]](https:// github)包含此[ntdll.py](https://github.com/MarioVilas/winappdbg/blob/master/winappdbg/win32/ntdll.py)。 com/MarioVilas/winappdbg/blob/master/winappdbg/win32/ntdll.py#L418)等等。 –

回答

0
  1. HANDLE实际上是一个指针,所以使用ctypes.c_void_p就足够了。
  2. 您可以像Python中的任何其他函数一样通过ctypes.windll.ntdll.NtQueryInformationProcess来调用它,但会传递C对象(如ctypes.c_int)作为参数。 NTSTATUS不是一个结构,而是一个长。但是,如果需要,您可以创建C-like structures using ctypes
  3. 请参阅指针documentation

你可能想看看pywin32,更高层次,更Python的界面的Windows API,尽管它不能完全覆盖。

希望它有帮助!

+0

(1)对于有Windows编程经验的人员,使用Windows类型别名(例如'wintypes.HANDLE')会更加清楚。 (2)请使用'ctypes.WinDLL('ntdll')'而不是'ctypes.windll.ntdll'。 'windll'加载器有麻烦的函数指针缓存。 (3)Jake对原生NT编程感兴趣,调用['NtQueryInformationProcess'](https://msdn.microsoft.com/en-us/library/ms684280)来获取['PEB'](https:// msdn .microsoft.com/en-us/library/aa813706),所以PyWin32不会有任何帮助。 – eryksun

+0

嗨@cdonts,谢谢,你的回答很有帮助 – JakeAdams

+0

嘿,谢谢@eryksun。你可以让我和另一个朋友一起?当我发布NtQueryInformationProcess与PROCESS_BASIC_INFORMATION。我如何将返回的缓冲区“PebBaseAddress”转换为PEB结构,以便我可以访问其成员? – JakeAdams

相关问题