Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не читаються сектора системного диска (CreateFile "\\.\C:"...)

5.1K
02 января 2008 года
12345678
93 / / 16.12.2006
Добрый вечер, есть проблема: надо читать сектора системного диска. Открываю диск:
 
Код:
invoke CreateFile, '\\.\C:', GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0
mov [hDriver],eax

возвращаеться хендл (не -1). Читаю с него сектор:
 
Код:
invoke ReadFile, [hDriver], Buff, 512, Bytes, NULL

после операции Bytes=0 и в буфере естесно пусто. Потом ставлю вместо \\.\C: \\.\A: (дискетку) В результате читаються все 512 байт. В чем тут дело?
5.3K
02 января 2008 года
Somebody
185 / / 24.12.2006
Читать вроде можно только целые сектора... 512 байт не маловато ли для винчестера?
261
03 января 2008 года
ahilles
1.5K / / 03.11.2005
попробуй так
 
Код:
invoke CreateFile, '\\.\C:', GENERIC_READ, FILE_SHARE_READ+FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0
5.1K
05 января 2008 года
12345678
93 / / 16.12.2006
Цитата: ahilles
попробуй так
 
Код:
invoke CreateFile, '\\.\C:', GENERIC_READ, FILE_SHARE_READ+FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0



Не катит и так.

5.3K
05 января 2008 года
Somebody
185 / / 24.12.2006
FILE_SHARE_WRITE должен быть обязательно. FILE_SHARE_READ тоже не помешает.
Кроме того что читать можно с адреса, кратного размеру сектора, ещё нужно, чтобы адрес буфера в памяти был кратен размеру сектора. Буфер выровнен в памяти?
Цитата:
Volume handles can be opened as noncached at the discretion of the file system, even when the noncached option is not specified in CreateFile. You should assume that all Microsoft file systems open volume handles as noncached. The restrictions on noncached I/O for files also apply to volumes.


Цитата:

...
Buffer addresses for read and write operations should be sector aligned, which means aligned on addresses in memory that are integer multiples of the volume sector size. Depending on the disk, this requirement may not be enforced.

5.1K
06 января 2008 года
12345678
93 / / 16.12.2006
Цитата: Somebody
FILE_SHARE_WRITE должен быть обязательно. FILE_SHARE_READ тоже не помешает.
Кроме того что читать можно с адреса, кратного размеру сектора, ещё нужно, чтобы адрес буфера в памяти был кратен размеру сектора. Буфер выровнен в памяти?



Незнаю, у меня с дискетки сектора читаються нормально, а с жестких дисков нет, хотя размеры секторов там и там одинаковые - 512 байт. Ставил я и FILE_SHARE_WRITE и FILE_SHARE_READ и че я только не делал. Ну а буфер у меня в памяти в отфонарном месте и отфонарного размера (10000h), и если с дискетки я все читал ОК а с винта прочитать не могу, то явно тут не в адресах и размерах дело.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог