function InjectCRT(Pid: integer; dll: PCHAR): BOOL;
var
hThread: THANDLE;
ExitCode: DWORD;
hLib: Pointer; hProc: THANDLE;
Buffer: Pointer;
begin
Result:= false;
if(dll^ = #0) then exit;
hThread:= 0;
ExitCode:= 0;
hProc:= OpenProcess(PROCESS_ALL_ACCESS, false, Pid);
if hProc<>0 then
begin
Buffer:= VirtualAllocEx(hProc, nil, lstrlen(dll)+1, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
if Buffer<>nil then
begin
if WriteProcessMemory(hProc, Buffer, dll, lstrlen(dll)+1, PDWORD(0)^) then
begin
hLib:= GetProcAddress(GetModuleHandle('Kernel32.dll'), 'LoadLibraryA');
if hLib <> nil then
begin
hThread:= CreateRemoteThread(hProc, nil, 0, hLib, Buffer, 0, PDWORD(0)^);
if hThread <> 0 then
begin
WaitForSingleObject(hThread, INFINITE); GetExitCodeThread(hThread, ExitCode); CloseHandle(hThread); end;
end;
end;
VirtualFreeEx(hProc, Buffer, 0, MEM_RELEASE); end;
CloseHandle(hProc); end;
Result:= (ExitCode <> 0);
end;