AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi bei neuem prozess ereignis aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

bei neuem prozess ereignis aufrufen

Ein Thema von Illuminator-23-5 · begonnen am 20. Aug 2003 · letzter Beitrag vom 13. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Illuminator-23-5
(Gast)

n/a Beiträge
 
#1

bei neuem prozess ereignis aufrufen

  Alt 20. Aug 2003, 21:57
frage: kann ich irgendwie (z.B. durch einen hook) eine prozedur aufrufen, wenn ein neuer Prozess erstellt/beendet wird?
z.B.: ein Programm wird gestartet, und in meinem Projekt wird ein Ereignis aufgerufen
geht das irgendwie?
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: bei neuem prozess ereignis aufrufen

  Alt 20. Aug 2003, 22:47
Hook nicht, aber es gibt mehrere andere Möglichkeiten:

- Entweder ein echter API-Hook (per Treiber).
- oder auf Windows 2000 aufwärts gibt eine Funktion (mir fällt der Name leider nicht ein) die das leistet, was du willst. Benötigt aber wahrscheinlich bestimmte Privs.
- die Ldr* Native APIs hooken.

Auf 9x habe ich keinen Schimmer!
  Mit Zitat antworten Zitat
Illuminator-23-5
(Gast)

n/a Beiträge
 
#3

Re: bei neuem prozess ereignis aufrufen

  Alt 20. Aug 2003, 23:06
ich brauch das unter winXP und win2000
könntest du mir das mit dem api-hook genauer erklären?
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#4

Re: bei neuem prozess ereignis aufrufen

  Alt 20. Aug 2003, 23:29
Hiho, das ist etwas zu aufwendig (wie gesagt, mit Treiber um die Native APIs zu hooken - also nix mit Delphi). Such mal folgendes:
Bei Google suchenDetours
Bei Google suchenAPI Hook EliCZ

EliCZ' Beispiel könnte u.U. systemweit funktionieren. Ich weiß es aber nicht und befürchte, daß dem nicht so ist. Suche mal im Inet nach Bei Google suchenNT process notification o.ä.

Hier ein Beispiel, welches ich gefunden habe:
http://www.codeproject.com/threads/procmon.asp
(Funktioniert nur mit Treiber!
The control application register the kernel mode driver under HKLM\SYSTEM\CurrentControlSet\Services and dynamically loads it. The kernel driver then creates a named event object that is used to signal the user-mode application when new event has been fired (i.e. process starts or ends up). The control application opens the same event object and creates a listening thread that waits on this event. Next, the user mode application sends a request to the driver to start monitoring. The driver invokes PsSetCreateProcessNotifyRoutine(), which accepts two parameters. One of them specifies the entry point of a caller-supplied callback routine, responsible for receiving all notifications from Windows. Upon a notification, that takes place in the callback, the driver signals that event in order to inform the user-mode application that something has happened. The control application then gets the data for that particular event from the driver and stores it in a special queue container for further processing. If there is no need for detecting process execution anymore the user mode application sends a request to the driver to stop monitoring. The driver then deactivates the observing mechanism. Later the control mode application can unload the driver and un-register it.)

Und da ist auch der Name der API die ich nicht mehr gefunden habe:
Bei Google suchenPsSetCreateProcessNotifyRoutine

Das Problem dieser API ist, daß es eine Kernel Mode API ist (in NTOSKRNL.EXE implementiert - es muß also ein Treiber zur Kommunikation mit deinem Programm existieren. Du kannst allerdings den Treiber aus obiger Quelle mißbrauchen

IN ALLEN FÄLLEN wird es nur mit Administrator-Privs funktionieren. Außer SYSTEM und Administratoren darf kein Benutzerkontext Treiber installieren. Oder schleich dich durch ein Loch wie MSBlast ein

Nachtrag: Wenn schon Treiber, dann würde ich logischerweise auch die bereits bekannte API mißbrauchen, anstatt mit API-Hooking zu spielen.
Systemweites Hooking von APIs wird im Buch "Undocumented Windows 2000 Secrets - A Programmer's Cookbook" von Sven B. Schreiber sehr gut beschrieben. Auf der CD gibt es auch Beispiele (mit C-Source).
  Mit Zitat antworten Zitat
Illuminator-23-5
(Gast)

n/a Beiträge
 
#5

Re: bei neuem prozess ereignis aufrufen

  Alt 21. Aug 2003, 09:14
das sieht mir ziemlich kompliziert aus,
welche wär die einfachste Möglichkeit, die auch unter Standard-Benutzerrechten funktioniert?
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#6

Re: bei neuem prozess ereignis aufrufen

  Alt 21. Aug 2003, 10:55
Keine

Ich zitiere mich nochmal selbst:
Zitat von Assarbad:
IN ALLEN FÄLLEN wird es nur mit Administrator-Privs funktionieren. Außer SYSTEM und Administratoren darf kein Benutzerkontext Treiber installieren. Oder schleich dich durch ein Loch wie MSBlast ein
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#7

Re: bei neuem prozess ereignis aufrufen

  Alt 26. Sep 2003, 11:43
Ist zwar schon ein weilchen her, dass dieser Thread aktuell war, aber ich will euch meinen Fund nicht vorenthalten!

Das ganze funktioniert über die WMI Event Cass "Win32_ProcessStartTrace"
MSDN-Link: http://msdn.microsoft.com/library/de...starttrace.asp

Funktioniert übrigens (entgegen dem MSDN) nicht nur auf XP sondern mindestens auch auf 2kProf (sonst würde es bei mir nicht funktionieren! )!
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: bei neuem prozess ereignis aufrufen

  Alt 26. Sep 2003, 11:59
Zeig mal etwas Source Code. Denn das
Zitat:
Header: Declared in Krnlprov.mof.
Namespace: Included in \root\cimv2.
verwirrt mich etwas.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#9

Re: bei neuem prozess ereignis aufrufen

  Alt 26. Sep 2003, 12:22
Das Problem ist, dass das ganze WMI-Zeug ziemlich kompliziert ist, und ich noch keine Delphi-Übersetzung der Header-Files der ganzen WMI-Interfaces gefunden hab. Daher hab ich mich bis jetzt mit den Scripting-APIs abfinden müssen. Um diese verwenden zu können muss man die TypeLibrary "Microsoft WMI Scripting" importieren.

Ich selbst hab noch nichts mit diesem Event implementiert, hab aber eine funktionierende Implementierung hier. Aber ich werd mich nochmal melden, sobald ich einen funktionieren Delphi-Code zusammengeflickt hab...
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#10

Re: bei neuem prozess ereignis aufrufen

  Alt 26. Sep 2003, 16:55
Ich muss mich korrigieren... Win32_ProcessStartTrace gibt es doch erst ab XP, aber es gibt eine andere Möglichkeit (ebenfalls per WMI):

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    aSink : TSWbemSink;
    aLocator : TSWbemLocator;
    aServices : SWbemServices;
    procedure ProcessCreated(Sender: TObject; var objWbemObject, objWbemAsyncContext: OleVariant);
  end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  aLocator := TSWbemLocator.Create(Self);
  aServices := aLocator.ConnectServer('', 'root\cimv2', '', '', '', '', 0, nil); // connect to the local computer

  aSink := TSWbemSink.Create(Self); // sink-objects are used for asynchronous method-calls
  aSink.OnObjectReady := ProcessCreated;

  aServices.ExecNotificationQueryAsync(aSink.DefaultInterface,
      'SELECT * FROM __InstanceCreationEvent within 0.1 WHERE TargetInstance ISA "Win32_Process"',
      'WQL', 0, nil, nil); // every creation of a Win32_Proces-Object should be notified
end;

procedure TForm1.ProcessCreated(Sender: TObject; var objWbemObject, objWbemAsyncContext: OleVariant);
begin
  ShowMessage('ProcessCreated');
end;
Vorraussetzung ist wie gesagt die importierte TypeLibrary "Microsoft WMI Scripting"...
Manuel Pöter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.
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