|
|
| Посл.отвђт | Сообщен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 |