Чтение дискеты в ring0

Тема в разделе "WASM.WIN32", создана пользователем AB_Celitel, 7 сен 2005.

  1. AB_Celitel

    AB_Celitel New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2005
    Сообщения:
    72
    Адрес:
    Россия, г.Иваново
    Приветствую всех !

    Пишу прогу по ограничению доступа через дискеты на комп.

    Смысл в том, что своя дискета метится в свободных секторах,

    и при попытке винды прочитать её проверяется нличие этой метки

    и если её нет, то доступ к дисководу блокируется.

    Для чтения метки(а вдальнейшем и установки её) написал такой код(основная часть):

    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.

    Подскажите кто сможет ,пожалуйста, в чем проблема.

    Заранее спасибо.
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Естественно при запуске из DOS программы. При этом NTVDM эмулирует наличие DOS прерываний.





    Проблема в том, что Windows это не DOS, и никаким int 13h нельзя прочитать сектора дискеты. На самом деле в pmode int 13h ни что иное, как SIMD Floating-Point Exception, тобишь обработчик исключения. Естественно его вызов приводит к бсоду.



    Я вижу, некоторые на этом форуме упорно и настойчиво пытаються переносить приемы программирования из DOS в винду. Пытаються все делать через порты, вызывать DOS прерывания и.т.д. Это очень плохая практика, лучше забудь вообще этот DOS.



    А для чтения дискеты ты можешь воспользоваться драйверами дисковода, которые создают девайс \Device\Floppy0 (для первого дисковода) который еще доступен по символической ссылке \??\a:

    Открывай его с помощью ZwCreateFile, а затем читай и пиши что угодно с помощью ZwReadFile/ZwWriteFile
     
  3. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    поиск рулит





     
  4. AB_Celitel

    AB_Celitel New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2005
    Сообщения:
    72
    Адрес:
    Россия, г.Иваново
    Огромное спасибо Ms Rem, всё работает.

    И yureckor тоже за ссылки, почитал.
     
  5. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    бред какойто .
     
  6. AB_Celitel

    AB_Celitel New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2005
    Сообщения:
    72
    Адрес:
    Россия, г.Иваново
    А почему бред ?