Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.11.2010, 19:22
NSS_201 NSS_201 вне форума
Прохожий
 
Регистрация: 09.10.2010
Сообщения: 3
Репутация: 10
По умолчанию Как считать побайтно 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; 
Admin: Не забываем про теги!

Блок параметров биос получается считать расшифровать, всё как нужно, а Partition Table вообще никак не даётся. Я думаю может функция CreateFile не даёт возможность обратиться к первому сектору всего физического диска, а можно только к тому же сектору раздела обратиться? Может знает кто, как к Partition Table обратиться?
(запускаю прогу от имени администратора)

Последний раз редактировалось Admin, 27.11.2010 в 19:36.
Ответить с цитированием
  #2  
Старый 27.11.2010, 19:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

У тебя неправильное обращение к диску (его имя).
Должно быть что-то типа '\\.\PhysicalDrive'+s
Ответить с цитированием
  #3  
Старый 27.11.2010, 19:53
NSS_201 NSS_201 вне форума
Прохожий
 
Регистрация: 09.10.2010
Сообщения: 3
Репутация: 10
По умолчанию

Спасибо, только тогда "S" в этой конструкции это имя диска или его номер?
Ответить с цитированием
  #4  
Старый 27.11.2010, 20:01
NSS_201 NSS_201 вне форума
Прохожий
 
Регистрация: 09.10.2010
Сообщения: 3
Репутация: 10
По умолчанию

Оп, кажется я понял. Спасибо Imikle за помощь)
Ответить с цитированием
  #5  
Старый 11.01.2011, 10:06
ShenZN ShenZN вне форума
Прохожий
 
Регистрация: 10.01.2011
Сообщения: 5
Репутация: 10
По умолчанию Считывание с карты памяти

Доброго времени суток!

Возникла похожая проблема. Нужно считать по байтно каждый сектор карты памяти 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  
Старый 11.01.2011, 10:30
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter