Hardwarezugriff auf SD-Card



  • Hi all,

    ich habe folgendes Problem. Ich möchte ein C/C++ Programm (unter Windows) schreiben welches auf eine SD-Card die in einem USB Card Reader steckt auf einzellne Sektoren zugreifen. d.h. Ich möchte an einen bestimmten Sektor einen ganz bestimmten wert schreiben. Es geht hier erstmal nur ums beschreiben.
    Das Problem was ich jetzt sehe ist das Windows ja die Karte gemountet hat und ich keinen Zugriff drauf habe.

    Unter Linux kann ich das ohne weiteres mit hilfe des dd Befehls.
    z.B. dd if=FileToUpload of=/dev/sda bs=512 count=1024

    genau das möchte unter windows aus meinen Programm machen.

    Danke
    Stefan



  • Warum geht es mit CreateFile, WriteFile nicht? Was bekommst Du für einen Fehler?

    CreateFile(_T("e:\\"), ..., FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_SHARE_DELETE)
    




  • danke für die schnellen antworten.
    über diese funktion habe ich die parameter der disk bekommen,

    hDevice = CreateFile("\\\\.\\f:",  // drive to open
              0,//FILE_ALL_ACCESS,                // no access to the drive
              FILE_SHARE_READ | // share mode
              FILE_SHARE_WRITE, 
              NULL,             // default security attributes
              OPEN_EXISTING,    // disposition
              0,                // file attributes
              NULL);            // do not copy file attributes
    
    bResult = DeviceIoControl(hDevice,  // device to be queried
          IOCTL_DISK_GET_DRIVE_GEOMETRY,  // operation to perform
          NULL, 0, // no input buffer
          pdg, sizeof(*pdg),     // output buffer
          &junk,                 // # bytes returned
         (LPOVERLAPPED) NULL);  // synchronous I/O
    

    allerdings habe ich noch nix drauf schreiben können. Ich habe auch keine parameter für DeviceIoControl gefunden die dies tun können.

    DANKE
    stefan



  • Hallo

    Auf meiner Homepage http://members.inode.at/anton.zechner/az/index.html
    findest du ein Tool namens DiskViewer samt Sourcen, das genau das macht.



  • Hi,

    ich habe es jetzt auch schon geschafft blöcke auf die Karte zu schreiben. Allerdings Verhält sich das programm auf verschiedenen Rechnern unterschiedlich.
    Wenn ich auf dem einen Rechner auf Sector 0 schreibe wird auch auf die Position 0 geschrieben. Bei meinem Laptop wird aber beim schreiben auf Sector 0 erst an eine Stelle weiter hinten geschrieben (ich glaube da wo das Filesystem los geht) geschrieben.

    Es scheind so zu sein das einmal das laufwerk physisch geöffnet wird und einmal nur das Dateisystem (mit dem gleichen Programm)

    Danke
    Stefan


Anmelden zum Antworten