quot;Matarquot; Processo
Boa Noite,
Fiz varias buscas no forum mas não consegui encontrar algum post que resolvesse o meu problema.
O seguinte precisso ´matar´ um processo considerado como SYSTEM.
Os codigos que encontrei no forum não conseguem fechar esses aplicativos sera que alguem sabe algum ou poderia indicar algo para poder matar esses processos?
Fiz varias buscas no forum mas não consegui encontrar algum post que resolvesse o meu problema.
O seguinte precisso ´matar´ um processo considerado como SYSTEM.
Os codigos que encontrei no forum não conseguem fechar esses aplicativos sera que alguem sabe algum ou poderia indicar algo para poder matar esses processos?
Spooner
Curtidas 0
Respostas
Nildo
15/02/2005
Talvez você precise estar com privilégios de Debug. Tente executar esta função [b:9e16ba945c]antes[/b:9e16ba945c] de matar o processo:
procedure GetDebugPrivs; const // Query que o SO deve executar para obter privilégio de Debug SE_DEBUG_NAME = ´SeDebugPrivilege´; var hToken: THandle; // Handle do Token tkp : TTokenPrivileges; // Privilégio retval: dword; // Retorno begin // Inicializa a transação para ajuste de privilégio e execução da query if OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then begin // Inicia a query de ajuste de privilégio LookupPrivilegeValue( nil, SE_DEBUG_NAME, tkp.Privileges[0].Luid ); // Quantas queries vai executar tkp.PrivilegeCount := 1; // Indica que a query é de ajuste de privilégio tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; // Finalmente executa a query AdjustTokenPrivileges( hToken, false, tkp, 0, nil, retval ); end; end;
GOSTEI 0
Spooner
15/02/2005
Boa Noite,
Obrigado por ter respondito nildo,
Esta Procedure que vc postou Funcionou para apenas alguns processos do SYSTEM mas já para outros não deu certo, teria outra alternativa para esse problema? ou sera que tem outra procedure de fechar processos que não estou usando?
Atenciosamente,
Spooner
Obrigado por ter respondito nildo,
Esta Procedure que vc postou Funcionou para apenas alguns processos do SYSTEM mas já para outros não deu certo, teria outra alternativa para esse problema? ou sera que tem outra procedure de fechar processos que não estou usando?
Atenciosamente,
Spooner
GOSTEI 0
Nildo
15/02/2005
Boa Noite,
Obrigado por ter respondito nildo,
Esta Procedure que vc postou Funcionou para apenas alguns processos do SYSTEM mas já para outros não deu certo, teria outra alternativa para esse problema? ou sera que tem outra procedure de fechar processos que não estou usando?
Atenciosamente,
Spooner
Olá!
Por favor, cite quais os processos que não são possíveis de matar. Eu acho que dependendo do processo não seja possível mesmo. De qualquer maneira, me fala uma coisa... Será que funciona se você usar a API [b:d8ac3a4647]TerminateProcess()[/b:d8ac3a4647]? Ficaria mais ou menos assim:
var hProc: Cardinal; begin hProc := OpenProcess( Process_all_access, True, ID_DO_PROCESSO ); TerminateProcess( hProc, 0 ): end;
Caso isso não funcione, podemos injetar um código que execute a API [b:d8ac3a4647]ExitProcess[/b:d8ac3a4647], e criar uma Thread no contexto do outro processo para executar esse código. É como se o outro processo estivesse executando dentro do próprio código dele, uma chamada a API ExitProcess. Caso seja necessário, responda este tópico solicitando o código que eu o faço para você.
Abraços
GOSTEI 0
Spooner
15/02/2005
Boa Noite,
Consegui Finalizar quase todos menos esse executavel: navapsvc.exe (´não sei a origem´).
Estou ulizando justamente essa API.
Gostaria sim, que você fizesse o codigo, ou indicasse onde posso aprender..
Obrigado.
Por favor, cite quais os processos que não são possíveis de matar.
Consegui Finalizar quase todos menos esse executavel: navapsvc.exe (´não sei a origem´).
Será que funciona se você usar a API TerminateProcess()?
Estou ulizando justamente essa API.
Caso seja necessário, responda este tópico solicitando o código que eu o faço para você.
Gostaria sim, que você fizesse o codigo, ou indicasse onde posso aprender..
Obrigado.
GOSTEI 0
Sanses
15/02/2005
Olá
este processo refere-se ao Norton Antivirus ou algum produto da família.
Tenho um procedimento que fecha os processos, mas preciso testar em processos de sistema, os outros funciona bem...vou testar e depois posto a resposta.
Sanses
este processo refere-se ao Norton Antivirus ou algum produto da família.
Tenho um procedimento que fecha os processos, mas preciso testar em processos de sistema, os outros funciona bem...vou testar e depois posto a resposta.
Sanses
GOSTEI 0
Sanses
15/02/2005
olá
fiz um exemplo com a função que o nildo passou e alguma coisa que eu tinha aqui. Dá uma olhada no código como ficou:
Aqui funcionou blz, e de tanto testar tive até que reiniciar o sistema (fechei coisa demais....rss)
Espero que ajude!
Sanses
fiz um exemplo com a função que o nildo passou e alguma coisa que eu tinha aqui. Dá uma olhada no código como ficou:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, TLHelp32 ;
type
TForm1 = class(TForm)
Button2: TButton;
ListView1: TListView;
procedure Button2Click(Sender: TObject);
procedure ListView1DblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
aSnapshotHandle: THandle;
aProcessEntry32: TProcessEntry32;
implementation
{$R *.dfm}
procedure privilegio;
const
priv = ´SeDebugPrivilege´;
var
hToken: THandle;
tkp : TTokenPrivileges;
retval: dword;
begin
if OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then
begin
LookupPrivilegeValue( nil, priv, tkp.Privileges[0].Luid );
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, false, tkp, 0, nil, retval );
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
bContinue: BOOL;
NewItem: TListItem;
begin
privilegio;
ListView1.Items.Clear;
aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
while Integer(bContinue) <> 0 do
begin
NewItem := ListView1.Items.Add;
NewItem.Caption := ExtractFileName(aProcessEntry32.szExeFile);
NewItem.subItems.Add(IntToHex(aProcessEntry32.th32ProcessID, 4));
NewItem.subItems.Add(aProcessEntry32.szExeFile);
bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);
end;
CloseHandle(aSnapshotHandle);
end;
procedure TForm1.ListView1DblClick(Sender: TObject);
var
Ret: BOOL;
PrID: Integer; // processidentifier
Ph: THandle; // processhandle
begin
with ListView1 do
begin
begin
PrID := StrToInt(´$´ + ItemFocused.SubItems[0]);
Ph := OpenProcess(1, BOOL(0), PrID);
Ret := TerminateProcess(Ph, 0);
if Integer(Ret) = 0 then
MessageDlg(´Não foi possível terminar "´ + ItemFocused.Caption + ´"´,
mtInformation, [mbOK], 0)
else
ItemFocused.Delete;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Button2.Click;
end;
end.
Aqui funcionou blz, e de tanto testar tive até que reiniciar o sistema (fechei coisa demais....rss)
Espero que ajude!
Sanses
GOSTEI 0
Nildo
15/02/2005
Caso a rotina do Sanses não funcione, avise!
É que na verdade o Norton não vai deixar um processo dele ser finalizado de maneira facil... Senão o vírus simplesmente fechava o processo dele e pronto!
É que na verdade o Norton não vai deixar um processo dele ser finalizado de maneira facil... Senão o vírus simplesmente fechava o processo dele e pronto!
GOSTEI 0
Spooner
15/02/2005
Boa Noite Sanses,
Sobre seu codigo ficou um otimo complemento, conseguiu fechar todos os meus processos, menos o ´navapsvc.exe´ mas o que eu precisava fechar foi fechado, mas apenas por curiosidade sera que tem como fechar esse processo? caso não tem alguma posibilidade de fazer um App ficar dessa forma (infechavel)...rsrs
Obrigado.
Sobre seu codigo ficou um otimo complemento, conseguiu fechar todos os meus processos, menos o ´navapsvc.exe´ mas o que eu precisava fechar foi fechado, mas apenas por curiosidade sera que tem como fechar esse processo? caso não tem alguma posibilidade de fazer um App ficar dessa forma (infechavel)...rsrs
Obrigado.
GOSTEI 0
Sanses
15/02/2005
Oi
Olha não é que ele seja infechável. E tb não sei direito como é(desculpe, como nunca estudei programação não sei usar nomes técnicos - sou auto-didata), apenas sei que se vc der uma olhada nos serviços(claro, se estiver usando windows nt ou xp) que estão rodando, lá no painel de controle por exemplo, tem uns 6 serviços do norton ativos. Acredito que eles se encarreguem de fazer isso, se o processo for exterminado, automaticamente é reiniciado, ou coisa assim.
Fiz algo parecido em um programa para lan-house. O programa simplesmente era fechado, ai descobri que um programador ´vb´ ia até a loja, comprava uma hora, entrava na net, baixava um prog. que ele fez, e este prog, fechava o meu software. E como usava uma função de força bruta acredito, o windows nem era reiniciado como era pra acontecer.
Minha saída foi fazer um serviço do windows que testa se o programa está abertoe se não tiver, desliga o pc.
CURIOSIDADE: esse programador, é bem conhecido na minha cidade. Hoje não é mais assim, mas nos primeiros dias que coloquei este serviço pra rodar, antes do computador desligar gritava umas 5 vezes: ´Cliente tentando burlar o sistema´. Até que ele desistiu, huahuahua. Mas o serviço ainda roda, claro, sem este som...
Sanses
Olha não é que ele seja infechável. E tb não sei direito como é(desculpe, como nunca estudei programação não sei usar nomes técnicos - sou auto-didata), apenas sei que se vc der uma olhada nos serviços(claro, se estiver usando windows nt ou xp) que estão rodando, lá no painel de controle por exemplo, tem uns 6 serviços do norton ativos. Acredito que eles se encarreguem de fazer isso, se o processo for exterminado, automaticamente é reiniciado, ou coisa assim.
Fiz algo parecido em um programa para lan-house. O programa simplesmente era fechado, ai descobri que um programador ´vb´ ia até a loja, comprava uma hora, entrava na net, baixava um prog. que ele fez, e este prog, fechava o meu software. E como usava uma função de força bruta acredito, o windows nem era reiniciado como era pra acontecer.
Minha saída foi fazer um serviço do windows que testa se o programa está abertoe se não tiver, desliga o pc.
CURIOSIDADE: esse programador, é bem conhecido na minha cidade. Hoje não é mais assim, mas nos primeiros dias que coloquei este serviço pra rodar, antes do computador desligar gritava umas 5 vezes: ´Cliente tentando burlar o sistema´. Até que ele desistiu, huahuahua. Mas o serviço ainda roda, claro, sem este som...
Sanses
GOSTEI 0
Spooner
15/02/2005
Olá,
Engrçado que esse processo é fechado, e depois na mesma hora ela volta a ativa... até mesmo processos do windows foram fechados mas esse não é, não faço a minima ideia de como isso funcione.
Engrçado que esse processo é fechado, e depois na mesma hora ela volta a ativa... até mesmo processos do windows foram fechados mas esse não é, não faço a minima ideia de como isso funcione.
GOSTEI 0
Sanses
15/02/2005
é como eu falei, no windows xp, se vc olhar em serviços, verá que tem 6 serviços rodando, relacionados ao norton. Um deles deve monitorar o fechamento e assim que este evento ocorre ele cria uma nova instancia.
Se fosse assim, simplesmente fecha e não volta mais, os programadores de virus estariam no paraíso não acha???
Sanses
Se fosse assim, simplesmente fecha e não volta mais, os programadores de virus estariam no paraíso não acha???
Sanses
GOSTEI 0
Spooner
15/02/2005
Boa Tarde Sanses,
Você disse a cima que fez um servico do windows, então provavelmente ele teve que ficar registrado na parte de Serviços, se sim poderia mostrar como fazer tal coisa?
Minha saída foi fazer um serviço do windows que testa se o programa está abertoe se não tiver, desliga o pc
Você disse a cima que fez um servico do windows, então provavelmente ele teve que ficar registrado na parte de Serviços, se sim poderia mostrar como fazer tal coisa?
GOSTEI 0
Sanses
15/02/2005
Oi
Bem isso é possivel e fácil de fazer no win 2000 ou xp. Clieque em iniciar, executar e coloque o path do serviço que vc criou (que será um exe) mais /install, ficando assim
´C:\teste\servicos.exe´ /install
E para desinstalar
´C:\teste\servicos.exe´ /uninstall
Note que só programas criados como SERVIÇO irão funcionar. E este comando apenas instala o serviço, sendo ainda necessário vc configurar o tipo de inicialização(automática, manual...etc).
Sanses
Bem isso é possivel e fácil de fazer no win 2000 ou xp. Clieque em iniciar, executar e coloque o path do serviço que vc criou (que será um exe) mais /install, ficando assim
´C:\teste\servicos.exe´ /install
E para desinstalar
´C:\teste\servicos.exe´ /uninstall
Note que só programas criados como SERVIÇO irão funcionar. E este comando apenas instala o serviço, sendo ainda necessário vc configurar o tipo de inicialização(automática, manual...etc).
Sanses
GOSTEI 0