Потому что компиляция в режиме C и в режиме C++ отличаются. И файлы с расширением .c по умолчанию в студии компилируются не так, как файлы с расширением .cpp. В частности, в Си законны присваивания void* a = (любой указатель), а в C++ требуется явный кастинг.
diamond это я уже понял, так какой здесь выход, переделывать весь проект на чистом С, или как то можно выкрутится продалжая дальше использовать С++ ?
на данный момент, проблеммы в следующем коде Код (Text): ... PVOID *MappedSystemCallTable; #define SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1) #define HOOK_SYSCALL(_Function, _Hook, _Orig ) \ _Orig = (PVOID) InterlockedExchange( (PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook) ... MappedSystemCallTable = MmMapLockedPages(g_pmdlSystemCall, KernelMode); так естественно даёт ошибку. Код (Text): 1>.\include\hide.cpp(196) : error C2440: '=' : cannot convert from 'PVOID' to 'PVOID *' 1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast делаю так Код (Text): MappedSystemCallTable = (PVOID *)MmMapLockedPages(g_pmdlSystemCall, KernelMode); Сотрю в отладчик - фатальная ошибка. Прямо замкунтый круг))
Явное приведение типов устраняет ошибку компиляции. Если сбой при работе - значит, где-то в коде есть ошибка, не связанная с этим.
Фатальная ошибка это бсод)) Это можно и без отладчика посмотреть, он же для другого создавался, ты что не можешь бряки поставить и посмотреть что там происходит?
Так что там происходит, когда флаг меняю, тогда и фатальная ошибка на этой строке, да ещё как то через раз бывает ошибка когда страницу блокирую. х.з. вроде всё нормально, потом хоп и ошибка. Несколько раз было вообще всё нормально проходило но не скрывало ни чего. Вообщем плюнул я на эту затею, всё переделал, на чистом С.