AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi PhysicalDriveX - Was versteckt sich eigentlich dahinter?
Thema durchsuchen
Ansicht
Themen-Optionen

PhysicalDriveX - Was versteckt sich eigentlich dahinter?

Ein Thema von Mithrandir · begonnen am 25. Aug 2009 · letzter Beitrag vom 26. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 21:48
Tja

Ehrlich gesagt, bin ich mir beim Titel nicht so sicher. Es geht sich strenggenommen um folgendes:

Ich schreibe eine Anwendung, die Festplatteninformationen auslesen soll. Ich habe mir dazu Luckies HDDInfo.pas angesehen, und habe festgestellt, dass er es sich recht einfach gemacht hat:

Delphi-Quellcode:
procedure THDDInfo.GetHDDsCount;
var
  i : Integer;
  Device : string;
  hDevice : Cardinal;
begin
  for i := 0 to 9 do
  begin
    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
      Inc(FHDDsCount);
  end;
end;
So wird die Anzahl der Festplatten ermittelt. Und die DiskGeometry wird so ermittelt:

Delphi-Quellcode:
procedure THDDInfo.GetDiskGeometry;
var
  i : Integer;
  Device : string;
  hDevice : Cardinal;
  dg : DISK_GEOMETRY;
  dummy : DWORD;
begin
  setlength(FCylinders, FHDDsCount);
  setlength(FTracksPercylinder, FHDDsCount);
  setlength(FSectorsPerTrack, FHDDsCount);
  setlength(FBytesPerSector, FHDDsCount);
  for i := 0 to FHDDsCount - 1 do
  begin
    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
      if DeviceIOControl(hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0, @dg,
        sizeof(dg), dummy, nil) = true then
      begin
        FCylinders[i] := dg.Cylinders.QuadPart;
        FTracksPerCylinder[i] := dg.TracksPerCylinder;
        FSectorsPerTrack[i] := dg.SectorsPerTrack;
        FBytesPerSector[i] := dg.BytesPerSector;
      end
      else
      begin
        FCylinders[i] := 0;
        FTracksPerCylinder[i] := 0;
        FSectorsPerTrack[i] := 0;
        FBytesPerSector[i] := 0;
      end;
    end;
    CloseHandle(hDevice);
  end;
end;
Daraus schließe ich, dass es sich bei "PhysicalDriveX" immer um "FixedMedia" handeln muss. Stimmt das? Wenn nicht, dann hat Luckies Code imho diesen Denkfehler drin...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 21:53
Die PhysicalDrive Ports sind dazu da, um "physisch" auf Festplatten zu schreiben, davon zu lesen oder halt Informationen über die Medien zu ermitteln. Auf fixed Media beschränkt sind diese Zugriffe allerdings nicht. Z.B. meine Externe Festplatte (USB) kann ich ohne weiteres auch per PhysicalDrive ansprechen.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#3

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 21:57
Zitat von Zacherl:
Ja die PhysicalDrive Ports sind dazu da, um "physisch" auf Festplatten zu schreiben oder davon zu lesen. Auf fixed Media beschränkt sind diese Zugriffe allerdings nicht. Z.b. meine Externe Festplatte (USB) kann ich ohne weiteres auch per PhysicalDrive ansprechen.
Hmm.... Ok, danke. Das heißt, folgendes Szenario wäre theoretisch auch möglich?

PhysicalDrive0 - Festplatte 1
PhysicalDrive1 - Festplatte 2
PhysicalDrive2 - DVD-Brenner
PhysicalDrive3 - Festplatte 3
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 21:59
Nein, das ist nicht möglich. Nach meiner Erfahrung können nur Festplatten so angesprochen werden (Hierbei ist es aber egal, ob diese fest verbaut sind, oder extern angeschlossen wurden). Ob auf USB Sticks oder sonstige festplattenähnlichen Speichermedien auch auf diese Weise zugegriffen werden kann, weiß ich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#5

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 22:04
Hm, ok. Ich denke, ich werden dann die Laufwerksnummer zusätzlich mit in meiner Struktur speichern und im Vorfeld prüfen, ob das Laufwerk SMART-fähig ist und ansonsten verwerfen.

Danke.


P.S.: Hab grad ne SD-Karte in den internen Card Reader geschoben. Sie ist zumindest über PhysicalDrive ansprechbar...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 22:06
Das meinte ich mit "festplatten-ähnliche" Medien Sowas wie DVD Laufwerke / Brenner wirst du nicht ansprechen können. USB Sticks, MemoryCards, etc dann wohl schon. Dazu kannst du aber auch per MSDN-Library durchsuchenGetDriveType den Typ des Laufwerks abfragen, wenn das für dich von Belang ist.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 22:18
Ich weiß nicht, ob das alles noch seine Gültigkeit hat (Vista, Win7), aber in der Code-Library gibt es einen ganz netten Eintrag zu dem Thema: Laufwerke finden und erkennen. Evtl. kannst du das mit in deinen Code einfließen lassen.

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#8

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 22:22
Hey ihr zwei,

Danke nochmal.

Da für mich eh nur Laufwerke interessant sind, die S.M.A.R.T. unterstützen, filter ich sie nach diesem Kriterium.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 25. Aug 2009, 23:15
Zitat von Daniel G:
Ich habe mir dazu Luckies HDDInfo.pas angesehen,
Musst du diese Jugendsünde von mir unbedingt wieder rauskramen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: PhysicalDriveX - Was versteckt sich eigentlich dahinter?

  Alt 26. Aug 2009, 00:34
Zitat von Daniel G:
Zitat von Zacherl:
Ja die PhysicalDrive Ports sind dazu da, um "physisch" auf Festplatten zu schreiben oder davon zu lesen. Auf fixed Media beschränkt sind diese Zugriffe allerdings nicht. Z.b. meine Externe Festplatte (USB) kann ich ohne weiteres auch per PhysicalDrive ansprechen.
Hmm.... Ok, danke. Das heißt, folgendes Szenario wäre theoretisch auch möglich?

PhysicalDrive0 - Festplatte 1
PhysicalDrive1 - Festplatte 2
PhysicalDrive2 - DVD-Brenner
PhysicalDrive3 - Festplatte 3
inkl. IDE/SATA via USB/Firewire
inkl. Speicherkarten
inkl. USB-Sticks
exkl. DVD/CD
exkl. DAT-Streamer
exkl. Disketten

also fast alles, welches sich wie eine Festplatte ansteuern läßt
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:45 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