Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

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

Re: Mit mehreren Threads auf einem physical Device schreiben

  Alt 10. Feb 2009, 20:15
Das klingt interessant Bin nicht so mit dem Aufbau der Platten und dem Dateisystem vertraut, aber die Größe der gesammten Platte ermittele ich mit:

Delphi-Quellcode:
type
  _DISK_GEOMETRY = record
    Cylinders: LARGE_INTEGER;
    MediaType: MEDIA_TYPE;
    TracksPerCylinder: DWORD;
    SectorsPerTrack: DWORD;
    BytesPerSector: DWORD;
  end;

DeviceIOControl und IOCTL_DISK_GET_DRIVE_GEOMETRY
Welchen Parameter von DeviceIOControl muss ich statt der GEOMETRY verwenden, um die Informationen zu erhalten? Ich bräuchte ja:
* Position des ersten Cluster
* Clustergröße
* Dateisystem (das wäre bei direkten Zugriff auf die physische Platte denke ich etwas kompliziert, da ja mehrere Partitionen drauf sein können)
* Position der Zuordnungstabellen (genau wie beim Dateisystem ja an die Partitionen gebunden)

Das komplette Überschreiben des ersten Clusters ist eine gute Idee. Hatte bisher einfach die ersten 20MiB genommen, um den MBR und die MFT zu überschreiben. Denke aber ab dem ersten Cluster arbeite ich dann lieber mit kleineren Paketen, da die Clustergröße im Normalfall ja schon recht groß ist.

Zitat von himitsu:
WriteFileScatter bringt in diesem Fall nichts
In deinem FileSplitter findet sich leider nur ein Beispiel mit
Delphi-Quellcode:
Function WriteFileGather(hFile: THandle; aSegmentArray: pFILE_SEGMENT_ELEMENT;
  nNumberOfBytesToWrite: LongWord; lpReserved: PLongWord; lpOverlapped: POVERLAPPED): LongBool;
  StdCall; External 'kernel32.dllName 'WriteFileGather';
Aber in meinem Programm sollte ich stattdessen einfach weiterhin WriteFile() verwenden oder? Der Overlapped Zugriff sollte gleich sein.

Gruß Zacherl
  Mit Zitat antworten Zitat