Приветствую всех ! Пишу прогу по ограничению доступа через дискеты на комп. Смысл в том, что своя дискета метится в свободных секторах, и при попытке винды прочитать её проверяется нличие этой метки и если её нет, то доступ к дисководу блокируется. Для чтения метки(а вдальнейшем и установки её) написал такой код(основная часть): mov dh,0 mov dl,0 mov al,1 mov ah,2 mov cx,1 LEA BX,BUF PUSH CS POP ES INT 13H JC NO_R ; переход если ошибка чтения CMP WORD PTR BUF+36h,09764H JZ OK ; переход если прочитано успешно и метка стоит BUF db 512 dup(?) Вообще хочу оформить перехват в драйвере (под XP). При запуске этой проверки в пользовательском кольце дискета читается нормально, а когда проверка находится в перехатчике в драйвере, то вылетает BSOD. Подскажите кто сможет ,пожалуйста, в чем проблема. Заранее спасибо.
Естественно при запуске из DOS программы. При этом NTVDM эмулирует наличие DOS прерываний. Проблема в том, что Windows это не DOS, и никаким int 13h нельзя прочитать сектора дискеты. На самом деле в pmode int 13h ни что иное, как SIMD Floating-Point Exception, тобишь обработчик исключения. Естественно его вызов приводит к бсоду. Я вижу, некоторые на этом форуме упорно и настойчиво пытаються переносить приемы программирования из DOS в винду. Пытаються все делать через порты, вызывать DOS прерывания и.т.д. Это очень плохая практика, лучше забудь вообще этот DOS. А для чтения дискеты ты можешь воспользоваться драйверами дисковода, которые создают девайс \Device\Floppy0 (для первого дисковода) который еще доступен по символической ссылке \??\a: Открывай его с помощью ZwCreateFile, а затем читай и пиши что угодно с помощью ZwReadFile/ZwWriteFile