Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Вывод на экран из драйвера
Посл.ответ Сообщение

Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 июля 2007 01:38
· Личное сообщение · #1

Последний месяц волнует тема как вывести инфу на экран из драйвера.
Вот что имею:
1) Если покопаться в PCI конфигурационной области видеокарты, то там можно найти базовый физический адрес видеопамяти, далее его мепируем и при записи в мепируемую память можно рисовать на экране. Вот все хорошо было, но появилась GeForce 8800 и теперь вместо вывода полинейно (т.е. последовательной записи в видеопамять), строка за строкой от начала frame buffer изображение выводится в виде прямоугольников разного размера и в различных учасках экрана.
2) Ладно думаю я тогда можно посмотреть как DirectDraw получает доступ к frame buffer. Выяснил что драйверу минипорта посылается IOCTL_VIDEO_SHARE_VIDEO_MEMORY (это под виртуалкой VmWare), который и возращает указатель на frame buffer. Только вот загвостка если под виртуалкой все работает на ура, то на GeForce 8800 опять "прямоугольники". При трасировке запросов к драйверу минипорта GeForce выяснилось что на него поступают запросы с IOCTL 80052000h и др., а инициатор запосов видеодрайвер nv4_disp.dll. Т.о. поскольку данные IOCTL недокументированы я зашел в тупик, как же все-таки вывести из ядра на экран (попутно запрос IOCTL_VIDEO_MAP_VIDEO_MEMORY действительно мепирует видеопамять, но только под виртуалкой, а на машине с GeForce 8800 при обращении к этой памяти возникает исключение - отсутствие страницы в памяти)

Поделитесь пожалуйста своими соображаниями как можно вывести на экран из режима ядра?




Ранг: 58.1 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 31 июля 2007 00:38
· Личное сообщение · #2

А если попробовать посмотреть как это делает винда при загрузке?? (disassemler)
Ведь когда рисуется картинка загрузки, то прямоугольников нету...



Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 31 июля 2007 07:01
· Личное сообщение · #3

По поводу GeForce wasm.ru/forum/viewtopic.php?id=21398

-----
Security through obscurity is just an illusion




Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 августа 2007 02:52
· Личное сообщение · #4

pushick
К сожалению это моя тема, только ник другой

multiarc

при загрузке Win да использует функции БИОС. Но как только драйвер получает управление (вс линейка NT), он перестает использовать БИОС (раньше использовал для смены режима, но не более) во всех современных видеокартах.




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 02 августа 2007 08:02
· Личное сообщение · #5

Vadim Sergeevich пишет:
попутно запрос IOCTL_VIDEO_MAP_VIDEO_MEMORY действительно мепирует видеопамять, но только под виртуалкой

...виртуальная машина использует вероятно какой-то свой штатный видеодрайвер(из комплекта VMWare Tools) или свою собственную видеосреду,если можно так выразиться,поэтому там в данном случае всё отображается нормально...

-----
the Power of Reversing team





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 05 августа 2007 09:32 · Поправил: Crawler
· Личное сообщение · #6

А кто мешает вызвать что-то похожее на лок из DDraw, но из режима ядра?

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 08 августа 2007 19:23
· Личное сообщение · #7

Vadim Sergeevich

Может из той же оперы, что у пользователей PCAD-4.5.
www.pcad.ru/forum/33346/
патч videoprt.sys для включения VESA (274_vesa-vid.rar, 10.3 Kb)
www.pcad.ru/forum/files/0/274_vesa-vid.rar



Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 сентября 2007 00:13
· Личное сообщение · #8

Crawler

>>А кто мешает вызвать что-то похожее на лок из DDraw, но из режима ядра?

Ответ без воды:
1. Win32k.sys - это лишь подсистема Windows наряду с такими как POSIX или OS2, и этот файл вовсе необязательно (а с ним и заодно видеодрайвер (я не имею ввиду драйвер минипорта)) будет всегда мепированна в контексте памяти процесса в котором наш драйвер из которого мы пробуем чего-то вывести.

2. Ну хорошо, пусть мы поймали момент, когда видеодрайвер в памяти, но для того чтобы получить доступ к его функциям, мы должны вместо win32k.sys загрузить его в память и получить адреса тех самых функций работы с DirectDraw поверхностью которые он предоставляет заполняя структуры при своей первоначальной загрузке, а это по определению невозможно. Или возможно.. Но тогда я первому кто предложит способ пожму руку

3. С введением защиты контента в фильмах высокой четкости на аппаратном уровне, если будет возможен доступ к frame buffer значит будет возможность скопировать изображение с экрана, т.е. сграбить такой фильм. Т.о. объясняется поведение GeForce 8800 при попытке получить доступ к frame buffer.




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 02 сентября 2007 16:38
· Личное сообщение · #9

Vadim Sergeevich пишет:
Т.о. объясняется поведение GeForce 8800 при попытке получить доступ к frame buffer

...это получается,что невозможность корректной работы ядерного отладчика связана с защитой от пиратства??Так что-ли??

-----
the Power of Reversing team




Ранг: 5.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 сентября 2007 00:47
· Личное сообщение · #10

DillerInc

Пока я вижу только такое объяснение. Только вот слово невозможность корректной работы это не совсем правильное выражение. Поскольку DirectDraw все же делает реальным получить старый frame buffer, но отладчик уже прийдется писать свой и для конкретной видеокарты, и использовать он уже будет порты ввода-вывода, а не обращения к драйверам видеокарты.


 eXeL@B —› Программирование —› Вывод на экран из драйвера
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати