Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Ctypes Windows访问冲突-读取内存位置_Python_Windows_Hook_Ctypes_Usermode - Fatal编程技术网

Python Ctypes Windows访问冲突-读取内存位置

Python Ctypes Windows访问冲突-读取内存位置,python,windows,hook,ctypes,usermode,Python,Windows,Hook,Ctypes,Usermode,我正在用python编写一个应用程序,该应用程序通过COM使用DeviceAre用户模式挂钩引擎。我挂接的函数之一是CreateProcessA,但我似乎在将适当的指针从挂接的函数传递到ctypes kernel32.CreateProcess调用时遇到了问题。我的目标是停止对CreateProcess的合法调用,并在挂起状态下重新创建它 如果需要,函数参数的Deviceare文档如下: 此外,创建过程的MSDN: 下面是我的ctypes调用,在此之前我没有实例化任何东西,也没有使用“args

我正在用python编写一个应用程序,该应用程序通过COM使用DeviceAre用户模式挂钩引擎。我挂接的函数之一是CreateProcessA,但我似乎在将适当的指针从挂接的函数传递到ctypes kernel32.CreateProcess调用时遇到了问题。我的目标是停止对CreateProcess的合法调用,并在挂起状态下重新创建它

如果需要,函数参数的Deviceare文档如下:

此外,创建过程的MSDN:

下面是我的ctypes调用,在此之前我没有实例化任何东西,也没有使用“args”设置函数定义,这种情况下有必要吗

“parameters”是DeviceAre中的一个对象,包含传递给挂钩函数(CreateProcessA)的函数参数

传递给新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
有时,访问冲突的位置位于LpStutupFin的开头,在其中间的其他时间。我不知道为什么,除非我的环境出了什么问题


我已确认LPSTARTUPINFO和LPPROCESS_信息在调试器中的位置正确

我对Deviceare一无所知,但如果它在另一个进程中挂接调用,它应该提供一种读取/修改参数的方法,然后恢复调用。当然,如果指向的缓冲区位于另一个进程中,那么在当前进程中直接使用指针是没有意义的,在当前进程中指针将指向任意内存。但是,我再次怀疑这个挂钩API是如何使用的。在挂钩ansi版本和检查宽字符串时要小心。
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