Frage

In C, den Standard-Windows-API verwenden, was ist der beste Weg, um eine unformatierte Diskette zu lesen? Genauer gesagt, ich habe eine MMC oder SD-Karte mit Daten, aber kein Dateisystem (nicht FAT16, FAT32 nicht nur Rohdaten). Wenn es eine einfache Möglichkeit, die gesamte Karte für Byte für Byte binären Zugriff zu öffnen ist, das wäre toll.

Danke!

War es hilfreich?

Lösung

Ich würde mit

HANDLE drive = CreateFile(_T("\\.\PhysicalDrive0"), GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
// error handling
DWORD br = 0;
DISK_GEOMETRY dg;
DeviceIOControl(drive, IOCTL_DISK_GET_DRIVE_GEOMETRY, 0, 0, &dg, sizeof(dg), &br, 0);
//
LARGE_INTEGER pos;
pos.QuadPart = static_cast<LONGLONG>(sectorToRead) * dg.BytesPerSector;
SetFilePointerEx(drive, pos, 0, FILE_BEGIN);
const bool success = ReadFile(drive, sectorData, dg.BytesPerSector, &br) && br == dg.BytesPerSector;
//
CloseHandle(drive);

Bitte beachten Sie, dass, um zu überprüfen, ob Sie erfolgreich einen Sektor gelesen haben, dass die Lese-Byte-Anzahl auf die Anzahl von Bytes entspricht überprüfen müssen Sie lesen wollte, also in meiner Erfahrung ReadFile- () auf einem physischen Datenträger können zurückkehren TRUE, selbst wenn keine Bytes gelesen (oder vielleicht habe ich nur einen Buggy-Treiber).

Das Problem, das bleibt, ist Ihr Laufwerk Nummer zu bestimmen (0 wie in meinem Beispiel verwendet wird, bezieht sich auf C: das ist wahrscheinlich nicht das, was Sie wollen). Ich weiß nicht, wie das zu tun, aber wenn Sie nur ein Laufwerk angeschlossen, die nicht formatiert ist, sollte es möglich sein, durch das Öffnen jedes Physical, um fordern und fordert DeviceIOControl () mit IOCTL_DISK_GET_DRIVE_LAYOUT_EX als Befehl:

DRIVE_LAYOUT_INFORMATION_EX dl;
DeviceIOControl(drive, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, 0, 0, &dl, sizeof(dl), &br, 0);
if(dl.PartitionStyle == PARTITION_STYLE_RAW)
{
  // found correct disk
}

Aber das ist nur eine Vermutung.

Andere Tipps

Funktion Create Bezug auf MSDN

Blättern Sie nach unten zu „Physische Datenträger und Volumes.“ - beachten Sie die Sicherheitsbeschränkungen für Vista gelten nicht für voulmes ohne Dateisystem, so dass Sie in Ordnung sein, auch unter Vista unter den Bedingungen, die Sie gegeben haben,

Sie haben die Gerätedatei zu öffnen, mit Create und verwenden Sie dann ReadFile- / < a href = "http://msdn.microsoft.com/en-us/library/aa365468(VS.85).aspx" rel = "nofollow noreferrer"> ReadFileEx . Vergessen Sie nicht, die Datei mit Closehandle

schließen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top