Prozess erzeugt Event,...

25/01/2009 - 21:31 von Kerem Gümrükcü | Report spam
Hallo,

ich bin auf der Suche nach einem Ansatz, um in meinem C# Programm
eine Art Ereignis abzufangen, die anzeigt, das ein Prozess erzeugt wurde,
bzw. der Prozess beendet wurde. Man kann das ja zum einen mit WMI
machen, aber das will ich nicht und suche eine andere Methode das zu
bewerkstelligen. Ich könnte einen Treiber schreiben, der dann mit
PsSetCreateProcessNotifyRoutine(...)
PsSetLoadImageNotifyRoutine(...)
sich in die Event-Chain des Windows Kernels einbindet und mit Sync-Objects
dann alle Subscriber an dem Sync-Object/Event signalisieren. Das könnte
man mit Shared-Memory, etc. machen, aber ich suche nach einer userland
Lösung und bin irgendwie nicht fündig geworden. So Sachen wie Listen
erzeugen und die dann nach einem festen Interval abfragen und vergleichen
ist ja auch nicht das wahre, da ich das in (fast) echtzeit haben will. PSAPI
ist
auch keine Option, da ich auch hier listen führen müsste und diese dann
gegen
die alten vergleichen. Das ist mir etwas zu viel Overhead. Am besten wàre
eine
Lösung wie bei den Kernel-Funktionen,...

WMI bietet: InstanceCreationEvent, InstanceDeletionEvent,
InstanceModificationEvent,
aber ich will eine andere, nach Möglichlichkeit schnellere Lösung, da WMI
manchmal grottenlangsam ist!

Jemand einen Ansatz dafür,...

Grüße

Kerem

Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.pro-it-education.de/soft...iceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
"This reply is provided as is, without warranty express or implied."
 

Lesen sie die antworten

#1 Günter Prossliner
26/01/2009 - 13:35 | Warnen spam
Hallo Kerem!


ich bin auf der Suche nach einem Ansatz, um in meinem C# Programm
eine Art Ereignis abzufangen, die anzeigt, das ein Prozess erzeugt
wurde, bzw. der Prozess beendet wurde.



Hab gerade Dein Posting in der kernel NG gelesen ;-)

Willst Du denn eine syncrone Methode d.h. die Möglichkeit haben den
Prozessstart zu unterbrechen / unterbinden?

Oder willst Du gar die Prozess Parameter (CommandLine, Envrionment, ...)
veràndern?

Oder reicht Dir eine pure Notification?

Wie "sicher " soll das Ganze sein? Musst Du alle Prozesse montioren oder nur
bestimmte? Sind das Prozesse für welche Du Einfluss auf den Code nehmen
kannst?

bzw.: Was willst Du im Endeffekt erreichen?

... Ich könnte einen Treiber schreiben, der dann mit
PsSetCreateProcessNotifyRoutine(...)
PsSetLoadImageNotifyRoutine(...)
sich in die Event-Chain des Windows Kernels einbindet und mit
Sync-Objects dann alle Subscriber an dem Sync-Object/Event
signalisieren.



Für syncrones und "sicheres" Montoring AFAIK die einzige Wahl.

So Sachen wie Listen
erzeugen und die dann nach einem festen Interval abfragen und
vergleichen ist ja auch nicht das wahre, da ich das in (fast)
echtzeit haben will.



Für welche Anforderung?

Eine Liste zu führen wàre - wenn ich Dich richtig verstanden habe allerdings
ein Leichtes. Als Key solltest Du die PID in Kombination mit der Start-Time
verwenden (das PID's wiederverwertet werden können). Ich habe mal dazu ein
Snippet geschrieben, welches diese beiden Faktoren in einer GUID
organisiert. Dann hast Du für jeden Prozess eine garantiert eindeutige GUID.

Welche Informationen Du ausserdem noch speichern musst hàngt vom
Anwendungfall ab.

WMI bietet: InstanceCreationEvent, InstanceDeletionEvent,
InstanceModificationEvent,
aber ich will eine andere, nach Möglichlichkeit schnellere Lösung, da
WMI manchmal grottenlangsam ist!



Wie gesagt, das hàngt von der Anwendung ab.


mfg GP

Ähnliche fragen