AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SMART-Werte lesen

Ein Thema von ManuMF · begonnen am 23. Jun 2006 · letzter Beitrag vom 31. Jul 2007
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    
Muetze1
(Gast)

n/a Beiträge
 
#11

Re: SMART-Werte lesen

  Alt 26. Jun 2006, 08:32
Zitat von Daniel G:
Zitat von Muetze1:
Ich versuche den ATAPI_INQUIRE an meine ATAPI Laufwerke zu senden, aber ich bekomme diese grundlegend nicht erreicht.
ATAPI - Laufwerke? Du meinst Wechseldatenträger, oder? Was genau willst du denn da machen?
Also Geräte welche das Packet Interface am ATA Anschluss nutzen - z.B. Brenner, DVD ROMs, etc. Grundlegend meistens Wechseldatenträger bzw. Datenträger mit einer Sektorgrösse ungleich 512. Diese Laufwerke reagieren nicht auf den DEVICE_INQUIRY Befehl für ATA Laufwerke, daher.
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#12

Re: SMART-Werte lesen

  Alt 26. Jun 2006, 09:58
Zitat von Muetze1:
Also Geräte welche das Packet Interface am ATA Anschluss nutzen - z.B. Brenner, DVD ROMs, etc.
Ja, ok, ich hatte mich nur gewundert. Ich seh' grad, der "Inquiry" - Code für ATAPI und SCSI ist derselbe. Ich verwende für sowas eigentlich immer das SCSI_PASSTHROUGH_INTERFACE. Aber warum das bei dir nicht klappt... Wie erzeugst du dein Handle?

Sind wir eigentlich OT?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: SMART-Werte lesen

  Alt 26. Jun 2006, 10:32
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.
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#14

Re: SMART-Werte lesen

  Alt 1. Jul 2006, 15:03
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:
//Zeile 86
For i := 0 To MAX_IDE_DRIVES Do
Is' jetzt kein Beinbruch, aber ich fand es halt erwähnenswert, weil ich das als Basis für eine Neuauflage von Be S.M.A.R.T. (oh gott,schon fast zwei Jahre alt...) nutzen wollte, wenn du nichts dagegen hast.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: SMART-Werte lesen

  Alt 2. Jul 2006, 14:01
Jo, stimmt.

Nutze den Code, ist mir egal. War ja nur mal eine schnelle Portierung.
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#16

Re: SMART-Werte lesen

  Alt 10. Jul 2006, 17:15
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:
//---------------------------------------------------------------------
// 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;
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.

Wollte ich nur als kleinen Hinweis geben, für Leute, die den Code verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#17

Re: SMART-Werte lesen

  Alt 10. Jul 2006, 18:51
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#18

Re: SMART-Werte lesen

  Alt 10. Jul 2006, 18:55
Zitat von himitsu:
dann hab ich aber seit kurzem die neuen Platten an den S-ATAs
Funktioniert der Code denn mit S-ATA Platten? Ich meine mal gelesen zu haben, dass das nicht geht.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: SMART-Werte lesen

  Alt 10. Jul 2006, 21:29
Ä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 von himitsu:
ich lasse von 0 bis 255 durchlaufen ...
Nach der Definition der Bits oben dürfte dir vllt. klar werden, das somit die meisten Abfragen die mit der Schleifenvariable gebaut werden Müll sind. Schon allein die Drive Selection in den Kommando-absetzenden-Proceduren kommt damit völlig aus dem Tritt. Du produzierst damit Überläufe in den Command/Drive/Head/Cylinder Registern die über die Struktur befüllt werden. Deine Datensicherheit scheint dir ja nicht viel Wert zu sein.

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 von Daniel G:
Das muss für jede Festplatte ein Handle mit '\\.\PhysicalDrivex' (x = Zahl von 0 - 3) erzeugt werden.
Probier es aus, aber ich behaupte du wirst niemals ein gesetztes Bit finden bei einem \\.\PhysicalDriveX bei x > 0.

/EDIT: So, der Thread wird ja doch noch weiter gepflegt, ich lass mich denn mal doch benachrichtigen...
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#20

Re: SMART-Werte lesen

  Alt 10. Jul 2006, 21:44
Zitat von Muetze1:
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:
Das bestreite ich auch nicht. Allerdings werden mir zweimal die selben Daten geliefert. Ich hab's mal getestet:

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:
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
...dann mit

Delphi-Quellcode:
Result := CreateFile('\\.\PhysicalDrive1', GENERIC_READ Or GENERIC_WRITE,
                         FILE_SHARE_READ Or FILE_SHARE_WRITE, Nil, OPEN_EXISTING, 0, 0);
Code:
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
@Muetze1: Verstehst du jetzt mein Problem?

//Edit:
Zitat:
Probier es aus, aber ich behaupte du wirst niemals ein gesetztes Bit finden bei einem \\.\PhysicalDriveX bei x > 0.
Dann hätte obiges ja gar nicht funktionieren dürfen, oder?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


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 09:06 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