Как читать необработанный блок с запоминающего устройства USB с Delphi? - PullRequest
7 голосов
/ 19 октября 2011

Я имею дело с запоминающим устройством USB, которое содержит проприетарную файловую систему. Итак, мне нужно прочитать 512-байтовые блоки этого устройства, чтобы реализовать средство просмотра для этой файловой системы.

Как мне это сделать? Есть ли материал на нем с использованием Delphi?

Ответы [ 4 ]

7 голосов
/ 20 октября 2011

Я ненавижу компоненты, поэтому вот код

 var 
    RawMBR : array [0..511] of byte;
    btsIO  : DWORD;
 begin
  hDevice := CreateFile('\\.\PHYSICALDRIVE1', GENERIC_READ,
      FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
    if hDevice <> INVALID_HANDLE_VALUE then
    begin
      SetFilePointer(hDevice,512 * 0,nil,FILE_BEGIN); // replace 0 with sector that you wish to read
      ReadFile(hDevice, RawMBR[0], 512, btsIO, nil);
      CloseHandle(hDevice);
    end;
  end;
2 голосов
/ 19 октября 2011

Читайте так же, как и любой другой диск, когда делаете доступ для чтения в режиме raw.Вам просто нужен первый сектор

Для Delphi вы можете посмотреть:

http://www.torry.net/pages.php?id=253

Доступ к физическому диску (может работать для вас) Доступ к сырому диску (может работатьВы) TDiskIO (слишком старый, работает только под w9x)

2 голосов
/ 19 октября 2011

Вы пробовали RawDiskAccess компонент, источник для Delphi 7 здесь

1 голос
/ 20 октября 2011

У нас есть RawDisk продукт, который обеспечивает доступ для чтения и записи к необработанным разделам в XP, Vista и Windows 7 (при использовании Windows API существуют определенные ограничения безопасности, и RawDisk позволяет обойти эти ограничения).Код доступен для всех версий Delphi от Delphi 5 до Delphi XE (поддержка XE2 будет добавлена ​​через пару дней).

...