我正在使用 Deviare 用户模式挂钩引擎在 python 中的 COM 上编写应用程序。我要挂钩的函数之一是 CreateProcessA,但我似乎无法将适当的指针从挂钩函数传递给 ctypes kernel32.CreateProcess 调用。我的目标是停止对 CreateProcess 的合法调用,并在暂停状态下重新创建它。
如果需要,函数参数的 Deviare 文档在这里:Deviare - 参数
此外,用于创建进程的 MSDN: kernel32.CreateProcessA
下面是我的 ctypes 调用,在此之前我没有实例化任何东西或使用“args”设置函数定义,在这种情况下是否有必要?
'parameters' 是 Deviare 中的一个对象,包含传递给挂钩函数 (CreateProcessA) 的函数参数
retval = ctypes.windll.kernel32.CreateProcessA(
ctypes.wintypes.LPCWSTR(parameters.GetAt(0).Value),
ctypes.wintypes.LPCWSTR(parameters.GetAt(1).Value),
ctypes.c_ulong(parameters.GetAt(2).PointerVal),
ctypes.c_ulong(parameters.GetAt(3).PointerVal),
ctypes.wintypes.BOOL(parameters.GetAt(4).Value),
ctypes.wintypes.DWORD(0x4),
ctypes.wintypes.LPVOID(parameters.GetAt(6).PointerVal),
ctypes.wintypes.LPCWSTR(parameters.GetAt(7).Value),
ctypes.cast(parameters.GetAt(8).PointerVal, ctypes.POINTER(ctypes.c_ulong)),
ctypes.cast(parameters.GetAt(9).PointerVal, ctypes.POINTER(ctypes.c_ulong)))
我的错误和一些有用的/键入的参数被传递给新的 CreateProcess 调用:
lpApplicationName | LPCSTR | ""
lpCommandLine | LPSTR | "python C:\Users\user\PycharmProjects\testing\API_tests_2.py"
lpProcessAttributes | LPSECURITY_ATTRIBUTES | N/A
lpThreadAttributes | LPSECURITY_ATTRIBUTES | N/A
bInheritHandles | BOOL | 1
dwCreationFlags | DWORD | 0
lpEnvironment | LPVOID | N/A
lpCurrentDirectory | LPCSTR | ""
lpStartupInfo | LPSTARTUPINFOA | 0x33eb90
lpProcessInformation | LPPROCESS_INFORMATION | 0x33eb60
File "C:\Users\user\PycharmProjects\testing\EventHandlers.py", line 299, in OnFunctionCalled
ctypes.POINTER(ctypes.c_ulong)))
WindowsError: exception: access violation reading 0x000000000033EBF0
有时访问冲突的位置在 lpstartupinfo 的开头,有时在它的中间。我不确定为什么,除非我的环境中有其他问题。
我已经确认 LPSTARTUPINFO 和 LPPROCESS_INFORMATION 的位置在调试器中是正确的。