SD karte RAW lesen

  • ich probiere eine sd Karte im raw modus zu lesen und in ein file zu speichern
    das ich dann wieder auf eine andere karte schreiben kann
    "sd karten raw format copier tool|"

    das liest mir die ersten 512byte aus ( wie würde der loop aussehen um die ganze karte zu kopieren?)

    [autoit]

    #RequireAdmin
    #include <WinAPI.au3>

    [/autoit][autoit][/autoit][autoit]

    $sFileName = "\\.\PhysicalDrive0";
    $iCreation = 2; OPEN_EXISTING
    $iAccess = 2; GENERIC_READ
    $iShare = 2+4; FILE_SHARE_READ + FILE_SHARE_WRITE

    [/autoit][autoit][/autoit][autoit]

    $hFile = _WinAPI_CreateFile($sFileName, $iCreation, $iAccess, $iShare)

    [/autoit][autoit][/autoit][autoit]

    _WinAPI_SetFilePointer($hFile,0)

    [/autoit][autoit][/autoit][autoit]

    Global $nBytesReceived
    $tBuffer = DllStructCreate("byte[512]")

    [/autoit][autoit][/autoit][autoit]

    _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer,1), 512, $nBytesReceived)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"Results",Hex(DllStructGetData($tBuffer,1)))

    [/autoit]
  • Ok

    So kann man eine karte ("\\.\PhysicalDrive7") lesen und in ein file ("C:\testRaw.txt") schreiben.

    Das funktioniert auch ganz gut nur das zurückschreiben auf die karte geht nicht.


    [autoit]

    $hFileWrite = _WinAPI_CreateFile("C:\testRaw.txt", 1, 4)

    [/autoit][autoit][/autoit][autoit]

    $sFileName = "\\.\PhysicalDrive7";
    $iCreation = 2; OPEN_EXISTING
    $iAccess = 2; GENERIC_READ
    $iShare = 2 + 4; FILE_SHARE_READ + FILE_SHARE_WRITE

    [/autoit][autoit][/autoit][autoit]

    $hFile = _WinAPI_CreateFile($sFileName, $iCreation, $iAccess, $iShare)
    If @error Or $hFile = Ptr(0) Then
    $str = "Could not open file " & $sFileName & @CRLF
    $str &= "Error: " & @error & @CRLF
    $str &= "Handle: " & $hFile
    MsgBox(0, "Error: _WinAPI_CreateFile", $str)
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $counter = 0
    While 1
    _WinAPI_SetFilePointer($hFile, $counter); Beginning of file
    If @error Then
    MsgBox(0, "Error: _WinAPI_SetFilePointer", StringFormat("Could not move pointer. (Error %d)\n", @error))
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Global $nBytesReceived
    $tBuffer = DllStructCreate("byte[512]")

    [/autoit][autoit][/autoit][autoit]

    _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer, 1), 512, $nBytesReceived)

    [/autoit][autoit][/autoit][autoit]

    ;write
    _WinAPI_SetFilePointer($hFileWrite, $counter)
    _WinAPI_WriteFile($hFileWrite, DllStructGetPtr($tBuffer), 512, $nBytesReceived)

    [/autoit][autoit][/autoit][autoit]

    $counter += 512
    WEnd

    [/autoit]