Здравствуйте. Стоит такая задача: отобразить порты клавиатуры (0x60 и 0x64) в память. Как это можно сделать? В DDK нашёл функцию 'MmMapIoSpace'. Она именно для этого предназначена или нет? ps. Читать/писать в порт я не могу (такие условия). Стоит требование - сторонняя программа читает/записывает ячейки памяти, а на самом деле это всё идёт в порт.
vasalvit MMIO-Memary Map Input Output. Порты уже отоброженные в память. Обычно этим занимаются устройства. MmMapIoSpace- отоброжает MMIO из физических адрессов памяти в линеный. Насчет портов 60h 64h, то непредставляю как их можно отобразить в память. Зато можно перехватить обращение к памяти и перенаправить в порт. Может читать\писать в порт не может сторонняя программа, а ты можешь? Вроде где-то пробегала инфа, что все адрестное пространство портов ввода вывода можно отобразить в адрестное пространство физической памяти.
Вот это меня и интересует. Порты клавы - это пока. Завтра заказчик может захотеть ещё что-нибудь Не подскажешь как добраться до этого отображения/как отобразить? Есть дока по AMD64. Там упоминаются Memory-Mapped I/O Address Map Registers. Сижу, читаю Но хотелось бы узнать можно ли это сделать более платформенно-независимо.
Так пиши драйвер. Который будет перехватывать исключение по доступу к несуществующей странице. Резервируется диапозон памяти, но страницы не выделяются. Когда происходит исключение вместо того что-бы создовать страницы. Ты просто аналезируешь команду и делаешь соответсвуеще обращение к портам в\в.
К сожалению этот вариант не годится Он не устраивает заказчика. Ему нужно, чтобы мой драйвер запустился, всё настроил, и выгрузился.
Лично мне кажется, что это невозможно. Порты PS/2 относятся к унаследованному (legacy) оборудованию и не подчиняются стандартам Plug&Play и т.д., которые позволяют отображать регистры хоть на пространство ввода-вывода, хоть на пространство памяти. Эти порты жёстко закреплены, и никуда не перемещаются.
В принципе да. Но есть один нюанс. Клава PS/2 обслуживается контроллёров Super I/O. Вот цитата с википедии: На данный момент я пытаюсь отобразить настроить LPC так, чтобы использовалась память а не порты. Пока не очень
SII Насколько я знаю под PnP поаодают все устройства которые хоть как-то идентифицируются. Даже если оно устаревшее(legacy) . Но с тем что их нельзя перенастроить это спорное утверждение. Super IO поразному реализует функции pnp. Часть legacy устройств можно перенастроить. Но к таким не относясится клавиатура. vasalvit Судя по всему тогда никак.
Коберниченко А.В. полагает, что вся память и порты (для совместимости с RISC MIPS) и так отображены в секцию \Device\PhysicalMemory. Получить полный доступ можно с помощью драйвера: Там же сказано, что читать секцию \Device\PhysicalMemory можно и из ring3.
Pavia Это да, но не каждое старое устройство поддерживает PnP. У контроллера PS/2, например, такой нужды попросту нет: он занимает хорошо известные фиксированные порты, и всё.