Как отловить остановку двигателя HDD?

Тема в разделе "WASM.WIN32", создана пользователем HCode, 26 июл 2007.

  1. HCode

    HCode New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2006
    Сообщения:
    72
    Существует ли какое-нибудь событие по subj?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    хм. drX + отлов обращений к порту.
     
  3. HCode

    HCode New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2006
    Сообщения:
    72
    Уж тогда проще ослеживать не порт, а IRP'ы.
    Нужно отлавливать из UserMode.
     
  4. Agent666

    Agent666 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    98
    Делаем cli, очистка drx, перенаправления обработчика int1 на себя. Как теперь отлавливать будешь?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Agent666
    есть _конструктивные_ предложения?
     
  6. HCode

    HCode New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2006
    Сообщения:
    72
    Что за - drx, драйвер?
     
  7. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Agent666

    Ха, а если запретить обращение к регистрам отладки, то первая же твоя "очистка" dr будет в старом обработчике.
    Второй момент Vista контролирует целостность IDT и просто так не даст перехватить int1

    Третий мометнт
    1) dr содержит адрес где хранится int1 (т.е. внутри таблицы IDT)
    2) запрещено обращение к отладочным регистрам

    Тгда если попробовать обратится к dr процессор зависнет, или обратится к адресу где int1 то процессор тоже зависнет вот и все
    Делаем cli, очистка drx, перенаправления обработчика int1 на себя. Как теперь отлавливать будешь?
    идут в одно место (но выход есть).
     
  8. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    n0name

    По поводу конструктивных предложений - не знаю как на IDE, а на SCSI встретил такую фишку помоему у IBM (давно было) есть комманда запрещающаяя реагировать винт на все обращения по управлению питанием, но это частный случай. Я бы всеж таки использовал SoftICE ест-но под виртуалкой и ставил бряк на порт комманд, если al= .. не помню уже какой код.
     
  9. Agent666

    Agent666 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    98
    Ну так я сначала поставлю обработчик, а потом и буду очищать.

    Да это тоже параллельно. Делаю cli, потом lidt и пусть она хоть до посинения проверяет, неколышит.

    Запрещено - разрешим. А idt загрузим вобще свою.


    Если процессор поддерживает виртуализацию, то вырубаем ее поддержку.
     
  10. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Agent666

    Да это тоже параллельно. Делаю cli, потом lidt и пусть она хоть до посинения проверяет, неколышит.
    Она проверяет и регистр IDT. Интересно а разве cli сможет противостоять межпроцессорному прерыванию. Кстати я попался на эту удочку с переходом на Core 2 Duo
    PS: если процессор в виртуальном режиме - то виртуализацию невозможно отлючить в гостевой системе
     
  11. Agent666

    Agent666 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    98
    Как же она проверит, если для проверки надо чтобы проверящий код мог получить управление в момент работы с подмененной IDT?


    Проверки все идут из DPC (которые исполняются внутри прерывания таймера), а не из NMI. Да и NMI при переходе на свою IDT можно легко переопределить.

    Если код исполняется на виртуальной машине, то тут вобще может и не быть никакого hdd. Остается только накрыться простыней и медленно ползти на кладбище.
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    debug registers
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Agent666
    PROFi

    что спорить, и так ясно что снять слежение, построенное на drX-регистрах достаточно просто.
    Правда есть вариант редактировать таблицу страниц так, чтобы при обращении к IDT генерировалось исключение. И обрабатывать его в своём обработчике.
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Топик запощен в WIN32, отсюда можно сказать, что средствами ринг3 - никак
     
  15. HCode

    HCode New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2006
    Сообщения:
    72
    Ну почему же никак, есть - GetDevicePowerState. Но нужно не опрашивать, а отлавливать событие.
     
  16. HCode

    HCode New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2006
    Сообщения:
    72
    Неужеле придется тупо вызывать эту функцию приводя к ненужной загрузке CPU?
     
  17. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Мона через каждые Sleep(100) вызывать, тада загрузки ненужной не будет
     
  18. HCode

    HCode New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2006
    Сообщения:
    72
    Чем хуже таймер?
     
  19. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    А можно поподробнее? На первый взгляд это самый верный способ отправить проц в даун из-за triple fault.
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    triple fault? я только double встречал.
    а в чем проблема-то? встречал несколько сорцев где заменялся стандартный обработчик.