![]() |
Festplatten-Standby und Status auslesen
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 :hi: 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 ( ![]() ![]() 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 ![]() 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.) ![]() 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!!! |
Re: Festplatten-Standby und Status auslesen
|
Re: Festplatten-Standby und Status auslesen
Das ist ja spitze! Danke schonmal! :thumb:
Funktioniert das denn jetzt auch für SCSI-/SATA-/USB-Platten? Und hast du zufällig auch noch ne Lösung für das Auslesen des Power-Status? |
Re: Festplatten-Standby und Status auslesen
Zitat:
SATA: ja. USB: hängt ab vom USB-Chip - es gibt welche, die SMART-Befehle weiterleiten Power Status: Vielleicht findest Du hier etwas: ![]() ![]() |
Re: Festplatten-Standby und Status auslesen
HDDSpeed kann es leider nicht! (Wäre auch zu schön gewesen...)
Bei deinem Google-Link hab ich leider auch nichts Passendes gefunden. Aber in deinem Code gibt es in der Struktur TIdSector den Eintrag wInitialPowerMode. Vielleicht kann man aus dem (oder einem anderen) die Information auslesen? Gibt es denn eine Doku dafür, oder kannst du mir das etwas erklären (du scheinst dich damit ja super auszukennen...) |
Re: Festplatten-Standby und Status auslesen
Der Code funktioniert leider nicht bei SATA-Platten, und solchen die über eine UDMA-Controller-Karte angeschlossen sind.
Hierbei könnte aber ein SCSI-Passthrough mit dem ![]() ------------- Außerdem habe ich mir gerade ein wenig den Quellcode zu hdparm angesehen (zu finden ![]() Die Funktion zum Auslesen des Status sieht da so aus (bin nicht sicher, ob das alles ist):
Code:
Kann damit jemand etwas anfangen? Bzw. könnte man das in Delphi so ähnlich machen?
if (get_powermode) {
__u8 args[4] = {ATA_OP_CHECKPOWERMODE1,0,0,0}; const char *state; if (do_drive_cmd(fd, args) && (args[0] = ATA_OP_CHECKPOWERMODE2) /* (single =) try again with 0x98 */ && do_drive_cmd(fd, args)) { err = errno; state = "unknown"; } else { state = (args[2] == 255) ? "active/idle" : "standby"; } printf(" drive state is: %s\n", state); } Freue mich wie immer über jede Antwort! |
Re: Festplatten-Standby und Status auslesen
Ich werde mal 2 getrennte Fragen daraus machen, damit der Titel besser zum Inhalt passt.
Vielen Dank schonmal für die Hilfe! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz