Serviço do CTrl+ALt+Del

20/01/2009

Criei um serviço no Windows e preciso esconder ele do Gerenciador de Tarefas.....    Alguem tem uma dica que funcione, pois já tentei algumas mais o serviço continua la.....   E se n"ao tiver jeito, teria como eu saber se o serviço está parado ou não. Pois se eu souber disso, faço um timer que verifica, e se ele tiver parado, do um start.       sds
Cia Papel

Cia Papel

Curtidas 0

Respostas

Ricardo Boaro

Ricardo Boaro

20/01/2009

           Olá Luis.

           Vamos la, eu tenho uma função que traz todos os processos que estão rodando, dessa forma fica fácil de encontrar um específico.
           A pergunta inicial de deixar um processo oculto do gerenciador, realmente é complicado, pois testei várias funçoes sem sucesso.

           Crie uma nova aplicação WIn32, adicione um button e um listbox, segue o código abaixo:


procedure TForm1.Button1Click(Sender: TObject);
var
 handler: THandle;
 data: TProcessEntry32;

 function GetName: string;
  var i:byte;
   begin
    Result := ;
    i := 0;
    while data.szExeFile[i] <> do
     begin
      Result := Result + data.szExeFile[i];
      Inc(i);
     end;
   end;

begin
  handler := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
   if Process32First(handler, data) then
    begin
     listbox1.Items.Add(GetName());
     while Process32Next(handler, data) do
      listbox1.Items.Add(GetName());
    end
    else
     ShowMessage(Error);
end;

              Com esse código o ListBox é preenchido com todos os processos.

              Aguardo seu retorno,

              Abraço
GOSTEI 0
Cia Papel

Cia Papel

20/01/2009

Listar eu consigo, mas o que eu quero é esconder o processo
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

20/01/2009

Olá Amigo,

O que você deseja não é simples, no Windows 98 existia uma função no Kernel chamada TRegisterServiceProcess. Com esta função você conseguia ocultar um processo. A partir do Win NT a microsoft tirou esta função devida a facilitação que isto dava para os virus se esconderem.

Pesquisando aqui na net encontrei um virus chamdado Hack defender que foi escrito em pascal e que usa assembly para poder se ocultar do GT. Ainda não achei os fontes, estou verificando em torrent, porém o caminho mais plausível neste contexto seria a segunda opção.

Porém fica aqui a pergunta pois não custa. O fato de ocultar é para que usuario não finalizem o seu processo correto ??? É possível no seu contexto desabilitar o GT ???

Abs !!!!!


GOSTEI 0
Cia Papel

Cia Papel

20/01/2009

Se eu conseguir identificar que o serviço foi parado e conseguir "starta-lo"  no mesmo instante já é o suficiente
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

20/01/2009

Olá Alexandre !!

Em Win32 isso é muito complicado, ja pesquisei bastante e não consegui nada até agora. Porém em .Net temos um assembly que nos permite mapear. Se seu delphi for 2006 ou superior é possivél fazer isso. Se quiser posso criar um exe e lhe mandar os fontes para que você possa ver como é feito.

Fico no seu agauardo !!!


GOSTEI 0
Cia Papel

Cia Papel

20/01/2009

O meu delphi é 2006 o problema é que nao entendo nada de .NET
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

20/01/2009

É muito simples a lingugem é Delphi, é escrito da mesma forma a única diferença e que temos classes novas. Nesse caso por exemplo o código seria mais ou menos assim. Exemplo de um clique de botão:

Uses
  System, System.Management, System.Management.Instrumentation;

No clique do Botão

var
  ListaServico: ManagementObjectSearcher;
  Servico: ManagementObject;
begin
  ListaServico := ManagementObjectSearcher.Create('select * from Win32_Service');
  for Servico in ListaServico do
  begin
    if Servico.GetPropertyValue('Name') = 'SeuServico' then
    begin
      ShowMessage('Serviço Rodando');
      Exit;
    end;
  end;
  ShowMessage('Servico Parado !!!!');
end;

Bem alexandre não consigo testar aqui pois so tenho Delphi7 onde eu estou mas se não estou enferrujado e por ai. Repare no código e Delphi puro a unica diferença são nas classes que não temos em win32.

Se quiser testar ai Vá no Delphi 2006. Menu File->New->Vcl .Net Aplication.  Vai abrir um form como win32. Você tem os mesmos componentes que win32 com a vantagem de utilizar o .Net.

Coloque um botão, e no Eveto OnClick do mesmo faça o código acima. Não esqueça do uses acima. O .Net não o bicho de set cabeças que parece só precisamos saber qual uses dar. rsrsrrsrsrs Esse é todo o problema pois temos milhares.

Fico no aguardo !!!
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

20/01/2009

Olá Alexandre !!!

O Código acima não esta completo. Cheguei em casa e fui compilar e não é exatamente o que você quer pois você precisa startar o serviço caso ele esteja parado.

Sendo assim segue abaixo um exemplo que encontri em C# e "traduzi" para delphi. Os fontes estão no link que estou enviando junto e como eu falei de .Net só tem mesmo os assemblies pois o codigo é 100% delphi. Veja o clique do botão start por exemplo:

if ltwServiceList.ItemIndex > -1 then
  begin
    Idx := ltwServiceList.ItemFocused.Index;
    Services[Idx].Start;
    BtnStart.Enabled := False;
    BtnStop.Enabled := True;
    ltwServiceList.ItemFocused.SubItems[1] := 'Running';
  end
  else
      MessageBox(Handle,'Please,choose a service that you want to stop','Information', 64);

http://video.devmedia.com.br/RodrigoCarreiro/Consultoria/ChamadoListaServWin.zip

Fico no aguardo. Dúvidas estaremos a diposição !!!

abs !!!!
GOSTEI 0
Cia Papel

Cia Papel

20/01/2009

ok, vou testar, acredito que pode fechar o chamado.....
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

20/01/2009

Ok Alexandre !!!

Estarei fechando o chamado mas continuamos a disposição !!!

abs !!!!
GOSTEI 0
POSTAR