#RequireAdmin
#include <WinAPI.au3>
#include <Array.au3>
Global $sDriveLetter = "K" ;Буква диска
Global $LBA, $nBytes, $MFT_Offset, $bytes_to_read, $tBuffer, $hdd_handle, $hFile, $MFTFull
Global $tBuffer=DllStructCreate("byte[512]"),$nBytes
Global $hComIn = _WinAPI_CreateFile("\\.\" & $sDriveLetter & ":",2,2,7)
If $hComIn = 0 then exit
$LBA = 9 ; LBA позиция
_WinAPI_SetFilePointerEx($hComIn, $LBA*512) ; Перемещает указатель на заданный LBA
$read = _WinAPI_ReadFile($hComIn, DllStructGetPtr($tBuffer), 512, $nBytes) ; Читает в буфер 512байт по номеру LBA
If $read = 0 then exit
Global $bRaw = DllStructGetData($tBuffer,1)
_WinAPI_CloseHandle($hComIn)
MsgBox(4096,'',_HexEncode($bRaw),0) ;Структурированный результат прочитанного
Func _HexEncode($bInput)
Local $tInput = DllStructCreate("byte[" & BinaryLen($bInput) & "]")
DllStructSetData($tInput, 1, $bInput)
Local $a_iCall = DllCall("crypt32.dll", "int", "CryptBinaryToString", _
"ptr", DllStructGetPtr($tInput), _
"dword", DllStructGetSize($tInput), _
"dword", 11, _
"ptr", 0, _
"dword*", 0)
If @error Or Not $a_iCall[0] Then
Return SetError(1, 0, "")
EndIf
Local $iSize = $a_iCall[5]
Local $tOut = DllStructCreate("char[" & $iSize & "]")
$a_iCall = DllCall("crypt32.dll", "int", "CryptBinaryToString", _
"ptr", DllStructGetPtr($tInput), _
"dword", DllStructGetSize($tInput), _
"dword", 11, _
"ptr", DllStructGetPtr($tOut), _
"dword*", $iSize)
If @error Or Not $a_iCall[0] Then
Return SetError(2, 0, "")
EndIf
Return SetError(0, 0, DllStructGetData($tOut, 1))
EndFunc ;==>_HexEncode
Func _WinAPI_SetFilePointerEx($hFile, $iPos, $iMethod = 0)
Local $aResult
$aResult = DllCall("kernel32.dll", "dword", "SetFilePointerEx", "hwnd", $hFile, "uint64", $iPos, "uint64*", 0, "dword", $iMethod)
If @error Then Return SetError(1, 0, -1)
;If $aResult[0] = $__WINAPCONSTANT_INVALID_SET_FILE_POINTER Then Return SetError(2, 0, -1)
Return $aResult[0]
EndFunc ;==>_WinAPI_SetFilePointer