Thema: Delphi Festplatten bezeichnung

Einzelnen Beitrag anzeigen

delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#1

Festplatten bezeichnung

  Alt 28. Apr 2007, 13:34
Hallo

Ich brauch dringend eure hilfe ich find einfach keine lösung für mein problem.

Also folgendes. Ich lese mit meinem Programm die Bezeichnung eines Laufwerks aus. z.B. SAMSUNG S0H2J1WL826549 USB Device.
Diese bezeichnug hole ich mir aus der registry mir folgenden code:

Delphi-Quellcode:
procedure TForm1.readdrivenames;
var Reg:TRegistry;
  I: Integer;
  regpath:String;
begin
  for I := 0 to drivesdetected - 1 do
    begin
      Reg:=TRegistry.Create;
      try
        Reg.RootKey:=HKEY_LOCAL_MACHINE;
        reg.Access:=KEY_READ;
        Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\disk\Enum', false);
        if Reg.ValueExists(inttostr(I)) then
          begin
            regpath:=Reg.ReadString(inttostr(I));
          end;
        Reg.CloseKey;
      finally
        Reg.Free;
      end;

      Reg:=TRegistry.Create;
      try
        Reg.RootKey:=HKEY_LOCAL_MACHINE;
        reg.Access:=KEY_READ;
        Reg.OpenKey('\SYSTEM\CurrentControlSet\Enum\'+regpath, false);
        hddrive[i]:=Reg.ReadString('FriendlyName');
        hddrive2[i]:=Reg.ReadString('FriendlyName');
        Reg.CloseKey;
      finally
        Reg.free;
      end;
   end;
end;
in drivesdetected steht die Anzahl der Laufwerke die erkannt wurden (auch aus registry)

Allerdings gibt es ein problem. Ich muss der Laufwerksbezeichnung die echte Laufwerksnummer im system zuordnen. In der registry wird die nummer nach der reihenfolge wie die erkannt wurden vergeben. Wenn ich jetzt z.B eine festlpatte einstecke (USB) und einen stick bekommt der stick in der registry die nummer "1" und die Festplatte die nummer "2". Wenn ich den stick jetzt abziehe bekommt die Festplatte in der registry die "1" zugeordnet. im system bleibt es aber die nummer "2". also der systempfad zu der festplatte wäre also "\\.\PhysicalDrive2". da mein programm die werte aus der registry ausliest, bekommt es den pfad "\\.\PhysicalDrive1" zugeordnet.

kann ich die Bezeichnung auch anders ermitteln, damit es da keine konflikte gibt? z.B. über eine API funktion?
  Mit Zitat antworten Zitat