invoke CreateFile, '\\.\C:', GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0
mov [hDriver],eax
Не читаються сектора системного диска (CreateFile "\\.\C:"...)
Код:
возвращаеться хендл (не -1). Читаю с него сектор:
Код:
invoke ReadFile, [hDriver], Buff, 512, Bytes, NULL
после операции Bytes=0 и в буфере естесно пусто. Потом ставлю вместо \\.\C: \\.\A: (дискетку) В результате читаються все 512 байт. В чем тут дело?
Читать вроде можно только целые сектора... 512 байт не маловато ли для винчестера?
Код:
invoke CreateFile, '\\.\C:', GENERIC_READ, FILE_SHARE_READ+FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0
Цитата: ahilles
попробуй так
Код:
invoke CreateFile, '\\.\C:', GENERIC_READ, FILE_SHARE_READ+FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0
Не катит и так.
Кроме того что читать можно с адреса, кратного размеру сектора, ещё нужно, чтобы адрес буфера в памяти был кратен размеру сектора. Буфер выровнен в памяти?
Цитата:
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.
Цитата: Somebody
FILE_SHARE_WRITE должен быть обязательно. FILE_SHARE_READ тоже не помешает.
Кроме того что читать можно с адреса, кратного размеру сектора, ещё нужно, чтобы адрес буфера в памяти был кратен размеру сектора. Буфер выровнен в памяти?
Кроме того что читать можно с адреса, кратного размеру сектора, ещё нужно, чтобы адрес буфера в памяти был кратен размеру сектора. Буфер выровнен в памяти?
Незнаю, у меня с дискетки сектора читаються нормально, а с жестких дисков нет, хотя размеры секторов там и там одинаковые - 512 байт. Ставил я и FILE_SHARE_WRITE и FILE_SHARE_READ и че я только не делал. Ну а буфер у меня в памяти в отфонарном месте и отфонарного размера (10000h), и если с дискетки я все читал ОК а с винта прочитать не могу, то явно тут не в адресах и размерах дело.