Отображение портов клавиатуры в память

Тема в разделе "WASM.NT.KERNEL", создана пользователем vasalvit, 3 фев 2009.

  1. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Здравствуйте.

    Стоит такая задача: отобразить порты клавиатуры (0x60 и 0x64) в память. Как это можно сделать? В DDK нашёл функцию 'MmMapIoSpace'. Она именно для этого предназначена или нет?

    ps. Читать/писать в порт я не могу (такие условия). Стоит требование - сторонняя программа читает/записывает ячейки памяти, а на самом деле это всё идёт в порт.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    vasalvit
    MMIO-Memary Map Input Output. Порты уже отоброженные в память. Обычно этим занимаются устройства.

    MmMapIoSpace- отоброжает MMIO из физических адрессов памяти в линеный.

    Насчет портов 60h 64h, то непредставляю как их можно отобразить в память.
    Зато можно перехватить обращение к памяти и перенаправить в порт.

    Может читать\писать в порт не может сторонняя программа, а ты можешь?

    Вроде где-то пробегала инфа, что все адрестное пространство портов ввода вывода можно отобразить в адрестное пространство физической памяти.
     
  3. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Вот это меня и интересует. Порты клавы - это пока. Завтра заказчик может захотеть ещё что-нибудь:)
    Не подскажешь как добраться до этого отображения/как отобразить?

    Есть дока по AMD64. Там упоминаются Memory-Mapped I/O Address Map Registers. Сижу, читаю:) Но хотелось бы узнать можно ли это сделать более платформенно-независимо.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Так пиши драйвер. Который будет перехватывать исключение по доступу к несуществующей странице.
    Резервируется диапозон памяти, но страницы не выделяются. Когда происходит исключение вместо того что-бы создовать страницы. Ты просто аналезируешь команду и делаешь соответсвуеще обращение к портам в\в.
     
  5. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    К сожалению этот вариант не годится :dntknw: Он не устраивает заказчика. Ему нужно, чтобы мой драйвер запустился, всё настроил, и выгрузился.
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Лично мне кажется, что это невозможно. Порты PS/2 относятся к унаследованному (legacy) оборудованию и не подчиняются стандартам Plug&Play и т.д., которые позволяют отображать регистры хоть на пространство ввода-вывода, хоть на пространство памяти. Эти порты жёстко закреплены, и никуда не перемещаются.
     
  7. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    В принципе да. Но есть один нюанс.

    Клава PS/2 обслуживается контроллёров Super I/O. Вот цитата с википедии:

    На данный момент я пытаюсь отобразить настроить LPC так, чтобы использовалась память а не порты. Пока не очень :dntknw:
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    SII
    Насколько я знаю под PnP поаодают все устройства которые хоть как-то идентифицируются. Даже если оно устаревшее(legacy) . Но с тем что их нельзя перенастроить это спорное утверждение. Super IO поразному реализует функции pnp. Часть legacy устройств можно перенастроить. Но к таким не относясится клавиатура.

    vasalvit
    Судя по всему тогда никак.
     
  9. ConstZ

    ConstZ New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2008
    Сообщения:
    42
    Коберниченко А.В. полагает, что вся память и порты (для совместимости с RISC MIPS) и так отображены в секцию \Device\PhysicalMemory. Получить полный доступ можно с помощью драйвера:
    Там же сказано, что читать секцию \Device\PhysicalMemory можно и из ring3.
     
  10. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    В таком случае можно только дать доступ к портам из ring3, что очень плохо. Иначе это бред.
     
  11. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Можно было. До XP SP2
     
  12. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Pavia
    Это да, но не каждое старое устройство поддерживает PnP. У контроллера PS/2, например, такой нужды попросту нет: он занимает хорошо известные фиксированные порты, и всё.
     
  13. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    И I/O портов там всё равно нету.
    Есть только MMIO, но было б странно если б не было.