Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: 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



BeitragVerfasst: So 08.11.09 20:38 
1. Windows Task Manager
2. Ansicht - Spalten auswählen
3. E/A...Schreiben auswählen
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: So 08.11.09 21:20 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
3. E/A...Schreiben auswählen

Das können aber auch zum Beispiel Mailslots sein und nicht zwingend Zugriffe auf einen Datenträger.
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Suche bei Google 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



BeitragVerfasst: Mo 09.11.09 09:03 
Man könnte mit FindFirstChangeNotification aus der WINAPI alle relevanten Directories überwachen.
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Mo 09.11.09 10:25 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: Mo 09.11.09 10:46 
user profile iconBernhard Geyer hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Mo 09.11.09 12:20 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Das ist filesystemunabhängig.

Wieder was gelernt :-)
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Suche im MSDN 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 10.11.09 12:31 
user profile iconF34r0fTh3D4rk hat folgendes geschrieben Zum zitierten Posting springen:
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 Suche im MSDN FINDFIRSTCHANGENOTIFICATION müsste ich afaik wissen, wo oder welche Datei geschrieben wird und ich glaube das herauszufinden würde auch nicht ganz leicht werden.

Dafür gab's irgendwo hier glaube mal ne Unit, die die offenen Handles eines Prozesses aufgelistet hat. Brauch man aber nicht, weil FindFirstChangeNotification auch rekursiv überwachen kann. Du brauchst dann also nur für jedes Laufwerk eine Überwachung starten und dann das Ergebnis auswerten.

_________________
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: 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!