Seite 2 von 2

Verfasst: 03.04.2007 12:28
von AND51
Muss was gestehen... :oops:
Ich glaube, mein Code funktioniert nur, wenn etwas geschrieben wird, das Lesen scheint doch nicht zu klappen... Hätte ich aber vermutet.

Habe ich beobachtet: Beim normalen Virenscan zeigt er nichts an, weil er nur liest. Aber wenn er in ZIP-Archiven sucht und diese entpackt, blinkt er, weil dann ja auf die HDD geschrieben wird.

Dennoch: Lasst mal diesen Code parallel zu Drive LED laufen, dann seht ihr, dass Drive LED wirklich funktioniert.

Hinweis: Bitte die temp-Datei n dem selben Verzeichnis erstellen lassen, welches von Drive LED geprüft wird!

Code: Alles auswählen

Repeat
	CreateFile(0, "D:\temp\müll.mll")
		WriteLong(0, Random(1))
	CloseFile(0)
	Delay(100)
ForEver
Zur Arbeitsweise von Drive LED: Es untersucht immer nur einen Ordner inkl. Unterordner auf Änderungen. Theoretisch könnte man also auch einen Ordner (Eigene Dateien) angeben, der dann wie eine Festplatte überprüft wird.

Was mein Code nicht kann: Er ermitelt keine physikalisch getrennte Laufwerke. ich habe beispielsweise Laufwerke C, D und E. abei sind C und E auf einer Festplatte (298 GB) und Laufwerk D ist auch auf einer eigenen Festplatte (auch 298 GB). Man müsste also noch ermitteln, welche Laufwerksbuchstaben zu einer Festplatte gehören und diese dann überwachen, um eine "echte" Drive LED zu haben.

Verfasst: 03.04.2007 12:37
von Kiffi
AND51 hat geschrieben:Ich glaube, mein Code funktioniert nur, wenn etwas geschrieben wird, das Lesen scheint doch nicht zu klappen...
schön, dass Du das selber gemerkt hast. Dann brauche ich ja nichts dazu
schreiben. ;-)

FindFirstChangeNotification_() wird halt nicht beim Lesen gefeuert.

Trotzdem danke, dass Du Dir Gedanken dazu gemacht hast.

Grüße ... Kiffi

Verfasst: 03.04.2007 15:14
von Helle
Hier ein Beispiel für den guten alten IDE-Port:

Code: Alles auswählen

;- Primären IDE-Kanal 1F7h checken
;- "Helle" Klaus Helbing, 03.04.2007, PB v4.02
;- Hinweise zur tvicport.dll siehe Hardware & Elektronik, PCI-Bus scannen (http://www.purebasic.fr/german/viewtopic.php?t=12430) 

If OpenLibrary(0, "tvicport.DLL") = 0
  MessageRequester("TVicPort", "Bibliothek tvicport.dll konnte nicht geöffnet werden!")
   End  
EndIf 

CallFunction(0, "OpenTVicPort")

If CallFunction(0, "IsDriverOpened")
 
 Repeat  
     X.b = CallFunction(0, "ReadPort", $1F7)
     X & 128            ;Bit 7 checken
     If X <> 0
      Debug "Zugriff!"   ;oder sonstwas
     EndIf 
  Delay(1)
 ForEver 
 
 Else
   MessageRequester("TVicPort", "Driver konnte nicht geladen werden!")
EndIf

CallFunction(0, "CloseTVicPort")

End
Gruss
Helle

Verfasst: 03.04.2007 23:25
von Ghosty1967
ooooh, welch Resonanz ;)

Der Code sieht schonmal sehr nett aus, aber ich habe PB3.94 und Mutex sacht dem PB jarnix bei mir *g*
Gibts das als Userlib oder so?... ich such maich mal durch !

Erstmal thx soweit !

Verfasst: 03.04.2007 23:36
von ts-soft
>> aber ich habe PB3.94
schnellstens Updaten, die 3.94 Tage sind gezählt :mrgreen:

Verfasst: 05.04.2007 09:58
von Ghosty1967
Ich grübele schon wieder und suche mich in google durch...

Also, ich habe heraus bekommen, das die Ports der IDE-Kontroller
auf 1F0-1F7 für den 1. IDE-Adapter und 1F0-1F7 für den 2. IDE-Adapter
liegen. Diese Ports zeigen allerdings nur die Werte auf den jeweiligen
Datenleitungen an.
Das ist ja schonmal so ungefähr die Richtung, die ich einschlagen wollte.
Allerdings birgt das den Nachteil, das ich eben nur feststellen kann,
was auf den Datenleitungen passiert :? und daraus kommen mir wiederum weiter
Fragen in den Sinn.
1. Wie stelle ich fest, auf welche Partition gerade geschrieben wird
(da hier ja nicht zwischen Partitionen unterschieden wird) und
2. Die bereits am Anfang gestellte Frage nach dem Lese- Schreibzugriff.

Für mich sind das echt harte Nüsse...
ABER DAS MUSS DOCH GEHEN ! :cry:

Verfasst: 05.04.2007 11:58
von AND51
> Wie stelle ich fest, auf welche Partition gerade geschrieben wird
Wieso guckst du dir dazu nicht meinen Code an? Der zeigt doch die DriveLED an, halt nur wenn geschrieben wird, aber genau das wolltest du ja.
Für jede Partition erstellst du einen eigenen Thread und fertig.

@ Kiffi: Habe den Befehl wieder entdeckt: ReadDirectoryChangesW_() oder so ähnlich heißt er. Ich glaube, der kann mehr als FindFirstChangeNotification_().

Verfasst: 05.04.2007 18:58
von Ghosty1967
...hab ich mir doch angeschaut und finde es gut! :) ich bin nur dem wahn verfallen, das ganze direkt über die hardware
zu lösen, da man so halt jeden zugriff auf die platten sichtbar machen kann.
sieh dir doch mal dieses kleine tool an
http://www.giza-web.de/html/oo-driveled-freeware.html
sowas möchte ich gerne in PB realisieren, da ich dann eine basis daran weiter rum zu basteln.

Verfasst: 05.04.2007 19:07
von AND51
Hardwaremäßig... Hm...

Ich würde softwaremäßig rangehen und sagen: Ich muss nur ermitteln, ob gerade eine Datei gelesen oder geschrieben wird, um dann zu behaupten, die Festplatte sei aktiv.
Genauso wie AntiVirenprogramme es machen: Die springen ja auch immer an, wenn auf eine Datei lesend oder schreibend zugegriffen wird.

Aber du hast Recht, das wär schon schön. Denke, es geht am ehesten über die API oder (wenn du hardwaremäßig ranwillst) über irgendwelche skurillen DLLs und Treiber und so.