Datei ab best. Sektor auf eine Speicherkarte

Gast #598727
Lesenswert?

Hallo zusammen,

ich hab da mal eine Frage.
Hat schon mal jemand versucht eine beliebige Datei unter Windows
per C++ auf eine Speicherkarte an eine ganz bestimmte Position (Sektor, 
Cluster...) zu schreiben?
Wenn ja - wie geht sowas??
Ganz ganz früher hat man mal sowas wie eine DOS-Interrupt INT13 dafür
genommen. Aber jetzt???

Kann mir jemand eiterhelfen??


huibuh07
Persönliche Seite #598740
Lesenswert?

Du willst also gar keine Datei schreiben, sondern unter Umgehung des 
Dateisystems direkt auf dem Medium herumschreiben.

Das geht, indem das betreffende Laufwerk als sogenanntes "Raw-Device" 
angesteuert wird. Damit ist das gesamte Laufwerk eine Datei, Schreib- 
und Lesezugriffe sollten an Sektorgrenzen ausgerichtet sein und immer in 
ganzzahligen Vielfachen einer Sektorgröße erfolgen.

Mehr dazu in der Dokumentation der Win32-API-Funktion CreateFile:

http://msdn2.microsoft.com/en-US/library/aa363858.aspx

Abschnitt "Physical Disks and Volumes", beginnend mit der Textzeile 
"When opening a volume or floppy drive ..."


Persönliche Seite #599354
Lesenswert?

Habe ich schonmal gemacht:
1
HANDLE hDevice;
2

3
void sd_init(void)
4
{
5

6
   hDevice = CreateFile("\\\\.\\H:", 
7
                    GENERIC_READ | GENERIC_WRITE,
8
                    0,
9
                    NULL,             // default security attributes
10
                    OPEN_EXISTING,    // disposition
11
                    0,                // file attributes
12
                    NULL);            // do not copy file attributes
13

14
}
15

16
void sd_write(uint32_t adress, void *p_src)
17
{
18
  uint32_t nByteswritten;
19
  
20
  SetFilePointer(hDevice, adress, NULL, FILE_BEGIN);
21
  WriteFile(hDevice, p_src, 512, &nByteswritten, NULL);
22
}
23

24
void sd_read (uint32_t adress, void *p_dst)
25
{
26
  uint32_t nBytesread;
27
  
28
  SetFilePointer(hDevice, adress, NULL, FILE_BEGIN);
29
  ReadFile(hDevice, p_dst, 512, &nBytesread, NULL);
30

31
}

Allerdings alles etwas Quick and Dirty. Und bei CreateFile natürlich den 
Laufwerksbuchstaben der SD Karte angeben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren