Einzelnen Beitrag anzeigen

dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#1

Bug beim auslesen der Physikalischen Festplatten

  Alt 5. Jul 2006, 17:23
Hallo zusammen,

ich hab mal wieder ein kleineres Problem
Ich verwende diesen Code von Luckie um die Physikalischen festplatten auszulesen

Delphi-Quellcode:
uses JwaWinIoctl;
// Procedure liest von jeder physikalischen Platte die Zylinder, Sektoren usw. aus
// und erechnet daraus die Größe
procedure TFrmHIS.FestplatteAuslesen();
var
  i : Integer;
  Device : String;
  dg : DISK_GEOMETRY;
  hDevice : Cardinal;
  dummy : DWORD;
  size : int64;
begin
  for i := 0 to 9 do
  begin
    hDevice := null;
    Device := '\\.\PhysicalDrive'+IntToStr(i);
    hDevice := CreateFile(pointer(Device), 0, FILE_SHARE_READ or FILE_SHARE_WRITE,
      nil, OPEN_EXISTING, 0, 0);
    if hDevice <> INVALID_HANDLE_VALUE then
    begin
      DeviceIOControl(hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0, @dg, sizeof(dg), dummy, nil);
      size := dg.Cylinders.QuadPart*dg.TracksPerCylinder*dg.SectorsPerTrack*dg.BytesPerSector;
      MemHD.Lines.Add('HD'+inttostr(i)+': '+chr(9)+IntToStr(Round(size/ 1048576)));
    end;
  end;
end;
Code hatte ich hier gefunden:
http://www.delphipraxis.net/viewtopi...3570&view=next

Mein Programm wird per NetInstall automatisch ausgeführt, sammelt Hardware und NetzwerkInfos, zeigt diese an und schreibt diese in eine Datenbank.
Funktioniert eigentlich auch einwandfrei.
Habe die Anwendung gerade im Testbetrieb bei 30 Leuten, geht eigentlich überall, nur bei 2 Leuten wird die einzige pyhsikalische Festplatte die sie haben 2mal ausgelesen. Ich kann leider nicht nachvollziehen warum

Die Physikalische Festplatte der Problemfälle steht nur einmal im Gerätemanager, jeweils als HD0. Durch Debugmeldungen die ich mir habe ausgeben lassen komme ich zu folgendem Schluss:

bei
hDevice := CreateFile(pointer(Device), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); wird für die Werte i = 0 und 1 von Device
Device := '\\.\PhysicalDrive'+IntToStr(i); ein valides Handle für ein und dieselbe Festplatte erzeugt.

Nur weiter komme ich nicht Für mich nicht nachvollziehbar wieso das nur bei 2/30 Fällen passiert und sonst einwandfrei.

Hat vielleicht jemand eine Idee wie ich dem Fehlerteufel auf die Schliche kommen könnte?
Vielen Dank schonmal für eure Antworten.

Gruß Oliver
  Mit Zitat antworten Zitat