mockMvc - тестовое сообщение об ошибке

Вот что я понимаю о проблеме.

У вас есть приложение C #, APP1, которое создает цепочку потоков.

Эти потоки, в свою очередь, создают процесс , Я предполагаю, что эти потоки остаются в живых и отвечают за мониторинг процесса, который он породил.

Итак, для каждого потока в APP1 вы хотите, чтобы он перечислял информацию о потоках, порожденных в дочернем процессе этого потока.

Они могли бы сделать это в добрые старые дни:

  • Кодировать мой мониторинг потоков Win32 для данного процесса Win32 в DLL
  • Внедрить DLL в процесс, который я хотел контролировать
  • Использовать именованный канал или другой механизм RPC для связи из инъецированного процесса Win32 на хост APP1

Итак, в вашем основном threadproc в C # вы должны создать и контролировать именованный канал для вашего процесса для связи после его ввода.

В C ++-стране псевдокод должен был бы создать приостановить процесс, выделить некоторую память в этом процессе, вставить вашу DLL в процесс, а затем создать удаленный поток, который будет выполнять вашу вложенную dll:

char * dllName = "your cool dll with thread monitoring stuff.dll"

// Create a suspended process
CreateProces("your Win32 process.exe", ...CREATE_SUSPENDED..., pi)

// Allocate memory in the process to hold your DLL name to load
lpAlloc = VirtualAlloc(ph.hProcess, ... MEM_COMMIT, PAGE_READWRITE)

// Write the name of your dll to load in the process memory
WriteProcessMemeory(pi.hProcess, lpAlloc, dllName, ...)

// Get the address of LoadLibrary
fnLoadLibrary = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA")

// Create a remote thread in the process, giving it the threadproc for LoadLibrary
// and the argument of your DLL name
hTrhead = CreateRemoteThread(pi.hProcess, ..., fnLoadLibrary, lpAlloc, ...)

// Wait for your dll to load
WaitForSingleObject(hThread)

// Go ahead and start the Win32 process
ResumeThread(ph.hThread)

. В вашей DLL вы можете поместить код в DLL_PR OCESS_ATTACH, который будет подключаться к именованному каналу, который вы настроили, и инициализировать все свои вещи. Затем запустите функцию, чтобы начать мониторинг и отчет по именованному каналу.

Ваш C # threadproc будет контролировать именованный канал для своего процесса и сообщать об этом до APP1.

UPDATE:

Я пропустил тот факт, что вы управляете кодом для Win32-процесса. В этом случае я просто передал бы аргумент процессу, который бы контролировал механизм RPC по вашему выбору для связи (общая память, именованные каналы, служба очереди, буфер обмена (ha) и т. Д.).

путь, ваш C # threadproc настраивает канал связи RPC и мониторинг, а затем предоставляет информацию о «адресе» вашему процессу Win32, чтобы он мог «набрать вас».

Я оставлю другой материал там, в случае, если это полезно для всех, кто хочет контролировать процесс Win32, где они не отвечают за код.

16
задан Tamás Sengel 22 January 2018 в 17:57
поделиться