Autor |
Beitrag |
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 08.11.09 16:47
Hallo,
Ich suche momentan nach einer Möglichkeit herauszufinden, ob ein fremder Prozess auf eine Festplatte oder einen anderen Datenträger schreibend zugreift. Ich denke mal, dass es auf Hooks hinauslaufen wird. Die Frage wäre dann, welche Funktionen wären hinreichend, um wirklich jeden Zugriff zu erfassen? Oder gibt es vielleicht sogar eine ganz einfache Methode?
Gruß
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.11.09 17:54
Keine Hooks, wohl eher ein Dateisystemtreiber. Und das geht mit Delphi nicht. Wozu willst du das wissen?
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.11.09 20:38
1. Windows Task Manager
2. Ansicht - Spalten auswählen
3. E/A...Schreiben auswählen
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 08.11.09 20:57
Wenn es um eine Möglichkeit dazu geht, dann gibt es den Process Monitor bei MS. Zudem ab Vista im Taskmanager unter Leistung den Ressourcenmonitor, der dies auch anzeigt.
Ich war aber davon ausgegangen, dass es im eigenen Programm überwacht werden soll.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.11.09 21:20
hathor hat folgendes geschrieben : | 3. E/A...Schreiben auswählen |
Das können aber auch zum Beispiel Mailslots sein und nicht zwingend Zugriffe auf einen Datenträger.
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 08.11.09 23:24
Ich möchte ein Programm schreiben, welches den PC herunter fährt, wenn ein bestimmter Prozess für eine gewisse Zeit nichts mehr auf die Festplatte/USB-Stick etc. geschrieben hat.
Momentan benutze ich EASY SHUTDOWN, aber dort gibt es unter anderem nur die Möglichkeit, einen Countdown einzustellen oder herunterzufahren, wenn eine gewisse CPU-Last unterschritten wird und für meine Zwecke ist das nicht optimal, da ich selbst eine Abschätzung vornehmen muss und man nie weiß, ob es nicht doch zu Geschwindigkeitseinbrüchen kommt und das Ganze dann nichts wird.
Wenn der PC also mal länger zu laufen hat, weil etwas heruntergeladen wird, sich ein Programm updatet oder eines meiner Programme eine Berechnung mit Schreibzugriff durchführt, soll dieses erkennen, wann der Prozess vorbei ist, sodass ich mich nicht darum kümmern brauche.
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 09.11.09 09:03
Man könnte mit FindFirstChangeNotification aus der WINAPI alle relevanten Directories überwachen.
|
|
Bernhard Geyer
      
Beiträge: 721
Erhaltene Danke: 3
|
Verfasst: Mo 09.11.09 10:25
hathor hat folgendes geschrieben : | Man könnte mit FindFirstChangeNotification aus der WINAPI alle relevanten Directories überwachen. |
wollte ich auch gerade vorschlagen. Das Funktioniert aber AFAIK nur bei NTFS-Dateisystem. Also bei FAT-laufwerken (was öfter bei USB-Sticks/Festplatten verwendet wird) geht das AFAIK nicht damit.
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 09.11.09 10:46
Bernhard Geyer hat folgendes geschrieben : | hathor hat folgendes geschrieben : | Man könnte mit FindFirstChangeNotification aus der WINAPI alle relevanten Directories überwachen. |
wollte ich auch gerade vorschlagen. Das Funktioniert aber AFAIK nur bei NTFS-Dateisystem. Also bei FAT-laufwerken (was öfter bei USB-Sticks/Festplatten verwendet wird) geht das AFAIK nicht damit. |
Das ist filesystemunabhängig.
msdn.microsoft.com/e...4417%28VS.85%29.aspx
|
|
Bernhard Geyer
      
Beiträge: 721
Erhaltene Danke: 3
|
Verfasst: Mo 09.11.09 12:20
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 09.11.09 16:01
Je nach zu Überwachendem Programm kann man auch threads überwachen, also dass der shutdown startet, wenn ein bestimmter Thread geschlossen wird. Ist dann aber nicht universal.
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 09.11.09 17:50
Noch 'ne Möglichkeit:
Mit einem Timer über die ATA commands
CHECKPOWERMODE1 = 0xe5 und/oder CHECKPOWERMODE2 = 0x98 den Status der HDD überwachen...
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von hathor am Mo 09.11.09 18:06, insgesamt 1-mal bearbeitet
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 09.11.09 17:58
Ich glaube das mit dem POWERMODE Check ist nicht wirklich zuverlässig, da ja auch andere Programme und das BS hin und wieder mal ne Kleinigkeit auf die Platte schreiben. Für FINDFIRSTCHANGENOTIFICATION müsste ich afaik wissen, wo oder welche Datei geschrieben wird und ich glaube das herauszufinden würde auch nicht ganz leicht werden.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 10.11.09 12:31
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 10.11.09 16:52
Dadurch kann ich mir praktisch für jedes Laufwerk auflisten lassen, welche Prozesse auf dieses schreiben? Dann könnte ich nach sehen, ob das überwachte Programm auf der Liste ist.
Der Vorteil ist natürlich, dass sich dadurch sehr viele Programme überwachen lassen. Der Nachteil ist, dass es doch sehr Rechenintensiv sein dürfte, gerade wenn man diesen Test öfters durchführt. Wobei das nicht einmal so schlimm sein dürfte, wenn man sich zu diesem Zeitpunkt ohnehin nicht am PC befindet.
Um allerdings herauszufinden, wie lange ein Programm schon nicht mehr auf die Festplatte geschrieben hat, eignet sich das wohl weniger. Es kann ja sein, dass man zufällig immer dann prüft, wenn das Programm gerade nicht schreibt.
Aber schlecht ist der Ansatz schon mal nicht und vor allem sicher nicht allzu schwer zu implementieren.
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 10.11.09 18:58
Komponente DIRWATCH und Demo sind im Anhang.
Die Demo schreibt die Uhrzeit eines Ereignisses in ein Memofeld.
Getestet mit DELPHI 32 2007 (CodeGear™ Delphi® für Microsoft® Windows™ Version 11)
Einloggen, um Attachments anzusehen!
|
|