if bDup then
hP := hProcessDup
else
hP := hProcess;
if GetExitCodeProcess(hP, dwCode) and (dwCode = STILL_ACTIVE) then
begin
pfnExitProc := GetProcAddress(hKernel, 'ExitProcess');
hRT := CreateRemoteThread(hP, nil, 0, pfnExitProc, @uExitCode, 0,
dwTID);
if hRt = 0 then
dwErr := GetLastError;
end
else
dwErr := ERROR_PROCESS_ABORTED;
if hRT <> 0 then
begin
WaitForSingleObject(hP, INFINITE);
CloseHandle(hRT);
bSuccess := TRUE;
end;
if bDup then
CloseHandle(hProcessDup);
if not bSuccess then
SetLastError(dwErr);
Result := bSuccess;
end;