0

Python で COM 経由で Deviare ユーザーモード フック エンジンを使用してアプリケーションを作成しています。私がフックしている関数の 1 つは CreateProcessA ですが、フックされた関数から適切なポインターを ctypes kernel32.CreateProcess 呼び出しに渡すのに問題があるようです。私の目標は、CreateProcess への正当な呼び出しを停止し、一時停止状態で再作成することです。

必要に応じて、関数の引数に関する Deviare ドキュメントがここにあります: Deviare - パラメータ

また、Create Process の MSDN: kernel32.CreateProcessA

以下は私の ctypes 呼び出しです。この前に何もインスタンス化したり、「args」を使用して関数定義をセットアップしたりしません。この場合、それは必要ですか?

「parameters」は、フックされた関数 (CreateProcessA) に渡される関数引数を含む Deviare のオブジェクトです。

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 の場所がデバッガで正しいことを確認しました。

4

0 に答える 0