Der andere Schutz besteht dann wohl in den restlichen 2860 Sektoren, die du nicht kopierst. Ist dir nicht aufgefallen, dass das Kopieren nicht etwas zu schnell war?
Zudem: Ich hatte jetzt keine Lust mich durch die Windows.pas zu schlagen in der Hoffnung, dass ich herausbekomme was 49 bedeuten soll. Also habe ich es durch MB_OKCANCEL ersetzt. Neben dem, das es schlechter Programmierstil ist, wird es in der professionellen Softwareentwicklung (=Beruf) nicht gerade gern gesehen, wenn man die Konstanten über Bord wird und durch Zahlen ersetzt. Du musst immer damit rechnen, dass andere den Quellcode lesen wollen.
Delphi-Quellcode:
function CopyDisk: Boolean;
var
raw: TRawDrive;
Buf: Pointer;
Sectors: Integer;
BytesPerSector: Integer;
begin
Result := False;
Raw := RawOpenDrive('a');
if Raw.Handle <> 0 then
begin
// wieviel Sektoren sind überhaupt auf der Diskette
with Raw.DiskGeometry do
Sectors := Cylinders * TracksPerCylinder * SectorsPerTrack;
BytesPerSector := Raw.DiskGeometry.BytesPerSector;
GetMem(Buf, Sectors * BytesPerSector); // genug Speicher reservieren
try
try
RawReadSectors(Raw, Buf^, Sectors); // alle Sektoren einlesen, das dauert
finally
RawCloseDrive(Raw);
end;
if Application.MessageBox('Neue Floppy Einlegen','Meldungsfenster', MB_OKCANCEL) = IDYES then
begin
Raw := RawOpenDrive('a');
try
RawWriteSectors(Raw, Buf^, Sectors); // alle Sektoren schreiben, dauert noch länger
finally
RawCloseDrive(Raw);
end;
Result := True; // Kopieren war erfolgreich
end;
finally
FreeMem(Buf);
end;
end;
end;