Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: kleiner ProgrammCheck (Festplatten auslesen

  Alt 31. Jul 2006, 14:02
Zitat von static_cast:
Das kann ich jetzt leider nicht mehr beantwroten, hatte das gestern auf der Arbeit getestet, nu hab ich auch Urlaub und hier ist weit und breit kein Win2k in sicht
Komisch ist es ja schon, weil angeblich diese Funktion erst seit XP existiert (aber vielleicht gab's die ja schon vorher mal, so als versteckte API )



Erstmal hab ich inzwischen einiges umgestellt und erweitert (hoffe es läuft immernoch alles)
und dann hatte ich mich noch zu 'nem RAID-Testlauf überredet.



Da ich jetzt teilweise bis zu 3 Quellen für ein und den selben Wert abfrage, dauert es jetzt ein bissl länger (vorallem das WMI is ja nicht gerade schnell und das eine Sleep(500), zur Sicherheit, nachdem ich einen Rescan des IDE/SCSI-Busses veranlaßt habe, tut och noch so einiges, da es bei jeder Platte auftitt ._.), also gibt's nun 'nen Statusfenster wärenddessen.

Dann hoffe ich mal, daß jetzt endlich "alle" Informationen/Namen richtig angezeigt werden.
(hab sogar mal vorübergehend die beiden Buttons (unten rechts) mit 'ner Funktion belegt )

Die Infos zu den einzelnen Partitionen (Physical Drives) gibt's immernoch nicht ... konnte mich noch nicht entscheiden welche und wie ich die Werte darstelle. (es wurde aber zumindestens schonmal ein eigenes Panel dafür erstellt ^^)

Bei den Festplatten ist unter anderem das Accoustic Management hinzugekommen und auch schon funktionsfähig. (bis auf den Testlauf, aber das kläre ich in 'nem anderem Thread)
PS: obwohl mein "alte" Maxtor dieses unterstützt, auf 128 steht und wirklich recht leise läuft, läßt sie sich nicht auf Lauter stellen.
Da ich jetzt aber nicht schon beim Scannen testen will, ob sich das wirklich ändern läßt, gibt es est beim Versuch dieses zu verstellen die entsprechende Fehlermeldung.


Anschlüsse:
Bei den IDE-Geräten scheint Port dem IDE-Controler und TargetID dem Anschluß (0=First Master, 1=First Slave, 2=Second Master und 3=Second Slave) zu entsprechen?

RAID's:
siehe Fotoserie im Anhang

Da ich ja "nur" bei den Treibern und Windows nachfrage (wie man sich direkt ans BIOS wendet, weiß ich ja nicht), sehe ich auch nur das, was man mir sagt und bei Hardware-RAIDs wird der RAID als eine "Festplatte" angezeigt und nicht jede Platte einzeln.

Die Software-RAIDs (hier das von Windows ... hoffe bei anderen ist es ähnlich) werden die Platten von den Treibern einzeln angegeben, und erst dann macht Windows eine "logische" Platte daraus.
Also theoretisch könnte man bei den Software-RAIDs auch die Platten einzeln untersuchen ... und was noch praktisch ist: man kann auch den ungenutzen Platz verwenden, welches bei meinem RAID-Controler nicht möglich ist (wenn es überhaupt irgendein bezahlbarer RAID-Controler kann ... k.A.).

Beim Software RAID müssen allerdings die Platten als dynamische Plättchen eingebunden sein und bestehen somit nur aus einer großen Partition (der Dynamischen).
Was aber für ein RAID-System vorliegt wird da nicht gesagt ... bis jetzt könnte ich höchstens aus Größe der Logischen Disk und den dazugehörigen DiskExtents heraus vermuten, was und ob es einer ist (ob z.B. kein RAID, RAID 0, oder RAID 1 ... bei Sonderformen wird's schwierig).


Ach ja, immernoch ab WinXP.




in den RAIDs haben sich folgende Plättchen vergnügt:
Hardware-RAID: Seagate ST31276A und Maxtor 4K040H2
Software-RAID: Seagate ST31276A und Maxtor 6V250F0

Und wen es interessiert ... der einzige (bis jetzt) Zugriff auf irgendwelche Daten auf den Platten geschieht beim Test im Accoustic Management:
Delphi-Quellcode:
M := TAcousticManagementTestMessage.Create(Self);
Try
  SetText(M.Label2, PhysicalDrives[Di].VolumeName);
  M.Show;
  i2 := (PhysicalDrives[Di].DiskSize div PhysicalDrives[Di].BytesPerSector) div $7FFFFFFF;
  If i2 <= 0 Then i2 := 1;
  i := (PhysicalDrives[Di].DiskSize div PhysicalDrives[Di].BytesPerSector) div i2;
  SetLength(R, PhysicalDrives[Di].BytesPerSector);
  i3 := 0; i4 := 0;
  Ts := GetTickCount;
  T := Ts;
  Repeat
    Inc(i3);
    Pos.QuadPart := Int64(PhysicalDrives[Di].BytesPerSector) * (i2 * Random(i));
    SetFilePointer(Dh, Pos.LowPart, @Pos.HighPart, FILE_BEGIN);
    If ReadFile(Dh, R[0], PhysicalDrives[Di].BytesPerSector, W, nil) Then Inc(i4, W);
    If LongInt(T - GetTickCount) <= 0 Then Begin
      SetText(M.Label4, IntToStr(i3));
      SetText(M.Label6, IntToStr(i4 shr 10) + ' KB');
      T := 15 - Integer((GetTickCount - Ts) div 1000);
      If Integer(T) <= 0 Then M.Tag := 1;
      S := 'Cancel (' + IntToStr(T) + ')';
      If GetText(M.Button4) <> S Then SetText(M.Button4, S);
      Application.ProcessMessages;
      T := GetTickCount + 150;
    End;
  Until M.Tag > 0;
  SetText(M.Button4, 'Close');
  Repeat
    Sleep(50);
    Application.ProcessMessages;
  Until M.Tag > 1;
Finally
  M.Free;
End;
Und wie man sieht, kann aus "Sicherheitsgründen" die Platte auch nicht all zulange belastet werden ... ich will ja nicht, daß den Leseköpfen schwindlig wird

[edit] DL entfernt

Download v01.08.06 8:13: http://www.delphipraxis.net/download.php?id=20621
Angehängte Dateien
Dateityp: zip fotoserie_146.zip (625,6 KB, 26x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat