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