AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Festplatten-Standby und Status auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Festplatten-Standby und Status auslesen

Ein Thema von c.wuensch · begonnen am 13. Jul 2008 · letzter Beitrag vom 14. Jul 2008
Antwort Antwort
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#1

Festplatten-Standby und Status auslesen

  Alt 13. Jul 2008, 22:16
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!!!
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

Re: Festplatten-Standby und Status auslesen

  Alt 13. Jul 2008, 23:05
http://www.delphi-forum.de/viewtopic.php?t=75438
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#3

Re: Festplatten-Standby und Status auslesen

  Alt 13. Jul 2008, 23:28
Das ist ja spitze! Danke schonmal!
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?
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

Re: Festplatten-Standby und Status auslesen

  Alt 14. Jul 2008, 07:52
Zitat von c.wuensch:
Das ist ja spitze! Danke schonmal!
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?
SCSI: nicht getestet
SATA: ja.
USB: hängt ab vom USB-Chip - es gibt welche, die SMART-Befehle weiterleiten

Power Status:
Vielleicht findest Du hier etwas:
http://www.google.com/codesearch?hl=...ate&sbtn=Suche

ftp://ftp.sac.sk/pub/sac/utildisk/hddspd21.zip
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#5

Re: Festplatten-Standby und Status auslesen

  Alt 14. Jul 2008, 11:06
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...)
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#6

Re: Festplatten-Standby und Status auslesen

  Alt 14. Jul 2008, 14:40
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 hier erläuterten CDB helfen. Kann mir vielleicht jemand sagen, wie ich das programmieren könnte?

-------------

Außerdem habe ich mir gerade ein wenig den Quellcode zu hdparm angesehen (zu finden hier).

Die Funktion zum Auslesen des Status sieht da so aus (bin nicht sicher, ob das alles ist):
Code:
   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);
   }
Kann damit jemand etwas anfangen? Bzw. könnte man das in Delphi so ähnlich machen?

Freue mich wie immer über jede Antwort!
  Mit Zitat antworten Zitat
c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#7

Re: Festplatten-Standby und Status auslesen

  Alt 14. Jul 2008, 20:56
Ich werde mal 2 getrennte Fragen daraus machen, damit der Titel besser zum Inhalt passt.

Vielen Dank schonmal für die Hilfe!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz