Перейти к содержанию

Использование указателя на устройство d3d


Рекомендуемые сообщения

Здравствуйте! В перехваченной функции HookPresent я отрисовываю спрайт. В простом приложении на d3d8 после инжекта работает отлично, но вот с игрой не работает. После инжекта в игре во время заставки в самом начале спрайт отображается, но когда ролик заканчивается картинка исчезает. Подскажите в чем дело, может устройство пересоздавать  надо? Игра C&C:Generals v1.8 
P.S.: что бы посмотреть адрес указателя на устройство надо писать так: printf("pDevice: %x\n", *(DWORD*)pDevice); ?

Ссылка на комментарий
Поделиться на другие сайты

Привет! Вполне может быть, что игра пересоздает объект d3d, когда переключается на проигрывание ролика и обратно. В этом случае у объекта создается новая VMT, так что хук, установленный до этого, будет работать неправильно. Тут нужно перехватить, если я правильно помню, Reset, а в нем уже переустанавливать хук в новое место.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, keng сказал:

переустанавливать хук в новое место.

То есть vTable функций смещается и нужно их найти заново, например, создать d3d устройство скопировать адреса нужных функций и удалить устройство?
Все таки интересно,  что бы посмотреть адрес указателя на устройство надо писать так: printf("pDevice: %x\n", *(DWORD*)pDevice); ?

 

Я пробовал не сразу vTable находить, а после, по нажатию горячей кнопки, но таблица не находится

Изменено пользователем helldrg
Ссылка на комментарий
Поделиться на другие сайты

VMT не смещается, а пересоздается. Спасибо DMA и COM - каждый раз в новом месте. Так что искать нужно заново, но штука в том, что перед тем как умереть интерфейс дернет у себя функцию Reset. Если ее перехватить - ты поймаешь момент, когда нужно будет заново искать VMT, но там много вариантов - например, можно перехватить сразу CreateDevice. Второй вопрос - по-моему, да, так. Третий - значит что-то делаешь неправильно.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.