обнаружен неизвесный глюк... короче смотрите сами) отпишитесь кто знает в чем причина, в компиляторе или в винде. этот глюк меня здорово помучал, я искал ошибку в большом коде....а она оказалась в секции данных
moderhi Речь о руках или о буфере? А то буфер-то в варианте "не работает" смещён на размеры первых двух переменных, соответственно не выравнен на границу размера сектора.
moderhi Код (Text): .data buf db 512 dup (0) Начало секции данных может быть не выравнено на размер сектора. Перед вызовом АПИ сделай вот это: Код (Text): mov eax, ADDR buf mov edx, 0 mov ecx, 512 div ecx После деления остановись в отладчике и посмотри на EDX. Если там ненулевое значение -- значит буфер не выравнен. Просто используй VirtualAlloc() для получения буфера -- там выравнено как надо.
AsmGuru62 Без специальных извращений не может. Проблема в том, что в нерабочем варианте у ТС секция данных не начинается с buf.
moderhi Вот так вроде работает Код (Text): .data siz dd 0h physic db "\\.\PHYSICALDRIVE0",0 align 4 buf db 512 dup (0) hend dd 0h
Код (Text): if (fileObject->Flags & FO_NO_INTERMEDIATE_BUFFERING) { // // The file was opened without intermediate buffering enabled. // Check that the Buffer is properly aligned, and that the // length is an integral number of 512-byte blocks. // if ((deviceObject->SectorSize && (Length & (deviceObject->SectorSize - 1))) || (ULONG_PTR) Buffer & deviceObject->AlignmentRequirement) { // // Check for sector sizes that are not a power of two. // if ((deviceObject->SectorSize && Length % deviceObject->SectorSize) || (ULONG_PTR) Buffer & deviceObject->AlignmentRequirement) { ObDereferenceObject( fileObject ); return STATUS_INVALID_PARAMETER; } } Оминь.
всем спасибо! но в моем случае ничего не помогло ни VirtualAlloc ни align. у меня во всей секции данных несколько буферов по 512б . мож кто подскажет какойнибудь простой безотказный способ избегать такие глюки из секции данных? и всетаки компилятор в этом плане ипанутый на всю катушку....
Код и так хотел выложить, но когда доведу до рабочего вида. Да по сути он уже и готов только непонятки с выравниванием остались .
http://www.wasm.ru/forum/viewtopic.php?id=43576 вот кстати код в котором возникал глюк. буферки перетосовал и глюка как небыло. спасибо деду морозу!)
moderhi Спасибо за релиз. Очень интересно!, хотя и опасно ))) PS. Если честно, то сам меняю местами эти буферы или проставляю "align" где это проходит нормально. Был бы благодарен если бы кто объяснил ))