![]() |
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 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