Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прямой доступ к диску 
:(
    Опции темы
Soldat
  Дата 20.1.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Пишу пародию на Nero.
Как получить доступ к дискете на запись и чтение посекторно из приложения Win32(Delphi7)?
PM MAIL WWW   Вверх
NiJazz
Дата 20.1.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



ReadFile и WriteFile
PM MAIL   Вверх
Soldat
Дата 21.1.2005, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Мне необходимо считывать не только файлы, а также загрузочный сектор, таблицы FAT и т.д.
PM MAIL WWW   Вверх
Dark Wanderer
Дата 21.1.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 25.10.2004
Где: Кишинёв

Репутация: нет
Всего: нет



Раньше занимался этим. В XP, делал так:
Код


var hDevice:Thandle;
     b:array [0..512] of char;
hDevice:=CreateFile('\\.\\a:', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,
     nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_DELETE_ON_CLOSE, 0);   {Открываем Устройство "a:"}

if hDevice<>INVALID_HANDLE_VALUE then
begin
SetFilePointer(hDevice,512,nil,FILE_BEGIN);  {Устанавливаем позицию на 1-й сектор диска}
ReadFile(hdevice, B, 512, cb, POverlapped(0)); {Читаем 1-й сектор}



Использовал вот этот модуль:

Код

unit IOCTL;
//CONVERTED FROM IOCTL.INC (VISUAL DEVSTUDIO 5) - I'm a plagiat afterall
//not required - just a collection of numbers (so did with WINDOWS.PAS;))
//this version not including a structure/record that might be needed

//any comments just send to me: aa, [email protected]

interface
const
//DeviceType
 File_Device_BEEP                = $00000001;
 File_Device_CD_ROM              = $00000002;
 File_Device_CD_ROM_File_System  = $00000003;
 File_Device_CONTROLLER          = $00000004;
 File_Device_DataLINK            = $00000005;
 File_Device_DFS                 = $00000006;
 File_Device_Disk                = $00000007;
 File_Device_Disk_File_System    = $00000008;
 File_Device_File_System         = $00000009;
 File_Device_INPORT_PORT         = $0000000A;
 File_Device_KEYBOARD            = $0000000B;
 File_Device_MAILSLOT            = $0000000C;
 File_Device_MIDI_IN             = $0000000D;
 File_Device_MIDI_OUT            = $0000000E;
 File_Device_MOUSE               = $0000000F;
 File_Device_MULTI_UNC_PROVIDER  = $00000010;
 File_Device_NAMED_PIPE          = $00000011;
 File_Device_NETWORK             = $00000012;
 File_Device_NETWORK_BROWSER     = $00000013;
 File_Device_NETWORK_File_System = $00000014;
 File_Device_NULL                = $00000015;
 File_Device_PARALLEL_PORT       = $00000016;
 File_Device_PHYSICAL_NETCARD    = $00000017;
 File_Device_PRINTER             = $00000018;
 File_Device_SCANNER             = $00000019;
 File_Device_SERIAL_MOUSE_PORT   = $0000001A;
 File_Device_SERIAL_PORT         = $0000001B;
 File_Device_SCREEN              = $0000001C;
 File_Device_SOUND               = $0000001D;
 File_Device_STREAMS             = $0000001E;
 File_Device_TAPE                = $0000001F;
 File_Device_TAPE_File_System    = $00000020;
 File_Device_TRANSPORT           = $00000021;
 File_Device_UNKNOWN             = $00000022;
 File_Device_VIDEO               = $00000023;
 File_Device_VIRTUAL_Disk        = $00000024;
 File_Device_WAVE_IN             = $00000025;
 File_Device_WAVE_OUT            = $00000026;
 File_Device_8042_PORT           = $00000027;
 File_Device_NETWORK_REDIRECTOR  = $00000028;
 File_Device_BATTERY             = $00000029;
 File_Device_BUS_EXTENDER        = $0000002A;
 File_Device_MODEM               = $0000002B;
 File_Device_VDM                 = $0000002C;
 File_Device_Mass_Storage        = $0000002D;

//Method
 Method_Buffered                 = 0;
 Method_IN_Direct                = 1;
 Method_OUT_Direct               = 2;
 Method_Neither                  = 3;

//Access
 File_Any_Access                 = 0;
 File_Read_Access                = ($0001);    // file & pipe
 File_Write_Access               = ($0002);    // file & pipe
//FSCTL Access
 File_Read_Data                  = File_Read_Access;
 File_Write_Data                 = File_Write_Access;

//Storage
 IOCTL_Storage_Base              = File_Device_MASS_Storage;// $002D
 IOCTL_Disk_Base                 = File_Device_Disk;        // $0007

//Partition
 Partition_ENTRY_UNUSED          = $00;      // Entry unused
 Partition_FAT_12                = $01;      // 12-bit FAT entries
 Partition_XENIX_1               = $02;      // Xenix
 Partition_XENIX_2               = $03;      // Xenix
 Partition_FAT_16                = $04;      // 16-bit FAT entries
 Partition_EXTENDED              = $05;      // Extended Partition entry
 Partition_HUGE                  = $06;      // Huge Partition MS-DOS V4
 Partition_IFS                   = $07;      // IFS Partition
 Partition_FAT32                 = $0B;      // FAT32
 Partition_FAT32_XINT13          = $0C;      // FAT32 using extended int13 services
 Partition_XINT13                = $0E;      // Win95 Partition using extended int13 services
 Partition_XINT13_EXTENDED       = $0F;      // Same as type 5 but uses extended int13 services
 Partition_PREP                  = $41;      // PowerPC Reference Platform (PReP) Boot Partition
 Partition_UNIX                  = $63;      // Unix

 VALID_NTFT                      = $C0;      // NTFT uses high order bits

//IOCTL/FSCTL/SMART Code  
 IOCTL_Storage_Check_Verify      : integer = 0;
 IOCTL_Storage_Media_REMOVAL     : integer = 0;
 IOCTL_Storage_Eject_Media       : integer = 0;
 IOCTL_Storage_Load_Media        : integer = 0;
 IOCTL_Storage_RESERVE           : integer = 0;
 IOCTL_Storage_RELEASE           : integer = 0;
 IOCTL_Storage_Find_New_Devices  : integer = 0;
 IOCTL_Storage_Get_Media_Types   : integer = 0;

 IOCTL_Disk_Get_Drive_Geometry   : integer = 0;
 IOCTL_Disk_Get_Partition_Info   : integer = 0;
 IOCTL_Disk_Set_Partition_Info   : integer = 0;
 IOCTL_Disk_Get_Drive_Layout     : integer = 0;
 IOCTL_Disk_Set_Drive_Layout     : integer = 0;
 IOCTL_Disk_Verify               : integer = 0;
 IOCTL_Disk_Format_Tracks        : integer = 0;
 IOCTL_Disk_Reassign_Blocks      : integer = 0;
 IOCTL_Disk_Performance          : integer = 0;
 IOCTL_Disk_is_Writable          : integer = 0;
 IOCTL_Disk_Logging              : integer = 0;
 IOCTL_Disk_Format_Tracks_EX     : integer = 0;
 IOCTL_Disk_Histogram_Structure  : integer = 0;
 IOCTL_Disk_Histogram_Data       : integer = 0;
 IOCTL_Disk_Histogram_Reset      : integer = 0;
 IOCTL_Disk_Request_Structure    : integer = 0;
 IOCTL_Disk_Request_Data         : integer = 0;
 
 FSCTL_Lock_Volume               : integer = 0;
 FSCTL_Unlock_Volume             : integer = 0;
 FSCTL_Dismount_Volume           : integer = 0;
 FSCTL_Mount_DBLS_Volume         : integer = 0;
 FSCTL_Get_Compression           : integer = 0;
 FSCTL_Set_Compression           : integer = 0;
 FSCTL_Read_Compression          : integer = 0;
 FSCTL_Write_Compression         : integer = 0;

 SMART_Get_Version               : integer = 0;
 SMART_SEND_Drive_Command        : integer = 0;
 SMART_RCV_Drive_Data            : integer = 0;

 procedure Init;

implementation

 function Ctl_Code(DeviceType, FuncNo, Method, Access: integer): integer; begin
   Result:= (DeviceType shl 16) or (Access shl 14) or (FuncNo shl 2) or (Method)
 end;

 procedure Init; begin
   IOCTL_Storage_Check_Verify := Ctl_Code(IOCTL_Storage_Base, $0200, Method_Buffered, File_Read_Access);
   IOCTL_Storage_Media_REMOVAL := Ctl_Code(IOCTL_Storage_Base, $0201, Method_Buffered, File_Read_Access);
   IOCTL_Storage_Eject_Media := Ctl_Code(IOCTL_Storage_Base, $0202, Method_Buffered, File_Read_Access);
   IOCTL_Storage_Load_Media := Ctl_Code(IOCTL_Storage_Base, $0203, Method_Buffered, File_Read_Access);
   IOCTL_Storage_RESERVE := Ctl_Code(IOCTL_Storage_Base, $0204, Method_Buffered, File_Read_Access);
   IOCTL_Storage_RELEASE := Ctl_Code(IOCTL_Storage_Base, $0205, Method_Buffered, File_Read_Access);
   IOCTL_Storage_Find_New_Devices := Ctl_Code(IOCTL_Storage_Base, $0206, Method_Buffered, File_Read_Access);
   IOCTL_Storage_Get_Media_Types := Ctl_Code(IOCTL_Storage_Base, $0300, Method_Buffered, File_Any_Access);

   IOCTL_Disk_Get_Drive_Geometry := Ctl_Code(IOCTL_Disk_Base, $0000, Method_Buffered, File_Any_Access);
   IOCTL_Disk_Get_Partition_Info := Ctl_Code(IOCTL_Disk_Base, $0001, Method_Buffered, File_Read_Access);
   IOCTL_Disk_Set_Partition_Info := Ctl_Code(IOCTL_Disk_Base, $0002, Method_Buffered, File_Read_Access or File_Write_Access);
   IOCTL_Disk_Get_Drive_Layout := Ctl_Code(IOCTL_Disk_Base, $0003, Method_Buffered, File_Read_Access);
   IOCTL_Disk_Set_Drive_Layout := Ctl_Code(IOCTL_Disk_Base, $0004, Method_Buffered, File_Read_Access or File_Write_Access);
   IOCTL_Disk_Verify := Ctl_Code(IOCTL_Disk_Base, $0005, Method_Buffered, File_Any_Access);
   IOCTL_Disk_Format_Tracks := Ctl_Code(IOCTL_Disk_Base, $0006, Method_Buffered, File_Read_Access or File_Write_Access);
   IOCTL_Disk_Reassign_Blocks := Ctl_Code(IOCTL_Disk_Base, $0007, Method_Buffered, File_Read_Access or File_Write_Access);
   IOCTL_Disk_Performance := Ctl_Code(IOCTL_Disk_Base, $0008, Method_Buffered, File_Any_Access);
   IOCTL_Disk_is_Writable := Ctl_Code(IOCTL_Disk_Base, $0009, Method_Buffered, File_Any_Access);
   IOCTL_Disk_Logging := Ctl_Code(IOCTL_Disk_Base, $000A, Method_Buffered, File_Any_Access);
   IOCTL_Disk_Format_Tracks_EX := Ctl_Code(IOCTL_Disk_Base, $000B, Method_Buffered, File_Read_Access or File_Write_Access);
   IOCTL_Disk_Histogram_Structure := Ctl_Code(IOCTL_Disk_Base, $000C, Method_Buffered, File_Any_Access);
   IOCTL_Disk_Histogram_Data := Ctl_Code(IOCTL_Disk_Base, $000D, Method_Buffered, File_Any_Access);
   IOCTL_Disk_Histogram_Reset := Ctl_Code(IOCTL_Disk_Base, $000E, Method_Buffered, File_Any_Access);
   IOCTL_Disk_Request_Structure := Ctl_Code(IOCTL_Disk_Base, $000F, Method_Buffered, File_Any_Access);
   IOCTL_Disk_Request_Data := Ctl_Code(IOCTL_Disk_Base, $0010, Method_Buffered, File_Any_Access);

   FSCTL_Lock_Volume := Ctl_Code(File_Device_File_System, 6, Method_Buffered, File_Any_Access);
   FSCTL_Unlock_Volume := Ctl_Code(File_Device_File_System, 7, Method_Buffered, File_Any_Access);
   FSCTL_Dismount_Volume := Ctl_Code(File_Device_File_System, 8, Method_Buffered, File_Any_Access);
   FSCTL_Mount_DBLS_Volume := Ctl_Code(File_Device_File_System,13, Method_Buffered, File_Any_Access);
   FSCTL_Get_Compression := Ctl_Code(File_Device_File_System,15, Method_Buffered, File_Any_Access);
   FSCTL_Set_Compression := Ctl_Code(File_Device_File_System,16, Method_Buffered, File_Read_Data or File_Write_Data);
   FSCTL_Read_Compression := Ctl_Code(File_Device_File_System,17, Method_Neither, File_Read_Data);
   FSCTL_Write_Compression := Ctl_Code(File_Device_File_System,18, Method_Neither, File_Write_Data);

   SMART_Get_Version := CTL_CODE(IOCTL_Disk_Base, $0020, Method_Buffered, File_Read_Access);
   SMART_SEND_Drive_Command := CTL_CODE(IOCTL_Disk_Base, $0021, Method_Buffered, File_Read_Access or File_Write_Access);
   SMART_RCV_Drive_Data := CTL_CODE(IOCTL_Disk_Base, $0022, Method_Buffered, File_Read_Access or File_Write_Access);
 end;

initialization
 Init;

END.



Это сообщение отредактировал(а) Dark Wanderer - 21.1.2005, 16:50
--------------------
  
PM MAIL   Вверх
Soldat
Дата 24.1.2005, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Благодарю за совет!!!
PM MAIL WWW   Вверх
Cetus
Дата 24.1.2005, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



Dark Wanderer
если не секрет зачем 513 байт? :
"b:array [0..512] of char;"
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
Dark Wanderer
Дата 24.1.2005, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 25.10.2004
Где: Кишинёв

Репутация: нет
Всего: нет



Да спешил с ответом вот и ошибся наверное.
--------------------
  
PM MAIL   Вверх
Cetus
Дата 25.1.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



я понял, это КК по нечетности smile)

М
 
Cetus, не флейми!



Это сообщение отредактировал(а) p0s0l - 25.1.2005, 13:05
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
Monty
Дата 13.2.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

Репутация: нет
Всего: 27



У меня все с этим впорядке, да вот размер моего 160Гб диска выдает не правильно smile .... вместо 160Гб выдает 16Гб ... мне это надо еще на 10 умножать??! smile smile


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Guest
Дата 21.2.2005, 12:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Для ATAPI устройств такой способ не канает
рекомендую сходить на t10.org скачать оттуда SCSI MMC доку и обрать свой взор в сторону команды Device IOControl
или в сторону драйвера WNASPI32.sys
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.