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

Как проверить является ли полученный объект D3DDevice?


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

Собственно сабж.

Вот код на пример:


bool APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
LPDIRECT3DDEVICE9 pDevice;
pDevice = (PDIRECT3DDEVICE9) *(int*) 0x21BEC28;
If (pDevice is D3DDevice) // Типа вот так
}
}

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

/*---------------------------------------------------------------------------*/

Привет!

Исходя из [документации], функция CreateDevice должна вернуть D3D_OK в случае

успеха. Это если я тебя правильно понял. Если не совсем правильно и это уже

готовый адрес d3ddev, что (в моём понимании) является волшебством и магией,

то попробуй обратиться к какому-нибудь методу - если не получится, значит

что-то пошло не так.

/*---------------------------------------------------------------------------*/

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

Да, все верно Вы поняли. Я просто тут сейчас раздупляюсь с темой DX hook'а, И нашел вот этот вот код, но он почему-то не работает, ну вернее я знаю почему он не работает а именно потому, что тут указатель на девайс задается статически "pDevice = (PDIRECT3DDEVICE9) *(int*) 0x21BEC28; ". Черт знает как у того чувака он работал, может быть он под его игру суто его подобрал просто я хз.

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

Во общем на счет функции спасибос, попробую все равно этот способ.

Ну и еще пару вопросов по этой теме:

1. Правильно ли я понял что существует всего лишь два способа найти адрес DX девайса, а именно через создание своего девайса в нужном процессе, ну и собственно по паттерну в d3d модуле нужного процесса или есть еще какие способы?

2. И я вот сейчас сделал поиск по паттерну для d3d9 а есть у кого для d3d10 и 11 может паттерны, очень был бы признателен за них.

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

/*---------------------------------------------------------------------------*/

По поводу пары вопросов:

1. По паттерну.

2. Подмена оригинальной d3d9.dll во всей системе.

3. Подмена d3d9.dll в папке с программой.

4. Загрузчик для программы.

5. Создание своего девайса в нужном процессе (или в своём) и поиск по этому

адресу - в куче или прочими вариантами этого же способа.

Если нашёл статический адрес в коде, то скорее всего этот код адаптирован под

конкретную игру.

/*---------------------------------------------------------------------------*/

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

Да, подменять d3d9.dll мне предлагали тоже на одном форуме...

Ну а так в принципе понял все кроме "4. Загрузчик для программы.". И как вижу оригинального способа нету в любом случае нужно сначала узнавать версию DX, и потом уже исходя из этой информации искать адрес устройства. Ну в таком случае 5й вариант так ниче выглядит... Просто хочу сделать информен аля RivaTuner overlay что б его было видно во всех играх независимо от версии используемых ими DX.

И да я тоже так думал что статик адресс был запилен именно под ту игру что он демонстрировал.

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

-Ставить глобальный хук SetWindowsHookEx на запуск процесса

-Запускаем игру

-Выбираем процесс по названию или сигне в его памяти

-Ищем там dll-ку какой-либо версии

-Создаешь пустышку версии D3DX и ищешь по vtable адрес EndScene

IDirect3DDevice9* pTempDev = ...;

const int EndSceneIndex = 26 (?);

typedef HRESULT (IDirect3DDevice9::* EndSceneFunc)( void );

BYTE* pVtable = reinterpret_cast<void*>( pTempDev );

EndSceneFunc = pVtable + sizeof(void*) * EndSceneIndex;

- Патчишь EndScene на свою функцию c рисованием и затем вызываешь EndScene ориниальную

- Под разные версии d3dx в том числе 32 разрядные или 64 разрядные писать дополнительные условия

Об этом способе и также кратко о других можно найти здесь или в поисковике в Интернете. Надо просто хотеть найти и все найдешь. Ничего спрашивать не придется, делать молча и все получится. День, два, три... ну не знаю неделю добиться цели... все получится. Примеры в сети можно найти, они рабочие. Самостоятельно разобраться и все.

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

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

Но все равно иногда что б прямо наверняка уже закрепить инфу надо спросить у профи :) Ну а так ищу инфу на забугровых ресурсах нашел несколько форумов а один так во обще чисто по директу и хукам по нему... так что по техоньку вьезжаю в тему...

Просто не понимая ничерта очень сложно так вот сразу разобратся в терминах итд, А обычно все видосы и мануалы делаются что б показать как умело и легко их авторы умеют делать ту или иную вещь, но еденицы из них перед написанием кода объясняют логику работы и даже рисуют картины(пример: Keng) что б не знающий человек понял не как писать код а каким образом это все работает, вот этим людям огроменное спасибо, просто от души.

Ну и по теме еще, во общем на данный момент написал dll на C++ которая инжектится в D3D9 приложение и выводит там заданный текст по координатам. И такой вопрос, а как мне эти значения изменить, на пример что б значение выводимой строки не было статическим а данные брались от куда то и выводились, ну если грубо так сказать то как мне управлять этой dll'кой то? Одно что я придумал пока что это читать данные из файла или регистров, но это же не то я уверен...

Инфы даже пока по этому не искал так что это стандартная тема и полно инфы в гугле извеняйте..

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

/*---------------------------------------------------------------------------*/

А что значит "откуда-то"? Ты волен задавать координаты и текст самостоятельно,

переменными, например. А откуда при этом их брать - твоё дело. Не совсем понял,

что ты имеешь ввиду.

/*---------------------------------------------------------------------------*/

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

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

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

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