Hi an alle,
ich habe mir in den Kopf gesetzt, ein Programm zu realisieren, das eine angeschlossene Festplatte in den Standby-Modus versetzen kann. Außerdem soll es den aktuellen Power-Status aller Platten (aktiv / gestoppt) anzeigen können.
Ich habe mich bereits intensiv mit der Thematik beschäftigt, und jede Menge vielversprechende Ansätze gefunden. Nur komm ich mit der Programmierung nicht zurecht. Wär super, wenn mir da jemand ein bisschen helfen könnte
Also, was hab ich schon:
1.) Man muss wohl unterscheiden zwischen
IDE-Platten und anderen (z.B. über S-ATA oder USB angeschlossenen) Platten. (Bei letzteren unterstützt der Controller wohl immer ein SCSI-Interface).
Für beide Arten gibt es je ein portiertes Linux-Tool (
hdparm für
IDE und
sg_start für SCSI), welches die jeweilige Platte in Standby schickt. Es ist also zumindest
möglich.
2.) Zur Not könnte ich diese Tools also aus meinem Delphi-Programm heraus aufrufen, um den Effekt zu erreichen, aber eine selbst programmierte Lösung wäre mir lieber...
Außerdem fehlt auf jeden Fall noch eine Möglichkeit, den Power-Status bei einer SCSI-Platte auszulesen (das kann sg_start nämlich nicht).
3.) Ich vermute, dass für solche Aktionen die
API-Funktion
DeviceIoControl nützlich sein dürfte. Und hierbei speziell zum Beispiel
IOCTL_SCSI_PASS_THROUGH. Kann mir einer sagen, wie man die anwendet?
Interessant wäre da v.a. der SCSI-Befehl
Start / Stop Unit
4.) Gibt es vielleicht irgendwelche SCSI-Befehle, die den Power-Status einer Platte auslesen können?
5.) Es gibt für DeviceIoControl auch die Konstante
IOCTL_ATA_PASS_THROUGH. Vielleicht lässt sich darüber auch was für
IDE-Platten machen? Und kennt jemand die entsprechenden ATA-Befehle?
6.)
Hier gab es noch einen interessanten Tipp, der vorschlägt, DeviceIoControl mit dem Parameter
SetFeature aufzurufen. Darüber finde ich jedoch keinerlei Dokumentation...
So... Kann mir denn irgendjemand aus den vorhandenen Ansätzen Tipps geben, wie ich weiter vorgehen könnte? Bin echt für jede Hilfe dankbar!!!