Red de conocimiento informático - Computadora portátil - Inyectar dll para manejar subprocesos múltiples

Inyectar dll para manejar subprocesos múltiples

función mostrar: entero; stdcall; // declarar función

externo 'sos.dll';

procedimiento InjectFunc(InHWND: HWND; Func: Puntero; Param: Pointer. ParamSize: DWORD

var

hProcess_N: THandle

ThreadAdd, ParamAdd: puntero

hThread:

HThread: THandle;

ThreadID: DWORD.

DWORD;

lpNumberOfBytes: DWORD;

comenzar

GetWindowThreadProcessId(InHWND, @ThreadID);

hProcess_N := OpenProcess( PROCESS_ALL_ACCESS, Falso, ThreadID);

WriteProcessMemory(hProcess_N, ThreadAdd, Func, 4096, lpNumberOfBytes);

ParamAdd:= VirtualAllocEx(hProcess_N, nil, ParamSize, MEM_COMMIT, PAGE_READWRITE

p>

WriteProcessMemory(hProcess_N, ParamAdd, Param, ParamSize, lpNumberOfBytes);

hThread:= CreateRemoteThread(hProcess_N, nil, 0, ThreadAdd, ParamAdd, 0, lpNumberOfBytes);

ResumeThread( hThread);

WaitForSingleObject(hThread, INFINITE);

VirtualFreeEx(hProcess_N, ThreadAdd, 4096, MEM_RELEASE); >VirtualFreeEx(hProcess_N, ParamAdd, ParamSize, MEM_RELEASE);

CloseHandle(hThread);

CloseHandle(hProcess_N); p> inyectado arriba Función

procedimiento TForm1.Button2Click(Sender: TObject);

var

inhwnd: Hwnd

ThreadID: DWORD;

p>

hProcess_ N:

inhwnd:= FindWindow(nil, 'sombra');

GetWindowThreadProcessId(InHWND, @ThreadID)

hProcess_N :.= OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);

injectfunc(InHWND, @show, nil, 0); /p>

Esta es la función de llamada, eche un vistazo. injectfunc(InHWND, @show, nil, 0);

end;

Esta es la función de llamada, eche un vistazo a esta oración. No entiendo muy bien qué significan el tercer y cuarto parámetro. Debido a que yo mismo escribí un EXE para adivinar la ciudad y la función de inyección no necesita pasar parámetros, este es el mejor ejemplo.

En el paquete que genera el exe, el generador de archivos ejecutables nativo, en el tercer paso, seleccione la base de datos e incluya las clases requeridas y los recursos conocidos en la selección. Apunte manualmente a su clase principal en las opciones siguientes. Probar.

Resulta que también encontré este problema. Después de seguir la configuración anterior, todo funcionó bien.

¡Espero que te ayude!