我正在使用Deviare用户模式挂钩引擎在python中使用COM编写应用程序。我正在挂钩的函数之一是CreateProcessA,但我似乎无法将适当的指针从钩子函数传递给ctypes kernel32.CreateProcess调用。我的目标是停止对CreateProcess的合法调用,并在挂起状态下重新创建它。
如果需要,函数参数的Deviare文档在这里:Deviare - Parameters
此外,创建过程的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的中间。我不确定为什么,除非我的环境出现其他问题。
我已经确认了LPSTARTUPINFO&的位置。 LPPROCESS_INFORMATION在调试器中是正确的。