Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2017, 15:04   #11
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

СкопируйтеDetourAttachEx и/или DetourAttach из хидера прототип.
alexzk вне форума Ответить с цитированием
Старый 16.11.2017, 15:35   #12
SuprSonic
Пользователь
 
Регистрация: 07.08.2016
Сообщений: 16
По умолчанию

Код:
LONG WINAPI DetourAttachEx(_Inout_ PVOID *ppPointer,
                           _In_ PVOID pDetour,
                           _Out_opt_ PDETOUR_TRAMPOLINE *ppRealTrampoline,
                           _Out_opt_ PVOID *ppRealTarget,
                           _Out_opt_ PVOID *ppRealDetour);
Код:
LONG WINAPI DetourAttach(_Inout_ PVOID *ppPointer,
                         _In_ PVOID pDetour);
SuprSonic вне форума Ответить с цитированием
Старый 16.11.2017, 16:02   #13
SuprSonic
Пользователь
 
Регистрация: 07.08.2016
Сообщений: 16
По умолчанию

Вот такой код:
Код:
#include "stdafx.h"
#pragma comment (lib, "detours.lib")
 
typedef HRESULT (WINAPI * True_GetFn)(LPCWSTR wszName, LONG lFlags, VARIANT *pVal, CIMTYPE *pvtType, LONG *plFlavor);
True_GetFn p_Get = nullptr;
 
__declspec(dllexport) HRESULT WINAPI Hooked_Get(LPCWSTR wszName, LONG lFlags, VARIANT *pVal, CIMTYPE *pvtType, LONG *plFlavor)
{
	if (wcsstr(wszName, L"VideoProcessor") != NULL || wcsstr(wszName, L"Name") != NULL || wcsstr(wszName, L"AdapterCompatibility") != NULL || wcsstr(wszName, L"SystemName") != NULL)
	{
		pVal->vt = VT_BSTR; 
		V_BSTR(pVal) = L"NO_DATA";
	}
	else if (wcsstr(wszName, L"AdapterRAM") != NULL)
	{
		pVal->vt = VT_UI4;
		V_BSTR(pVal) = L"0";
	}
	return p_Get(wszName, lFlags, pVal, pvtType, plFlavor);
}
 
PVOID SetDetour(PVOID* ppTarget, PVOID pHandler) // Thank you, IChooseYou.
{
	if (DetourTransactionBegin() != NO_ERROR)
		return FALSE;
 
	if (DetourUpdateThread(GetCurrentThread()) != NO_ERROR)
	{
		DetourTransactionCommit();
		return NULL;
	}
 
	PDETOUR_TRAMPOLINE pTrampoline = NULL;
 
	if (DetourAttachEx(ppTarget, pHandler, &pTrampoline, NULL, NULL) != NO_ERROR)
	{
		DetourTransactionCommit();
		return NULL;
	}
 
	if (DetourTransactionCommit() != NO_ERROR)
	{
		DetourTransactionAbort();
		return NULL;
	}
 
	return pTrampoline;
}
 
BOOL APIENTRY DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
	HMODULE hLib = GetModuleHandle(L"fastprox.dll");
	if (hLib)
	{
		p_Get = (True_GetFn)GetProcAddress(hLib, "?Get@CWbemObject@@UAGJPBGJPAUtagVARIANT@@PAJ2@Z");
		if (p_Get)
		{
			SetDetour(&(PVOID&)p_Get, Hooked_Get);
		}
	}
       return TRUE;
}
Выдает следующее при запуске dxdiag.exe:

jwy8Ffr.png

AoiMxZY.png

M9FLgqL.png

SuprSonic вне форума Ответить с цитированием
Старый 16.11.2017, 16:09   #14
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Ну вроде верный код....но

Код:
return p_Get(wszName, lFlags, pVal, pvtType, plFlavor);
Там p_Get нулем не стал случайно в процессе вызова DetourAttach ? Сделайте проверку с каким-нить сообщением себе.

Еще уберите всю свою проверку (в комментарии временно), оставьте только

Код:
return p_Get(wszName, lFlags, pVal, pvtType, plFlavor);
Там...в системных библиотеках 2 версии ф. всех A + W - вы можете не ту перехватывать. А это для однобайтных строк. Или в вашей длл вообще нет версии W, такое тоже может быть.

Последний раз редактировалось alexzk; 16.11.2017 в 16:17.
alexzk вне форума Ответить с цитированием
Старый 16.11.2017, 16:24   #15
SuprSonic
Пользователь
 
Регистрация: 07.08.2016
Сообщений: 16
По умолчанию

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

----------------------------

Насчет проверки поторопился я - не проходит он ее. Но даже закомментировав ее, всеравно ошибка. Хотя если в функции Hooked_Get прописать MessageBox, то он появится.

Последний раз редактировалось SuprSonic; 16.11.2017 в 16:27.
SuprSonic вне форума Ответить с цитированием
Старый 16.11.2017, 16:35   #16
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Попробуйте версию без Ex использовать. Щас вы получаете трамплин, видимо его нужно пользовать вместо
return p_Get(wszName, lFlags, pVal, pvtType, plFlavor);
alexzk вне форума Ответить с цитированием
Старый 16.11.2017, 16:45   #17
SuprSonic
Пользователь
 
Регистрация: 07.08.2016
Сообщений: 16
По умолчанию

Вместо return p_Get(wszName, lFlags, pVal, pvtType, plFlavor); ? Я пока себе даже представит не могу как это должно выглядеть...
SuprSonic вне форума Ответить с цитированием
Старый 16.11.2017, 16:48   #18
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Код:
if (DetourAttachEx(ppTarget, pHandler, &pTrampoline, NULL, NULL) != NO_ERROR)
здесь

Код:
if (DetourAttach(ppTarget, pHandler) != NO_ERROR)
alexzk вне форума Ответить с цитированием
Старый 16.11.2017, 16:57   #19
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Кароче, вот как я делал еще на винде - 32 бита

https://github.com/alexzk1/game_clic...ker/qfixgg.cpp

Точнее, это как я убирал чужой перехват походу...

Последний раз редактировалось alexzk; 16.11.2017 в 16:59.
alexzk вне форума Ответить с цитированием
Старый 16.11.2017, 16:59   #20
SuprSonic
Пользователь
 
Регистрация: 07.08.2016
Сообщений: 16
По умолчанию

не помогло
SuprSonic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подмена url с помощью .htaccess Gorychev Общие вопросы Web 1 19.02.2014 01:39
в чем отличие gpu core clock и gpu clock почему значания разные? gpu0 Компьютерное железо 0 10.06.2012 05:17
DETOURS, Перехват API средствами Detours Micki1 Visual C++ 1 05.04.2012 04:45
подмена данных в программе linkod Фриланс 9 12.03.2009 11:12
Подмена данных Smip Microsoft Office Excel 2 13.01.2009 08:51