Вот что я понимаю о проблеме.
У вас есть приложение C #, APP1, которое создает цепочку потоков.
Эти потоки, в свою очередь, создают процесс , Я предполагаю, что эти потоки остаются в живых и отвечают за мониторинг процесса, который он породил.
Итак, для каждого потока в 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, где они не отвечают за код.