Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Registry auf Änderungen prüfen
michael.schoeppe
myCSharp.de - Member



Dabei seit:
Beiträge: 17
Herkunft: München

Themenstarter:

Registry auf Änderungen prüfen

beantworten | zitieren | melden

Hallo,

Ich möchte gerne eine Funktion in einem Programm das ich gerade schreibe, implementieren, welche die Registry permanent auf Änderungen (neue Einträge kommen hinzu, Einträge verändern sich, Einträge werden gelöscht usw.) überprüft und diese meldet. Klar könnte ich die gesamte Registry in einer Schleife auslesen lassen (simpler Gedanke), aber das wär wohl sehr Leistungsraubend denk ich. Gibt es da nicht eine besser Möglichkeit? Irgendetwas, was ich z.B. in der Sprachreferenz übersehen habe?

bin für jede Hilfe dankbar
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo michael.schoeppe,

wenn du ein fertiges Programm haben willst, dass das tut: RegMon von http://www.sysinternals.com/Utilities/Regmon.html .

Aber wie haben die das programmiert? Hooks?

herbivore
private Nachricht | Beiträge des Benutzers
michael.schoeppe
myCSharp.de - Member



Dabei seit:
Beiträge: 17
Herkunft: München

Themenstarter:

beantworten | zitieren | melden

Du hast Recht,
so ein Programm soll es werden. Es soll allerdings später einmal auch Bestandteil eines Programms sein welches alle Aktionen erfasst wenn sich ein anderes Programm installiert und dieses dann ohne Restmüll wieder entfernen können.

Na ja! Es gibt da glaube ich noch ne andere Möglichkeit die mir da so vorschwebt:
Die Registry ist doch letztendlich auch nix anderes als eine Ansammlung von Dateien. Wenn man eben nur diese Dateien auf Änderungen überprüft (Das geht soweit ich weiß), dann weiß man zumindest das es in der Registry irgendeine Änderung gegeben hat. Welche, das kann man dann ja im Nachhinein überprüfen, sofern man natürlich vorher ein Abbild dieser Registrydateien sowie der Registry ansich zum Vergleich angelegt hat.

Mit anderen Worten: Das Programm erstellt beim Erststart Backups der Dateien und liest aus der Registry alles aus und speichert das. Alles zum Vergleich. Dann läuft das Programm im Hintergrund (als Dienst vielleicht) und überprüft die Registrydateien permanent ob sich was ändert. Wenn sich was ändert wird die Registry durchlaufen und mit den zuvor gespeicherten Registrydaten verglichen. Auf die Art findet dann das Programm die tatsächliche Änderung und meldet dieses. Wieder werden Backups gemacht um neue Vergleichswerte für mögliche spätere Änderungen zu haben.

Aber ganz ehrlich: Ich bin mit diesem Gedanken nicht unbedigt zufrieden. Ich hatte mir erhofft das es was simpleres gibt, wie ein bereits existierendes Event das in der Registry horcht z.B.
Denn am liebsten arbeite ich mit Bordmitteln. Man muß ja nicht mehr als nötig programmieren, gelle?
Aber nun gut! Ich werde auf jeden Fall auch meine Methode ausprobieren.
Aus welchen Dateien die Registry besteht weiß ich ja.
Hoffe trotzdem das vielleicht hier noch jemanden was einfällt.
Auf jeden Fall Danke schonmal
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo michael.schoeppe,
Zitat
Wenn man eben nur diese Dateien auf Änderungen überprüft ..
das kannst du wohl vegessen. Die Registry ändert sich dauernd und ein Vergleich von zwei Registry-Ständen dauert ewig.
Zitat
Denn am liebsten arbeite ich mit Bordmitteln.
Die gibt es auch für deinen Zweck. Nur habe ich sie leider nicht parat.

herbivore
private Nachricht | Beiträge des Benutzers
hauptmann
myCSharp.de - Member



Dabei seit:
Beiträge: 771
Herkunft: Österreich/Kärnten

beantworten | zitieren | melden

Für Windows NT und aufwärts kann man da System-call Hooking verwenden.
Im Dr. Dobbs Journal gibts da einen Artikel: http://www.ddj.com/documents/s=945/ddj9701e/

Für Windows 95 und aufwärts kannst du das nicht verwenden, da musst du virtuelle Devicetreiber verwenden. kA wie das geht ^^

Und unter Windows 2003 kannst du Registry Callbacks verwenden.

Ist alles ziemlich nahe am System, deswegen solltest du schon ein wenig mit Windows Kernelprogrammierung vertraut sein.
private Nachricht | Beiträge des Benutzers
Timur Zanagar
myCSharp.de - Member

Avatar #avatar-3412.jpg


Dabei seit:
Beiträge: 1559

beantworten | zitieren | melden

Unter CodeProject hatte ich etwas von eine Registry Monitor gelesen gehabt. Kannst ja mal danach suchen.
private Nachricht | Beiträge des Benutzers
michael.schoeppe
myCSharp.de - Member



Dabei seit:
Beiträge: 17
Herkunft: München

Themenstarter:

beantworten | zitieren | melden

Also wie Du schon richtig sagst, herbivore, würde der Vergleich sicherlich ziemlich lange dauern. Mein Gedanke war das ja jede Datei einem bestimmten Ast der Registry entspricht. Mit dem Wissen bräuchte man dann nicht mehr die Gesamte Registry vergleichen, sondern nur noch den entsprechenden Ast (natürlich vom 'Root' abwärts). Aber wahrscheinlich würde das auch zu lange dauern. Vielleicht lasse ich es trotzdem mal auf einen Versuch ankommen.

Leider, Hauptmann, bin ich zu meiner Schande überhaupt nicht mit Kernelprogrammierung vertraut. Ich weiß zwar was der Kernel ist und wie er ungefähr arbeitet, das wars dann aber auch schon. Mal schauen: Vielleicht befasse ich mich in Zukunt auch mal mehr damit.

Trotzdem soweit Danke an alle
private Nachricht | Beiträge des Benutzers