|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Как считать побайтно Partition Table системного диска
Необходимо считать и расшифровать 1ый сектор системного диска (файловая система FAT32), при этом использую стандартный метод хорошо всем известный:
Код:
begin ... df := CreateFile(PChar(diskName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if df <> 0 then begin ReadFile (df, buf, 512, reads, nil); ... end; Блок параметров биос получается считать расшифровать, всё как нужно, а Partition Table вообще никак не даётся. Я думаю может функция CreateFile не даёт возможность обратиться к первому сектору всего физического диска, а можно только к тому же сектору раздела обратиться? Может знает кто, как к Partition Table обратиться? (запускаю прогу от имени администратора) Последний раз редактировалось Admin, 27.11.2010 в 19:36. |
#2
|
|||
|
|||
У тебя неправильное обращение к диску (его имя).
Должно быть что-то типа '\\.\PhysicalDrive'+s |
#3
|
|||
|
|||
Спасибо, только тогда "S" в этой конструкции это имя диска или его номер?
|
#4
|
|||
|
|||
Оп, кажется я понял. Спасибо Imikle за помощь)
|
#5
|
|||
|
|||
Считывание с карты памяти
Доброго времени суток!
Возникла похожая проблема. Нужно считать по байтно каждый сектор карты памяти Flash (SD card, micro SD). Так как там записаны данные без использования файловой системы. Посмотрев код первого сообщения и порывшись в интернете написал такую процедуру: Код:
var df : THandle; nb, sector : cardinal; buf : array [0..512] of cardinal; // ??? buf: string; i: integer; begin sector:=512; nb:=0; df := CreateFile(PChar('\\.\F:'), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if df <> 0 then begin SetFilePointer(df, 512, nil, FILE_BEGIN); ReadFile (df, buf, sector,nb,nil); if (debug) then begin for i:=1 to 511 do begin Form5.Memo1.Lines.Add(IntToStr(buf[i])); end; end; end; CloseHandle(df); end; Подскажите пожалуйста, может я что то не так делаю. При выполнении какие-то данные выводит, но они похожи на мусор. Непонятно так же в какого типа должна быть переменная BUF в функции ReadFile, то есть указатель какого типа. Числовой или строчный. И вообще в каком формате происходит считывание с носителя, нужно получить каждый байт каждого сектора. Огромное спасибо! |
#6
|
||||
|
||||
Код:
var h: THandle; buf: array [0..$ffff] of Char; dummy: Cardinal; begin h:=CreateFile( PChar('\\.\G:'), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0 ); if h=0 then raise Exception.Create(SysErrorMessage(GetLastError)); SetFilePointer(h, $0000, nil, FILE_BEGIN); if ReadFile(h, buf, SizeOf(buf), dummy, nil) then Memo1.Text:=Copy(buf, 1, dummy) else ShowMessage(SysErrorMessage(GetLastError)); CloseHandle(h); end; Пишу программы за еду. __________________ |