Suspende Processo

16/03/2016

1

Ola pessoal, gostaria de saber como faço para suspende um processo e todas as thread dele.

tentei com a função:

function SuspendProcess(const PID: DWORD): Boolean;
var
  LibHandle: THandle;
  ProcHandle: THandle;
  NtSuspendProcess: TProcFunction;
begin
  Result := False;
  LibHandle := SafeLoadLibrary('ntdll.dll');
  if LibHandle <> 0 then
  try
    @NtSuspendProcess := GetProcAddress(LibHandle, 'NtSuspendProcess');
    if @NtSuspendProcess <> nil then
    begin
      ProcHandle := OpenProcess(PROCESS_SUSPEND_RESUME, False, PID);
      if ProcHandle <> 0 then
      try
        Result := NtSuspendProcess(ProcHandle) = STATUS_SUCCESS;
      finally
        CloseHandle(ProcHandle);
      end;
    end;
  finally
    FreeLibrary(LibHandle);
  end;
end;


mais nada resolvido. Alguem tem alguma solução ?
Responder

Posts

16/03/2016

Junior Santos

Ninguem?
Responder
Ola pessoal, gostaria de saber como faço para suspende um processo e todas as thread dele.

tentei com a função:

function SuspendProcess(const PID: DWORD): Boolean;
var
  LibHandle: THandle;
  ProcHandle: THandle;
  NtSuspendProcess: TProcFunction;
begin
  Result := False;
  LibHandle := SafeLoadLibrary('ntdll.dll');
  if LibHandle <> 0 then
  try
    @NtSuspendProcess := GetProcAddress(LibHandle, 'NtSuspendProcess');
    if @NtSuspendProcess <> nil then
    begin
      ProcHandle := OpenProcess(PROCESS_SUSPEND_RESUME, False, PID);
      if ProcHandle <> 0 then
      try
        Result := NtSuspendProcess(ProcHandle) = STATUS_SUCCESS;
      finally
        CloseHandle(ProcHandle);
      end;
    end;
  finally
    FreeLibrary(LibHandle);
  end;
end;


mais nada resolvido. Alguem tem alguma solução ?



Olá,

Não deu certo porque? QUal a mensagem de erro que aparece?
Responder

17/03/2016

Junior Santos

Ola pessoal, gostaria de saber como faço para suspende um processo e todas as thread dele.

tentei com a função:

function SuspendProcess(const PID: DWORD): Boolean;
var
  LibHandle: THandle;
  ProcHandle: THandle;
  NtSuspendProcess: TProcFunction;
begin
  Result := False;
  LibHandle := SafeLoadLibrary('ntdll.dll');
  if LibHandle <> 0 then
  try
    @NtSuspendProcess := GetProcAddress(LibHandle, 'NtSuspendProcess');
    if @NtSuspendProcess <> nil then
    begin
      ProcHandle := OpenProcess(PROCESS_SUSPEND_RESUME, False, PID);
      if ProcHandle <> 0 then
      try
        Result := NtSuspendProcess(ProcHandle) = STATUS_SUCCESS;
      finally
        CloseHandle(ProcHandle);
      end;
    end;
  finally
    FreeLibrary(LibHandle);
  end;
end;


mais nada resolvido. Alguem tem alguma solução ?



Olá,

Não deu certo porque? QUal a mensagem de erro que aparece?


Obrigado por responde Carlos.

Então compilo tudo certo, mais rodando nao fez oque precisava. Não suspendeu o processo pelo pid. Um programa que trabalha desta forma eh o PC Hunter da www.xuetr.com que suspende o processo e suas thread deixando todo o sistema pausado ate a liberação do resume, Mais o problema que tenho meu sistema na empresa onde não posso da permissão aos usuarios da maquina como admin pois é um sistema de telemarketing e faço assistência remota do sistema. Mais preciso suspende o processo e thread do processo apenas pelo tempo de eu pode atualizar e eu pode libera o sistema volta a trabalhar ja com nova versão.

Desde já, Obrigado.
Responder

17/03/2016

Junior Santos

Alguem ?
Responder

18/03/2016

Junior Santos

?????????????????
Responder