Скриншот в ядре

Тема в разделе "WASM.NT.KERNEL", создана пользователем ECk, 13 дек 2007.

  1. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Доброго времени суток всем!
    Может сталкивался кто нибудь с сабжем, как реализовать можно?
    Первое что на ум приходит - использовать ядерные обработчики GDI функций напрямую, также возможно через DxApi (но каким образом хендл создать? мсдн говорит "usermode handle")
    В общем, любые идеи приветствуются :)
     
  2. irusrubin

    irusrubin New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2010
    Сообщения:
    16
    Здравствуйте! У кого-нибудь на этот счёт мысли может появились?
     
  3. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    irusrubin
    да, они были, ищи по форуму.
    Намекну, что они были связаны с Гритом и его отладчиком. Он тут выкладывал инфу как получить доступ к экрану. Потом была тема, где кто-то пытался повторить успех, но там, наверно, фейл... ;(

    Удачи!
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Найти поверхность дисплея (SURFOBJ) и снять с нее изображение, кажется, через EngCopyBits.
    В отладчике у меня есть, сорцы в инете есть. А так я уже плохо помню
     
  5. irusrubin

    irusrubin New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2010
    Сообщения:
    16
    Great
    Ещё давно смотрел твой отладчик. Некоторые вещи очень неплохо написаны. Здорово, что ты его выложил. Про EngCopyBits знаю(от тебя же;) ), хотелось бы ещё про какие-нибудь способы узнать(просто по определённым причинам этот способ с копированием с поверхности в моей задаче не катит).
    И ещё может не в тему, но тебя раньше(если я ничего не путаю) интересовал вопрос о выходе после InbvAcquireDisplayOwnership и т.д. Как-нибудь это решилось?
     
  6. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Z3N
    Это я пытался. Но я пытался взять скриншот с Direct3D оверлеем на Windows 7. Метод Great'а тут бессилен оказался. Да и метод этот на последних видюхах (те что сейчаз продают) выдаёт некорректные скрины.
    Так что в топку этот метод.
     
  7. irusrubin

    irusrubin New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2010
    Сообщения:
    16
    T800
    Можете назвать видюхи(желательно что-нибудь не супер топовое), на которых вы тестировали и данный метод не работал?
     
  8. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    irusrubin
    Сейчаз вспоминается только ATI HD 4850 ....
     
  9. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    T800
    Блин, а я думал заняться этим... мне тоже надо было... крушение надежд....
    Но принтскрин работает же...? Интересно как? Судя по подвисанию в момент скриншота оно там что-то блочит на время снятия скрина... интересно - как работает? А в сырцах винды этого нет? Просто, мне прокси не позволяет качать торренты, а на фекалообменниках сырцов нет... блин....

    Взглянул бы на исходники просто ради интереса - стиль кода и т.д.. Х)

    Может кто выложит на какой-нибудь ifolder, по частям метров по 100, лучше с паролем , анонимность гарантирую, название файла желательно левое (ну, по крайней мере не "мега-порно", а то фильтр стработает), ссылку в личку, плиз....
     
  10. irusrubin

    irusrubin New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2010
    Сообщения:
    16
    T800
    А не определили почему метод не работает? На GeForce 9600 GT ещё работал.
     
  11. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    irusrubin
    Да у меня самого GF одни (работает всё).
    Кстати, есть не только проблема с полученным скрином, но и проблема его получения. ТОже столкнулся на ATIшной карте. Какойто параметр там не получается. Уже забыл какой именно, а история общения с Great'ом в jabber'e не сохранилась у меня.
     
  12. irusrubin

    irusrubin New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2010
    Сообщения:
    16
    Меня ATI никогда и не интересовали...
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    нэт)
    тока я не понял - интересуют способы грабить изображение или же рисовать своё?
     
  14. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Great
    Видимо, кому-что... ему грабить, меня и то и другое интересует ;)
     
  15. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    вот теперь очень интересны видеозахват и антискрин) кстати по снятию видеоряда - ведь ж не кадрами? есть какиенить линки?
     
  16. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Ага, блин, работает.... Посмотрел исходники реактос, там копируют при помощи битблт (БЛДЖАД!)
    В исходниках винды ничего нет... судя по поверхностному поиску.

    T800
    Как выглядят? Полоски? Думаю, что просто надо лочить поверхность на время копирования.
     
  17. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Z3N
    Просто BMP состоит из 2 или 4 или 8 отдельных частей (неправильно совмещённые прямоугольники).
    Если остались у меня, то выложу.
     
  18. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    T800
    А это только в ДИКС или вообще всегда?
     
  19. JivotnoE

    JivotnoE New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2009
    Сообщения:
    10
    В линейках до Vista, метод Great работает стабильно(EngCopyBits), да и на некоторых Vista со старыми карточками. Все дело в том что в нем существует главный Surface и на него копируются все остальные.
    На новых используется новая модель. В которой каждое приложение имеет собственный буфер. И итоговое изображение появляется наложением окон с флагом visible. Так например рабочий стол это отдельная поверхность, обоина уже другая.
    Еще один немаловажный факт, память для окон используется в основном из usermode.
    Если запусить на обоих платформах USERMODe скриншот то работать он будет стабильно на всех машинах. Тут родился POC.
    Я дергал ядерные аналоги функций
    CreateCompatibleDC
    CreateCompatibleBitmap
    SelectObject
    BitBlt
    скриншоты получал, но стабильности так добиться не смог.

    Данный способ не будет работать если окно рисуется DirectX и OpenGl.