Also genauso habe ich es bis jetzt auch gemacht (Variante A).
Dann in Delphi die folgende Prozedure genutzt.
Ich lese direkt zwei Sektoren aus!!
Code:
Procedure sektorlesen(sektor:longint;var buf);
var readbytes:longint;
buffersize:cardinal;
tt:file of byte;
const bu = 1024;
var av:integer;
begin
DeviceHandle := CreateFile(pchar(sdlw), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_FLAG_RANDOM_ACCESS, 0);
// midicon.JvEdit3.Text:=inttostr(getlasterror);
FileSeek(DeviceHandle, (sektor*1024), 0);
readbytes:=FileRead(DeviceHandle, Buf, bu);
// DeviceIoControl(DeviceHandle, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,
// @DiskGeometry, sizeof(DiskGeometry), Dummy, nil)
CloseHandle(DeviceHandle);
end;
Auch für das Suchen der SD Karte gibt es eine Funktion.
Code:
function sdsuchen:string;
var a2,a3,a5:byte;
laufwerk:pchar;
b1,a4:longint;
testext:string[10];
const bu=1024;
begin
a2:=0;
while testext<>'MIDICONSK' do
begin
seterrormode(SEM_FAILCRITICALERRORS);
laufwerk:=pchar('\\.\PHYSICALDRIVE'+inttostr(a2));
DeviceHandle := CreateFile(laufwerk, GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_FLAG_RANDOM_ACCESS, 0);
FileSeek(DeviceHandle, 1024, 0);
a4:=FileRead(DeviceHandle, buffer, bu);
testext:='' ;
a3:=getlasterror;
if a3 <> 0 then
begin
showmessage('Keine MIDICON formatierte SD-Karte gefunden');
exit;
end;
for a5:=1 to 9 do
testext:=testext+buffer[748+a5];
//showmessage('Alles ok');
// midicon.JvEdit3.Text:=inttostr(a3)+' '+inttostr(a2)+' '+inttostr(a4);
// midicon.JvEdit4.Text:='::'+testext+'#'+buffer[700+a5];
CloseHandle(DeviceHandle);
inc(a2);
end;
midicon.Memo1.lines.add('SD-KARTE gefunden');
midicon.Memo1.lines.add('SD-KARTE MIDICON FORMAT');
midicon.Memo1.lines.add('Windows Kennung: '+laufwerk);
result:=laufwerk;
end;
Die Karte habe ich per Bascom Formatiert und jedem meiner 1000 Datensätze (je 2 Sektoren a 512 Byte) den Text MIDICON in ein Feld geschrieben. So kann ich die Karte sicher an dem Text erkennen.
Es gibt mit Sicherheit elegantere Lösungen, diese klappt jedoch.
!!!!ACHTUNG, per WIN API im und am Laufwerk herumfummel kann relativ unangenehm werden. Also am besten einen alten Rechner nehmen udn wichtige Daten vorher Sichern. Zu Zeiten von 8086 und 80386 habe ich mir nicht nur einmal mit Interruptroutinen meine Platten gelöscht. Es muß nix passieren, aber es kann.!!
Benutzung wie immer auf eigene Gefahr.
Gruß,
Stephan
Lesezeichen