Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Кто работал с жестким диском?????
Посл.ответ Сообщение

Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 14 сентября 2007 12:32
· Личное сообщение · #1

у меня такая проблема!!
открываю жесткий диск через CreateFile
Потом читаю его ! вываливаеться выдает ошибку что я и ГДЕ НАКОСячил ! гляньте может ктото с таким работал!
*hDevice = CreateFile(TEXT("\\.\C:"), // drive
0,
FILE_SHARE_READ |
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if (*hDevice==INVALID_HANDLE_VALUE)
{
return(FALSE);
}
DWORD inBuffer,nBytesRead;


BOOL bResult = ReadFile(*hDevice,
&inBuffer,
4,
&nBytesRead,
NULL) ;

CreateFile выполняеться успешно возвращаеться хендел все нормально! а вот при чьтении вываливаеться!



Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 14 сентября 2007 14:34 · Поправил: pushick
· Личное сообщение · #2

Ну и русский у вас товарищ.

hFile = CreateFile(TEXT("file/disk/device name here to open"), // file to open
GENERIC_READ, // open for reading
FILE_SHARE_READ | FILE_SHARE_WRITE, // share for reading
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template

bResult = ReadFile(hFile,
&inBuffer,
nBytesToRead,
&nBytesRead,
NULL) ;



-----
Security through obscurity is just an illusion




Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 17 сентября 2007 16:37
· Личное сообщение · #3

pushick пишет:
Ну и русский у вас товарищ.

hFile = CreateFile(TEXT("file/disk/device name here to open"), // file to open
GENERIC_READ, // open for reading
FILE_SHARE_READ | FILE_SHARE_WRITE, // share for reading
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template

bResult = ReadFile(hFile,
&inBuffer,
nBytesToRead,
&nBytesRead,
NULL) ;

ты мне переписал копию мсднки!!! и нечего не добавил и не указал ошибки!
а оказываеться весь прикол был тока в том что GENERIC_READ вторым параметром надо в ноль поставить и можно читать инфу с жесткого диска!! но все равно спасибо!



Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 19 сентября 2007 14:52 · Поправил: pushick
· Личное сообщение · #4

super_man86

GENERIC_READ вторым параметром надо в ноль поставить

Как раз наоборот. В твоем примере он и так в нуле стоял.

-----
Security through obscurity is just an illusion




Ранг: 52.2 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 19 сентября 2007 20:01 · Поправил: Vitek
· Личное сообщение · #5

super_man86 пишет:
а оказываеться весь прикол был тока в том что GENERIC_READ вторым параметром надо в ноль поставить и можно читать инфу с жесткого диска!!


Насколько я понимаю нолик вместа GENERIC_READ значит no access и следовательно функция ReadFile не должна работать... или я чет не догоняю ?



Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 20 сентября 2007 01:48
· Личное сообщение · #6

Топик стартер запутался сам.

-----
Security through obscurity is just an illusion




Ранг: 49.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 20 сентября 2007 10:14 · Поправил: ViSoR
· Личное сообщение · #7

Vitek, именно так. Флаг GENERIC_READ там обязательно должен присутствовать.




Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 20 сентября 2007 11:31
· Личное сообщение · #8

ViSoR пишет:
Флаг GENERIC_READ там обязательно должен присутствовать.

+1. Без этого никак не может читаться. Есть такой трабл. Когда читаешь с основного тома, то не читается. Не открывается устройство, так и не разобрался почему...
Вы не забывайте, что надо читать блоками, размер которых кратен размеру сектора.

Мсдн глаголит:
File access must be for numbers of bytes that are integer multiples of the volume's sector size. For example, if the sector size is 512 bytes, an application can request reads and writes of 512, 1024, or 2048 bytes, but not of 335, 981, or 7171 bytes.

-----
Уважайте других и пишите грамотно.




Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 20 сентября 2007 13:52
· Личное сообщение · #9

Executioner пишет:
Когда читаешь с основного тома, то не читается. Не открывается устройство, так и не разобрался почему...


А как ты его открываешь?

-----
Security through obscurity is just an illusion




Ранг: 52.2 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 21 сентября 2007 17:59 · Поправил: Vitek
· Личное сообщение · #10

Executioner пишет:
Не открывается устройство, так и не разобрался почему...


Если "не открывается устройство" в смысле не возвращается хендл, то это делается так:
hDevice = CreateFile("\\\\.\\C:",0, ...);
Двойной слеш однако надо.

А читать можно через DeviceIoControl.



Ранг: 49.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 21 сентября 2007 19:06
· Личное сообщение · #11

Сегодня понадобилось дампить хард. Использовал следующий код:
HANDLE drive = ::CreateFile(
L"\\?\E:",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);

Двойные слэши (С++ не Delphi) и "?" в пути.
Чтение стандартное:
ReadFile(drive, buffer, bufferSize, &bytesReaded, NULL);




Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 29 сентября 2007 14:21
· Личное сообщение · #12

Vitek пишет:
Двойной слеш однако надо

Ты прям открытие сделал =) Я знаю, что двойной =) Все равно хэндл не возвращает, как бы я ни старался. Но после переустановки винды все встало на свои места.

-----
Уважайте других и пишите грамотно.




Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 29 сентября 2007 15:40
· Личное сообщение · #13

Норкоманы.

-----
Security through obscurity is just an illusion



 eXeL@B —› Программирование —› Кто работал с жестким диском?????
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати