· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Прямой доступ к диску

Посл.отвђт Сообщенiе


Дата: Апр 6, 2004 16:49:09

Здравствуйте,
У меня такой вопрос: возможно ли в w2k/XP читать посекторно разделы жестких дисков и если да, то как? (Извините, если нечто подобное уже обсуждалось, но поиск нечего не дал).
ЗЫ Я имею ввиду без использования драйвера.


Дата: Апр 6, 2004 17:58:16

см. CreateFile("\\\\.\\C:", ...) для логических дисков
CreateFile("\\.\PHYSICALDRIVE0", ...) для физических.


Дата: Апр 6, 2004 18:43:04 · Поправил: Loed

я так и делаю:
cname db "\\.\C:", 0
read dd 0
hFile dd 0
;------
invoke CreateFile, ADDR cname, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
mov hFile, eax
invoke SetFilePointer, eax, 0, 0, FILE_BEGIN
invoke ReadFile, hFile, ADDR buffer, 512, ADDR read, NULL


А ReadFile возвращает ошибку (ERROR_INVALID_PARAMETER (00000057)). Тоже самое без SetFilePointerю Не моу понять в чем причина.


Дата: Апр 6, 2004 18:46:35


Дата: Апр 6, 2004 20:02:07

Спасибо volodya.
Вроде теперь заработало, ноя не могу понять какая разница между буфером в .data и выделенным при помощи VirtualAlloc. Причем если пеоедать адрес некратный 512, но внутри выделенного пространства, то все работает, а значит, выравнивание тут не причем...


Дата: Апр 6, 2004 20:12:04

между буфером в .data и выделенным при помощи VirtualAlloc

Тогда разбирайся с тем, что такое выделенная и статическая память, атрибуты страницы и вообще философия выделения памяти. Есть хорошая книжка по теме:

Memory Management: Algorithms and Implementation in C/C++
by Bill Blunden


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.298