Возник вопрос - как можно получить доступ к регистрам устройства без написания своего драйвера? Они отображаются на адреса памяти, например E7800000h - E7800FFFh. Как можно прочитать/записать эту область памяти? Или проще написать драйвер?
syrnik Можно и без драйвера. Работай через CallGate(\device\physicalmemory). Примеров работы через него очень много.
Ну в эту сторону я и начал копать, но просто попытка mov eax, [E7800000h] вываливается с BSOD PAGE_FAULT_IN_NONPAGED_AREA вот в принципе потому вопрос и возник, что я неправильно делаю?
Извините за тормознутость, но это мои первые шаги в этом направлении. В соответствии с указанными нюансами как может выглядеть fail-safe код для чтения/записи этой памяти? Куда рыть, где можно посмотреть подобные примеры? (в примерах CallGate подобного вроде нет)
memory_mapped paged? интересно... да он просто не объявлен, этот регион хотя вот на варе видеобуфер точно подсасывается с диска, но это как бы все-таки не совсем железо to syrnik: вообще-то в ДДК все это хорошо расписано - и как объявлять регионы памяти, и как с ними работать. драйвер писАть придется-таки, иначе никак
нет точнее все что выше MmUserProbeAddress оно и так мапится во все процессы одинаково (ну почти) а вот доступа туда из юзер-моде нет - только через драйвер-посредник
http://wasm.ru/comment.php?artcode=CreateProcessKrnl там Ms Rem код привёл. Думаю поможет с этим вопросом. Хотя, если существует ядерный мап, то путём ручных манипуляций с PTE можно разрешить доступ к памяти из юзермода. Это непроблематично. В крайнем случае. Конечно без драйвера тут не обойтись. Опять же упрощая.