AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mit mehreren Threads auf einem physical Device schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Mit mehreren Threads auf einem physical Device schreiben

Ein Thema von Zacherl · begonnen am 10. Feb 2009 · letzter Beitrag vom 11. Feb 2009
 
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
 


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 00:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz