![]() |
SMART-Werte lesen
Hallo,
ich bastele mir gerade eine Komponente, die mir die SMART-Festplatteninfos liefern soll. Ich habe dazu den Code von SwissDelphiCenter.ch verwendet, aber der liefert entweder keine oder nur falsche Werte (Vergleich: SpeedFan). Hier im Forum habe ich nur 2 Themen gefunden, eines davon mit Hinweis zu SwissDelphiCenter. Gibt es vielleicht noch eine andere Möglichkeit, die Werte auszulesen? Danke, ManuMF |
Re: SMART-Werte lesen
Probier mal, diese C-Demo nach Delphi zu portieren.
![]() Ich habe es ![]() |
Re: SMART-Werte lesen
Hallo,
wenn ich C könnte und ein bisschen mehr Zeit hätte... :cyclops: Gruß, ManuMF |
Re: SMART-Werte lesen
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich hatte ein wenig Zeit und interessiert hatte es mich auch. Hier nun die Übersetzung der SmartApp von Microsoft. Ich habe das ganze von einem Kommandozeilentool in eine Form-basierende Form gebracht.
Ich habe einmal IfThen() benutzt, daher ab Delphi 7. Wenn man das IfThen() ersetzt, dann sollte es ab Delphi 4 klappen (die Unit Variants einfach kicken). |
Re: SMART-Werte lesen
:shock:
*räusper* Tja, funktioniert einwandfrei. Die Gelegenheit für mich, mal nachzusehen, warum mein Programm bei mir nur Mist produziert hat. Aus Fehlern lernt man ja bekanntlich... |
Re: SMART-Werte lesen
Hallo,
das funktioniert super :thumb: Auch unter D6. Aber wie kann ich die Werte verwerten? ;-) Mich interessiert vor allem die Temperatur, und der gelesene Wert ist "157", sowohl von dem Programm als auch von SpeedFan. Aber SpeedFan wandelt das um in "27°C". Was steckt dahinter? Fahrenheit nicht, denn die wären weniger. Gruß, ManuMF |
Re: SMART-Werte lesen
Zitat:
//Edit: Ok, ich sehe gerade, bei mir arbeitet Speedfan mit dem "RAW" - Wert dieser Eigenschaft... D.h., dieser müsste auch noch abgefragt werden... |
Re: SMART-Werte lesen
So, ich schon wieder. Wenn du in Zeile 352 der Smartfunc.pas das hier:
Delphi-Quellcode:
in das änderst
AOut.Add(Format('%.2X %-29s%d%20s%d', [lDA^.bAttrID,
coAttrNames[lAttr], lDA^.bAttrValue, ' ', lAT^.bWarrantyThreshold]));
Delphi-Quellcode:
bekommst du den ersten "RAW" - Wert. Bei mir entspricht dieser Wert in der Eigenschaft "C2" der Temperatur der Festplatte. Allerdings weiß ich nicht, ob das genormt ist, sprich, ob alle Hersteller denselben Wert nutzen...
AOut.Add(Format('%.2X %-29s%d%20s%d%20s%d', [lDA^.bAttrID,
coAttrNames[lAttr], lDA^.bAttrValue, ' ', lAT^.bWarrantyThreshold, ' ', lDA^.bRAWValue[0]])); |
Re: SMART-Werte lesen
Moin!
So, schön zu hören, das das Prog klappt. Es ist nur schnell dahingeschmiert - das Memo hat keine Anchors, etc. Sollte alles noch gemacht werden. Nun zu der Frage mit der Temperatur: Ich habe mir mal alle ATA/ATAPI Standards von 1 bis zur 8 (Draft) besorgt und studiert sowie die S.M.A.R.T. Definition der SFF. Bei allen steht halt, dass es Vendor-Specific ist. Die von Microsoft schon mit Text versehenen Attribute sind nur bis ATA-3 richtig, ab ATA-4 sind diese komplett Vendor Specific. Daher müsste man eigentlich aus der vom DEVICE_INQUIRE zurück gelieferten Info-Struktur auslesen nach welcher Revision das Gerät arbeitet und entsprechend umsetzen. Maxtor hat bei vielen Platten eine Attribute ID von 192 (dezimal) für die Temperatur in °C, aber leider nicht überall. Es gibt auch Maxtor Platten mit einem anderen Wert auf dem Attribute ID von 192. Toshiba hat dort meist die Minuten der aktuellen Laufzeit und bei manchen Platten auch die Temperatur - aber mit 10 Multipliziert um eine Kommastelle zu ermöglichen. Ich habe dann mich nochmal mit dem Quellcode von dem SMARTmontools ( ![]() Dann habe ich mich noch auf Suche nach herstellerspezifischen Dokumentationen begeben zu den SMART Attributen, aber Maxtor, Seagate (sind ja nun eins), IBM (Naja, nun Hitachi) und WDC schweigen sich aus oder wollen deftig Geld für die PDFs. Nun aber noch was am Rande: Ich versuche den ATAPI_INQUIRE an meine ATAPI Laufwerke zu senden, aber ich bekomme diese grundlegend nicht erreicht. Wenn ich PhysicalDriveX abändere bekomme ich nie die beiden Laufwerke (obwohl sie am Secondary hängen) und der Laufwerksbuchstabe ist auch nicht erfolgreich (\\.\e:). Ich weiss nicht mehr weiter. Die Kombinationen der Attribute (z.B. entfernen von GENERIC_WRITE) hat auch nicht gebraucht. Irgendwelche Ideen? MfG Muetze1 |
Re: SMART-Werte lesen
Zitat:
Zitat:
|
Re: SMART-Werte lesen
Zitat:
|
Re: SMART-Werte lesen
Zitat:
Sind wir eigentlich OT? :gruebel: |
Re: SMART-Werte lesen
Ich denke nicht das wir OT sind, da ich mich immernoch auf mein Programm beziehe was ich oben gepostet habe. Das Handle erzeuge ich wahlweise über \\.\PhysicalDriveX oder \\.\e: . In beiden Fällen bekomme ich ein Handle, aber GetVersionInfo() gibt mir in der IDE DeviceMap immer 0 zurück anstatt $11 für ein ATAPI Device oder $33 für 2 ATAPI devices. Das ist mein Problem und umstellen auf das SPTI wollte ich nun nicht.
|
Re: SMART-Werte lesen
Hm, komisch isses in der Tat...
Aber um nochmal auf deine SMART - Demo zurück zu kommen: Mir ist aufgefallen, dass du die Schleife für die SMART - Werte der einzelnen Festplatten einmal zuviel durchläufst.
Delphi-Quellcode:
//Zeile 8
Const MAX_IDE_DRIVES = 4; // Max number of drives assuming primary/secondary, master/slave topology
Delphi-Quellcode:
Is' jetzt kein Beinbruch, aber ich fand es halt erwähnenswert, weil ich das als Basis für eine Neuauflage von
//Zeile 86
For i := 0 To MAX_IDE_DRIVES Do ![]() |
Re: SMART-Werte lesen
Jo, stimmt.
Nutze den Code, ist mir egal. War ja nur mal eine schnelle Portierung. |
Re: SMART-Werte lesen
Hm... So peu à peu finde ich ja Zeit, den Code auseinander zu nehmen. Ich hatte mich schon gewundert, aber na gut, ich dachte halt, wenns von Microsoft kommt, wird's schon stimmen. Folgendes:
Diese Funktion hier:
Delphi-Quellcode:
liefert unter NT - Systemen lediglich ein Handle auf die erste Festplatte (Was ja durch '\\.\PhysicalDrive0' auch nicht anders zu erwarten ist.) Dennoch wird die Schleife bei zwei Festplatten zweimal durchlaufen. Blöd nur, das beim zweiten Durchlauf immer noch das Handle für die erste Festplatte genommen wird. Unter Win9x ist der Code korrekt, da das Handle zur Smartvsd.vxd erzeugt wird. Unter NT funktioniert das so aber nicht. Das muss für jede Festplatte ein Handle mit '\\.\PhysicalDrivex' (x = Zahl von 0 - 3) erzeugt werden.
//---------------------------------------------------------------------
// Open SMART to allow DeviceIoControl communications. //--------------------------------------------------------------------- Function OpenSMART: THandle; Begin Result := INVALID_HANDLE_VALUE; If ( Win32Platform = VER_PLATFORM_WIN32_WINDOWS ) Then Begin // Version Windows 95 OSR2, Windows 98 Result := CreateFile('\\.\SMARTVSD', 0, 0, Nil, CREATE_NEW, 0, 0); //printf("Unable to open SMARTVSD, error code: 0x%lX\n", GetLastError()); End Else If( Win32Platform = VER_PLATFORM_WIN32_NT ) Then Begin // Windows NT, Windows 2000 Result := CreateFile('\\.\PhysicalDrive0', GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, Nil, OPEN_EXISTING, 0, 0); //printf("Unable to open physical drive, error code: 0x%lX\n", GetLastError()); End; End; Wollte ich nur als kleinen Hinweis geben, für Leute, die den Code verwenden. :wink: |
Re: SMART-Werte lesen
Das mit den Max=4:
ich lasse von 0 bis 255 durchlaufen ... erstens dauert es nicht lange und zweitens ... Sicher ist Sicher. Mein PC hat z.B. die 4 bekannten IDE anschlüsse, da hängen schonmal 1 bis 2 Platten und die CD-Laufwerke drann, dann hab ich aber seit kurzem die neuen Platten an den S-ATAs ... macht also schonmal 6 (4 IDE + 2 SATA) ... einige MainBoards verfügen auch noch über ingesammt 4 S-ATA-Anschlüsse, macht also schon 8 ... dahingegen besitze ich noch eine IDE-Erweiterung ... also nochmal 4 IDEs ... macht zusammen 10 Ports, welcher angesprochen werden können ... schonmal schlecht, wenn euer Code nur die ersten 4 anspricht ;) Und es ist ja nicht so, daß ich hier als Hardcore Speichersammler gelte ... da kenn ich schlimmere IDE1 Master = Systemplatte IDE2 Master/Slave = CD-ROMs S-ATA 1+2 = RAID 1 IDE 3 Master or Slave = Wechsellaufwerk so brauch ich halt nicht aufpassen was die Wechselplattte hat und kann die och mal mitten im Betrieb ein-/ausbauen hab also zwar nicht alles ausgenutzt, aber hätte dennoch die Möglichkeit euren Code zu "überlasten) Das \\.\PhysicalDriveX oder \\.\X: ... tja, dafür gibt es auch noch die andere Möglichkeit, denn diese Angaben sind nicht "eindeutig", von daher hab ich auch die (wie es jemand nannte) kryptischen Laufwerksbezeichnungen, wie \\?\Volume{GUID}, denn dieses hat halt ein paar nette Vorteile ... der Wichtigste ist z.B. daß diese Bezeichnungen im gesammten Windows eindeutig sind, also egal welcher Benutzer aktiv ist, es gelten immer die selben Werte. vorallen das \\.\X: ist ja nicht immer gleich und hängt davon ab, ob und wie das Laufwerk gemounted ist. (z.B.: Benutzer A kann ja eine Partition als X:\ mounten, Benutzer B hat sie als Q:\ und vielleicht noch R:\MeineDrives\ und Benutzer C hat sie garnicht gemounted) |
Re: SMART-Werte lesen
Zitat:
|
Re: SMART-Werte lesen
Ähm, ich glaube hier wird geraten und Dinge als Wahrheit verkauft ohne Wissen, oder?
Grundlegendes: 1. PhysicalDrive0 ist vollkommen in Ordnung und liefert ein Handle für den primären und sekundären IDE Port. Deshalb auch die 4. Man kan durch gesetztes Bit 0..3 sehen, ob es ein Gerät gib. Dabei sieht die Zuordnung wie folgt aus: Bit 0 = Primary Master Bit 1 = Primary Slave Bit 2 = Secondary Master Bit 3 = Secondary Slave Im High Nibble geben die 4 Bits an, ob es sich um ein ATAPI Gerät handelt, also das Packet Interface verwendet. Wenn dies der Fall ist, dann ist Bit entsprechend gesetzt. Auch hier gilt wieder: Bit 4 = Primary Master Bit 5 = Primary Slave Bit 6 = Secondary Master Bit 7 = Secondary Slave 2. Dieses Interface leitet nur die Strukturen/Commands direkt an das IDE Interface weiter. Dies betrifft nur die alte parallel-ATA Schnittstelle. Wenn ihr also einen S-ATA Controller habt und dieser nicht gerade im P-ATA Kompatibilitätsmodus läuft und somit die Port belegt und sich so verhält, dann habt ihr keine Chance. S-ATA Geräte werden in Windows als SCSI Geräte eingebunden und müssen somit über SPTI angesprochen werden und verwenden grundsätzlich wie SCSI nur noch Packet-orientierte Befehlsstrukturen. 3. Zitat:
4. \\.\PhysicalDriveX bezeichnet ein physikalisch vorhandenes Laufwerk und die werden vom HAL in eine Reihenfolge der Erkennung gebracht und die ist soweit immer gleich. Die HAL Schicht kommt vor der Nutzer-Authentifizierung somit ändert sich da rein gar nix abhängig vom Nutzer. Windows verkabelt doch nicht dein System neu wenn du dich anmeldest und klemmt das CD-ROM ab, wenn es dein Bruder an deinem Rechner macht. Sowas wäre ja der Himmel auf Erden für alle Kinderporno-Sammler ... 5. Zitat:
/EDIT: So, der Thread wird ja doch noch weiter gepflegt, ich lass mich denn mal doch benachrichtigen... |
Re: SMART-Werte lesen
Zitat:
Beide IDE - Laufwerke hängen am selben Kabel. Das Master Laufwerk ist max. 1 Jahr alt, das Slave Laufwerk 10 Jahre (nur zu Testzwecken angehangen). (Ich nutze mal die Code - Tags, damit man die beiden Dinge zusammenklappen kann. Anhängen wollte ich das jetzt nicht extra. ;) ) Zuerst mit...
Delphi-Quellcode:
Result := CreateFile('\\.\PhysicalDrive0', GENERIC_READ Or GENERIC_WRITE,
FILE_SHARE_READ Or FILE_SHARE_WRITE, Nil, OPEN_EXISTING, 0, 0);
Code:
...dann mit
SMART interface opened...
DFP_GET_VERSION returned: bVersion = 1 bRevision = 1 fCapabilities = 0x00000007 bReserved = 0x0 bIDEDeviceMap = 0x3 SMART enabled on drive: 0 cbBytesReturned: 16 Drive 0 is an IDE Hard drive that supports SMART #Cylinders: 16383, #Heads: 16, #Sectors per Track: 63 IDE TASK FILE REGISTERS: bFeaturesReg = 0x0 bSectorCountReg = 0x1 bSectorNumberReg = 0x1 bCylLowReg = 0x0 bCylHighReg = 0x0 bDriveHeadReg = 0xA0 Status = 0xEC Model number: WDC WD800JB-00JJC0 Firmware rev: 05.01C0 Serial number: WD-WCAM9654893: cbBytesReturned: 528 SMART enabled on drive: 1 cbBytesReturned: 16 Drive 1 is an IDE Hard drive that supports SMART #Cylinders: 16383, #Heads: 16, #Sectors per Track: 63 IDE TASK FILE REGISTERS: bFeaturesReg = 0x0 bSectorCountReg = 0x1 bSectorNumberReg = 0x1 bCylLowReg = 0x0 bCylHighReg = 0x0 bDriveHeadReg = 0xB0 Status = 0xEC Model number: WDC WD800JB-00JJC0 Firmware rev: 05.01C0 Serial number: WD-WCAM9654893: cbBytesReturned: 528 Data for Drive Number 0 Attribute Structure Revision Threshold Structure Revision 16 16 -Attribute Name- -Attribute Value- -Threshold Value- 01 Raw Read Error Rate 200 51 03 Spin Up Time 174 21 04 Start/Stop Count 99 0 05 Reallocated Sector Count 200 140 07 Seek Error Rate 200 51 09 Power On Hours Count 97 0 0A Spin Retry Count 100 51 0B Calibration Retry Count 100 51 0C Power Cycle Count 99 0 C2 (Unknown attribute) 98 0 C4 (Unknown attribute) 200 0 C5 (Unknown attribute) 200 0 C6 (Unknown attribute) 200 0 C7 (Unknown attribute) 200 0 C8 (Unknown attribute) 200 51 Data for Drive Number 1 Attribute Structure Revision Threshold Structure Revision 16 16 -Attribute Name- -Attribute Value- -Threshold Value- 01 Raw Read Error Rate 200 51 03 Spin Up Time 174 21 04 Start/Stop Count 99 0 05 Reallocated Sector Count 200 140 07 Seek Error Rate 200 51 09 Power On Hours Count 97 0 0A Spin Retry Count 100 51 0B Calibration Retry Count 100 51 0C Power Cycle Count 99 0 C2 (Unknown attribute) 98 0 C4 (Unknown attribute) 200 0 C5 (Unknown attribute) 200 0 C6 (Unknown attribute) 200 0 C7 (Unknown attribute) 200 0 C8 (Unknown attribute) 200 51
Delphi-Quellcode:
Result := CreateFile('\\.\PhysicalDrive1', GENERIC_READ Or GENERIC_WRITE,
FILE_SHARE_READ Or FILE_SHARE_WRITE, Nil, OPEN_EXISTING, 0, 0);
Code:
@Muetze1: Verstehst du jetzt mein Problem?
SMART interface opened...
DFP_GET_VERSION returned: bVersion = 1 bRevision = 1 fCapabilities = 0x00000007 bReserved = 0x0 bIDEDeviceMap = 0x3 SMART enabled on drive: 0 cbBytesReturned: 16 Drive 0 is an IDE Hard drive that supports SMART #Cylinders: 2482, #Heads: 16, #Sectors per Track: 63 IDE TASK FILE REGISTERS: bFeaturesReg = 0x0 bSectorCountReg = 0x1 bSectorNumberReg = 0x1 bCylLowReg = 0x0 bCylHighReg = 0x0 bDriveHeadReg = 0xA0 Status = 0xEC Model number: ST31277A Firmware rev: 0.62 Serial number: XA84142: cbBytesReturned: 528 SMART enabled on drive: 1 cbBytesReturned: 16 Drive 1 is an IDE Hard drive that supports SMART #Cylinders: 2482, #Heads: 16, #Sectors per Track: 63 IDE TASK FILE REGISTERS: bFeaturesReg = 0x0 bSectorCountReg = 0x1 bSectorNumberReg = 0x1 bCylLowReg = 0x0 bCylHighReg = 0x0 bDriveHeadReg = 0xB0 Status = 0xEC Model number: ST31277A Firmware rev: 0.62 Serial number: XA84142: cbBytesReturned: 528 Data for Drive Number 0 Attribute Structure Revision Threshold Structure Revision 5 5 -Attribute Name- -Attribute Value- -Threshold Value- 01 Raw Read Error Rate 117 0 03 Spin Up Time 96 0 04 Start/Stop Count 99 20 05 Reallocated Sector Count 100 36 07 Seek Error Rate 39 30 0A Spin Retry Count 100 97 0C Power Cycle Count 100 20 Data for Drive Number 1 Attribute Structure Revision Threshold Structure Revision 5 5 -Attribute Name- -Attribute Value- -Threshold Value- 01 Raw Read Error Rate 117 0 03 Spin Up Time 96 0 04 Start/Stop Count 99 20 05 Reallocated Sector Count 100 36 07 Seek Error Rate 39 30 0A Spin Retry Count 100 97 0C Power Cycle Count 100 20 //Edit: Zitat:
|
Re: SMART-Werte lesen
Kann es sein, dass du eine Mischung von Jumpersettings hast? z.B. die WDC nicht von Single auf Master umgesteckt oder das die alte am Slave vllt. als CS (cable select) gejumpert ist?
Jo, der zweite hätte nicht funktionieren dürfen. |
Re: SMART-Werte lesen
Mom, ich schau' mal nach.... Die alte (Seagate) ist definitiv Slave.... Und die Western Digital definitiv Master... Und hängen am selben IDE - Port...
//Edit: Ich könnte spaßeshalber auch noch eine dritte Festplatte an den zweiten IDE - Port hängen. Auch so'n Uraltteil... |
Re: SMART-Werte lesen
Hi folks,
hier mal ein netter Link, wo es zu SMART alles gibt, was das Herz begehrt und eine ganze Menge mehr ![]() cu Oliver |
Re: SMART-Werte lesen
Der Link hat zum einen nur eine Übersetzung der Strukturen wie wir sie auch haben aus der gleichen C Quelle con Microsoft und die Ermittlung der SMART Werte löst er genauso wie wir mit dem gleichen übersetzten Code. Diese Unit ist aber sehr komisch. Zum einen sind die Formatierungen ein heilloses durcheinander und zum anderen wurden Dinge falsch übersetzt. Anscheinend testet er seine eigenen Procedure nicht mal. Da werden Formatierungszeichen von C im String gelassen (z.B. der doppelte \ um einen zu bekommen...) etc.
Das einzige wären die Texte bzw. Bedeutungen der SMART Attribute Tags die er noch zusätzlich hat, wobei aber hier auch wieder das schon oben angesprochene Problem ist: jeder Hersteller kocht sein eigenes Süppchen ab ATA v4. |
Re: SMART-Werte lesen
Jepp, das mag schon sein, allerdings ist der Zugriff darauf, ob es sich hier um einen SMART-Fehler handelt relativ einfach.
Ausserdem kann man mit dieser Unit einfach die Temperatur der Festplatten auslesen. Ich habe mit dieser Unit (Magenta) eine SMART-Überwachung geschrieben, die dann automatisch eine mail an mich versendet, wenn ein Wert in einen Fehler läuft. Dieses läuft auf ca. 150 Rechnern (fast immer unterschiedliche Platten) und das ganz hervorragend. Kann also gar nicht so schlecht sein :mrgreen: cu Oliver |
Re: SMART-Werte lesen
Zitat:
Zitat:
Und zu den unterschiedlichen Platten: Siehe oben bzw. den Rest des Threads zuvor. |
Re: SMART-Werte lesen
also bei mir werden definitiv bei PhysicalDriveX auch die S-ATA-Platten mit aufgeführt.
Bei mir also derzeit: PhysicalDrive0: S-ATA 0 PhysicalDrive1: S-ATA 1 PhysicalDrive2: IDE 0 - Master Hab jetzt rein zufällig an jedem Port nur ein Gerät hängen PS: bei CdromX werden auch noch die virtuellen CD-Laufwerke mit aufgeführt, und bei mir ist demnach nicht "Bit 0 = Primary Master", sonder 3 = Primary Master (ich kann heute abend ja mal an IDE 2 - Slave mal wieder das Wechellaufwerk klemmen ... aber ich bin mir da jetzt mal relativ sicher, daß dieses dann als PhysicalDrive3 und nicht PhysicalDrive5, wie nach deiner Zählung und unter Inbetrachtnahme, daß bei mir die S-ATAs zuerst aufgeführt werden. Und wie gesagt, theoretisch hab ich Platz für bis zu 8 Festplatten und mit noch mehr IDE-Erweiterungskarten noch viel mehr ... irgendwo müssen diese dann doch auch noch mit aufgezählt werden, also mit 4 ist es da noch lange nicht getan? (Es gibt ja auch schon lange Mainboards mit 2 IDE-Kontrolern, also 4 Anschlüssen a 8 Geräte ... die 4 kann man also nicht nur mit Erweiterungskarten "überlasten") Also bin ich jetzt einfach mal davon ausgegangen, daß dort "alle" Festplatten von 0 aufwärts (so wie sie von Windows gefunden werden und nicht nach 'nem bestimmten Muster aufgezählt werden. Und OK, ich bin ja och gerade erst noch beim Reinfützen in die Materie, aber so wie ich das sehe ist dort eindeutig nicht nur IDE drin. Allerginst konnte ich bißher och noch keine eindeutigen Informationen zu diesen "Namen" finden. Ich weiß bisher nur, das es für derartige Zugriffe PhysicalDriveX, CdromX und angeblich auch ScsiX geben soll (hab aber keine SCSI-Geräte und so'nen Bus erst recht nicht, also konnte es nicht testen). Ich schau mir aber gern mal die genauen Fehlermeldungen an, also ob der sowas wie "Gerät nicht vorhanden", oder "ungültiger Name" ab PhysicalDrive4 von sich gibt. Ach ja, das mit dem System neuverkabeln: \\.\PhysicalDriveX und \\.\X: sind doch eh nicht das Selbe ... Ersteres sind Laufwerke und das andere Partitionen(auf Laufwerken), virtuelle Datenträger Speicherkarten, oder was man halt sonst noch damit verknüpft. Aber \\.\X: isr nicht eindeutig ... \\?\Volume{GUID} hingegen schon ;) |
Re: SMART-Werte lesen
Zitat:
Auch wenn deine S-ATA - Platten gelistet werden, S.M.A.R.T. - Werte dürftest du nicht bekommen. @Topic: Ich hab' eben mal eine dritte Platte an den IDE2 - Port gehängt. (Ergo: 2 Platten an IDE1, eine Platte an IDE2). Interessanterweise, wenn ich das Handle auf "PhysicalDrive0" oder "PhysicalDrive1" erstelle, läuft die Schleife zweimal durch. Erstelle ich es auf "PhysicalDrive2", läuft die Schleife einmal durch. (Frühe) Schlussfolgerung: Unter XP zeigt die Funktion, ob an dem IDE - Port, wo das Laufwerk hängt für das das Handle erzeugt wurde, sich noch ein weiteres Laufwerk befindet. Ist dies der Fall, muss für das andere IDE - Laufwerk ein weiteres Handle erzeugt werden, um an die Werte zu kommen. Ergo könnte man "PhysicalDriveX" auch einfach bis 3 hochzählen (mit Vorbehalt). Es käme auf dasselbe hinaus. Wär' schön, wenn diese Behauptung irgendwer mit mehreren Festplatten (IDE) stützen könnte. |
Re: SMART-Werte lesen
Ich werd's mal testen ... hab ja derzeit mehr S-ATA, als IDE dran.
Interessant wird es allerdings, wenn ich die Platten dann noch als RAID 1 zusammenschalte ... also über's BIOS und nicht per Windows ... bin schon gespannt was mir dann Windows dazu sagt :stupid: |
Re: SMART-Werte lesen
Moin!
Zitat:
Zitat:
Zitat:
\\.\PhysicalDriveX zählt immer die gefundenen Hardwaregeräte in aufsteigenden Reihenfolge. Zitat:
Zitat:
/EDIT: also \\.\CdromX funktioniert bei mir nicht... [edit=Christian Seehase]Quote-Tags korrigiert. Mfg, Christian Seehase[/edit] /EDIT: Sorry, nicht mehr kontrolliert... |
Re: SMART-Werte lesen
Liste der Anhänge anzeigen (Anzahl: 2)
\\.\ScsiX hab ich auf irgend'ner Webseite mal gesehn ... und wie gesagt, k.A. ob's stimmt.
\\.\CdromX läuft bei mir aber ganz gut ^^ (siehe Anhang) Das mit dem "S-ATA Controller im P-ATA Modus" ... hmmm, also ich hab da nichts gemacht, das läuft schon die ganze Zeit so? (GA-K8NSC-939 - BIOS Version F8) Zitat:
Die Andere (4K040H2 ... beides von Maxtor) kennt vermutlich kein SMART ... jedenfalls meint das BIOS? (kurz nach'm Start), dat S.M.A.R.T für dieses nicht aktiviert ist.
Code:
PS: (hatte jetzt mal Zeit etwas in die Codes zu gucken)
SMART interface opened...
DFP_GET_VERSION returned: bVersion = 1 bRevision = 1 fCapabilities = 0x00000007 bReserved = 0x0 bIDEDeviceMap = 0x4 SMART enabled on drive: 2 cbBytesReturned: 16 Drive 2 is an IDE Hard drive that supports SMART #Cylinders: 16383, #Heads: 16, #Sectors per Track: 63 IDE TASK FILE REGISTERS: bFeaturesReg = 0x0 bSectorCountReg = 0x1 bSectorNumberReg = 0x1 bCylLowReg = 0x0 bCylHighReg = 0x0 bDriveHeadReg = 0xA0 Status = 0xEC Model number: Maxtor 6V250F0 Firmware rev: VA11163 Serial number: V594J4NG cbBytesReturned: 528 Data for Drive Number 2 Attribute Structure Revision Threshold Structure Revision 32 32 -Attribute Name- -Attribute Value- -Threshold Value- 03 Spin Up Time 188 63 04 Start/Stop Count 253 0 05 Reallocated Sector Count 253 63 07 Seek Error Rate 253 0 08 Seek Time Performance 251 187 09 Power On Hours Count 253 0 0A Spin Retry Count 253 157 0B Calibration Retry Count 253 223 0C Power Cycle Count 253 0 BD (Unknown attribute) 100 0 BE (Unknown attribute) 72 0 C0 (Unknown attribute) 253 0 C1 (Unknown attribute) 253 0 C2 (Unknown attribute) 47 0 C3 (Unknown attribute) 253 0 C4 (Unknown attribute) 253 0 C5 (Unknown attribute) 253 0 C6 (Unknown attribute) 253 0 C7 (Unknown attribute) 199 0 C8 (Unknown attribute) 253 0 C9 (Unknown attribute) 253 0 CA (Unknown attribute) 253 0 CB (Unknown attribute) 253 180 CC (Unknown attribute) 253 0 CD (Unknown attribute) 253 0 CF (Unknown attribute) 253 0 D0 (Unknown attribute) 253 0 D2 (Unknown attribute) 253 0 D3 (Unknown attribute) 253 0 D4 (Unknown attribute) 253 0
Delphi-Quellcode:
Dat IF könnte man sich eigentlich sparren, denn CloseHandle prüft intern selbst nochmal und bei INVALID_HANDLE_VALUE macht es einfach nüschts ^^
If ( AHandle <> INVALID_HANDLE_VALUE ) Then
CloseHandle(AHandle); So, jetzt hatte ich mal ein bissl "aufgerüstet" ... leider nur mit alten Platten ... bin mal bis PhysicalDrive5 gekommen, dann sind mit die Kabel ausgegangen (OK, ich hatte keine Lust nochmal in den Keller zu geh ... 6 Etage ohne Fahrstuhl) Also mit dem MAX_IDE_DRIVES kommt ihr da schonmal nicht hin. PS: dieses HDD-Dinges geht von 0 bis 9 ... verwendet aber kein S.M.A.R.T, sondern nur IOCTL_DISK_GET_DRIVE_GEOMETRY und IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS. Ich hatte ja nur 0 bis 255 genommen, weil das BIOS die "Laufwerke" ja über'n Byte verwaltet ... ich glaub ab $80 war'n die Festplatten, also sollte wohl 0..127 ausreichend sein ... ich will ja eigentlich nicht die SMART-Werte, sodern die Daten der Platten und davon kann es halt mehr geben, also nur 4. Im Anhang mal noch'n paar Werte der Maxtor-Platte ... dort oben is ja eindeutig zuviel von (Unknown attribute) zu lesen ._. Die Werte stammen aus der WMI (Windows Management Instrumentation). (ich weiß zwar noch nicht, aber ich glaub ich komm besser, wenn ich mir mal WMI genauer anseh, dat scheint ja ganz gute Ergebnisse zu liefern und außerdem is dort nich bei 4 Schluß ._.) |
Re: SMART-Werte lesen
Zitat:
Zitat:
Ich werde wohl auch nochmal eine kleine Bastelstunde hinlegen und das INQUIRY auch nochmal über das SPTI Interface von 2000/XP aufbauen. |
Re: SMART-Werte lesen
Das mit MAX_IDE_DRIVES hab ich nun inzwischen verstanden (denk ich ma), aber wie soll es dann mögloch sein die S.M.A.R.T-Werte der IDE's abzufragen, denn diese liegen bei mir nunmal im Bereich von 2 bis 5.
Aber praktisch ist jetzt halt, daß zumindestens S.M.A.R.T auch bei meiner S-ATA-Platte vorhanden ist ^^ Und nein, hatte schonma geguckt und konnte nichts finden, wo man sowas einstellen kann -.-'' Aber sollte es dann nicht standardmäßig deaktiviert sein? (hatte nach dem BIOS-Update ja erstmal alles zurückgesetzt) |
Re: SMART-Werte lesen
Zitat:
Zitat:
|
Re: SMART-Werte lesen
Zitat:
Zitat:
Und ich hab keine Ahnung ... wußte ja noch nichtmal, dat es sowas gibt :roll: |
Re: SMART-Werte lesen
Zitat:
|
Re: SMART-Werte lesen
ich denk das zählt nur von 0 bis 3?
|
Re: SMART-Werte lesen
Zitat:
Handle PhysicalDrive0 +-- Bit 0 (nicht) gesetzt +-- Bit 1 (nicht) gesetzt +-- Bit 2 (nicht) gesetzt +-- Bit 3 (nicht) gesetzt Handle PhysicalDrive1 +-- Bit 0 (nicht) gesetzt +-- Bit 1 (nicht) gesetzt +-- Bit 2 (nicht) gesetzt +-- Bit 3 (nicht) gesetzt Handle PhysicalDrive2 +-- Bit 0 (nicht) gesetzt +-- Bit 1 (nicht) gesetzt +-- Bit 2 (nicht) gesetzt +-- Bit 3 (nicht) gesetzt Handle PhysicalDrive3 +-- Bit 0 (nicht) gesetzt +-- Bit 1 (nicht) gesetzt +-- Bit 2 (nicht) gesetzt +-- Bit 3 (nicht) gesetzt Handle PhysicalDrive4 +-- Bit 0 (nicht) gesetzt +-- Bit 1 (nicht) gesetzt +-- Bit 2 (nicht) gesetzt +-- Bit 3 (nicht) gesetzt Handle PhysicalDrive5 +-- Bit 0 (nicht) gesetzt +-- Bit 1 (nicht) gesetzt +-- Bit 2 (nicht) gesetzt +-- Bit 3 (nicht) gesetzt etc, usw, ff, bla blubb Ich weiss nicht, wie ich es sonst noch ausdrücken sollte. Die Beschränkung auf die 4 gilt nur für ein Handle, welches du über das CreateFile() auf \\.\PhysicalDriveX bekommen hast. Ich weiss nicht, wo hier das Problem liegt? |
Re: SMART-Werte lesen
Zitat:
Gleich bricht Thomas zusammen... :lol: //Edit: Ok, den Beitrag vor mit habe ich nicht gesehen. :oops: |
Re: SMART-Werte lesen
Ähhh .... ja ... OK ... dann ...
Dachte die Bits und das PhysicalDriveX gehört in dem Zusammenhang zusammen ... also bei beidem geht es nur von 0 bis 3. Im Code (SmartApp) wird doch ach aus einer Variable für beide Angaben die "Zahl" erstellt.
Delphi-Quellcode:
da kann man doch ma durcheinander kommen ._.
Drive := 'PhysicalDrive' + IntToStr(i);
Smart.irgendwas := 1 shl i; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 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