Serviço do CTrl+ALt+Del
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
Curtidas 0
Respostas
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
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
20/01/2009
Listar eu consigo, mas o que eu quero é esconder o processo
GOSTEI 0
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 !!!!!
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
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
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 !!!
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
20/01/2009
O meu delphi é 2006 o problema é que nao entendo nada de .NET
GOSTEI 0
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 !!!
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
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 !!!!
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
20/01/2009
ok, vou testar, acredito que pode fechar o chamado.....
GOSTEI 0
Rodrigo Mourão
20/01/2009
Ok Alexandre !!!
Estarei fechando o chamado mas continuamos a disposição !!!
abs !!!!
Estarei fechando o chamado mas continuamos a disposição !!!
abs !!!!
GOSTEI 0