Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Prozess pulverisieren (https://www.delphipraxis.net/111682-prozess-pulverisieren.html)

Neutral General 7. Apr 2008 19:51


Prozess pulverisieren
 
Hi,

Habe hier mal eine sehr nützliche Procedure falls man einen Prozess beenden will:

Delphi-Quellcode:
procedure PulverizeProcess(hProcess: THandle);
const BUFFERSIZE = 4096;
var c,i: Cardinal;
    buffer: Pointer;
begin
  GetMem(buffer,Kilobyte*4);
  FillChar(buffer,BUFFERSIZE ,0);
  i := 0;
  while i < $FFFFFF do
  begin
    WriteProcessMemory(hProcess,Pointer(i),buffer,BUFFERSIZE ,c);
    inc(i,BUFFERSIZE);
  end;
  FreeMem(buffer);
end;

procedure PulverisizeWindow(WindowName: String);
var wnd: hWnd;
     id: Cardinal;
  hProc: THandle
begin
  wnd := FindWindow(nil,PChar(WindowName));
  GetWindowThreadProcessId(wnd,id);
  hProc := OpenProcess(PROCESS_ALL_ACCESS,false,id);
  PulverizeProcess(hProc);
  CloseHandle(hProc);
end;
Gruß
Neutral General

Laufi 7. Apr 2008 19:55

Re: Prozess pulverisieren
 
Hallo!

Warum heisst das so komisch? :shock:

Und du kannst es sicher noch viermal schneller machen :gruebel:

Liebe grüsse
Laufi

BenBE 7. Apr 2008 21:02

Re: Prozess pulverisieren
 
Warum Byteweise schreiben, wenn Windows eh immer Pageweise schreibt?

D.h. 4KB-Puffer anlegen und den mit FillChar nullen. Danach gleich den gesamten 4-KB-Puffer schreiben ...

Neutral General 8. Apr 2008 16:43

Re: Prozess pulverisieren
 
Zitat:

Zitat von BenBE
Warum Byteweise schreiben, wenn Windows eh immer Pageweise schreibt?

D.h. 4KB-Puffer anlegen und den mit FillChar nullen. Danach gleich den gesamten 4-KB-Puffer schreiben ...

Hi,

Habs verbessert :)

toms 8. Apr 2008 16:46

Re: Prozess pulverisieren
 
Was ist der Unterschied zu TerminateProcess?

shmia 8. Apr 2008 16:54

Re: Prozess pulverisieren
 
Delphi-Quellcode:
const Kilobyte = 1024*1024; // das ist aber ein Megabyte !
so sieht's doch besser auch:
Delphi-Quellcode:
procedure PulverizeProcess(hProcess: THandle);
const BUFSIZE = 4096;

Neutral General 8. Apr 2008 16:57

Re: Prozess pulverisieren
 
oh Mist, stimmt...

toms 9. Apr 2008 19:34

Re: Prozess pulverisieren
 
Zitat:

Zitat von toms
Was ist der Unterschied zu TerminateProcess?

@Neutral General: Könntest du nun mal den Sinn resp. Unterschied zu TerminateProcess erklären?
IMO macht ein solcher Beitrag keinen Sinn, wenn nur eine Funktion ohne irgendwelche Erklärung gepostet wird, oder?

toms 12. Apr 2008 15:00

Re: Prozess pulverisieren
 
Zitat:

Zitat von toms
Zitat:

Zitat von toms
Was ist der Unterschied zu TerminateProcess?

@Neutral General: Könntest du nun mal den Sinn resp. Unterschied zu TerminateProcess erklären?
IMO macht ein solcher Beitrag keinen Sinn, wenn nur eine Funktion ohne irgendwelche Erklärung gepostet wird, oder?


*PUSH*

wido 12. Apr 2008 15:04

Re: Prozess pulverisieren
 
Er überschreibt einige Kontrollstrukturen. Dadurch zwingt er Windows den Prozess zu terminieren, weil sie ungültig sind. Wirklichen Sinn machts aber nicht. Wobei ich mir nicht mal sicher bin, daß er das wirklich vor hatte. Weil dann hätte er die Adressen direkt ermittelt, statt einfach wie wild die ersten 16 MB des Prozesses zu überschreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz