![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Пытаюсь запустить эту штуковину под Windows XP.
Проверку на DirectX 6.1 легко убрать: 3dmark.exe 0000F733: 75 90 0000F734: 13 90 0000F744: 73 EB Но возникает другая проблема - не загружается драйвер e2driver\e2_d3d_driver_mfc.dll Причём, с тупой ошибкой "C0000139 (ENTRYPOINT NOT FOUND)" - этот драйвер взят от 3DMark2000 и там он работает. Его, зачем-то, сунули ещё и в 99. Так что приходится искать старый архив Mark'99, где этот драйвер ещё не заменили (занимает 86016 байт). Но при его загрузке программа тупо зависает. Понаставив бряков вышел вот на такое: 3dmark.exe bp 456479 <-- здесь call() на функцию, где загружаются драйвера через LoadLibrary. В самом драйвере в EntryPoint заменяем в самом начале "test esi,esi" на "@current: jmps @current", чтобы попасть на загрузку драйвера. Это надо делать на диске в файле: e2_d3d_driver_mfc.dll 0000B174: 85 EB 0000B175: F6 FE В отладчике возвращаем назад "test esi,esi", затем пропускаем 2 call и входим в тот, после которого стоит "cmp esi,1", внутри крутим листинг в отладчике вниз, до команды "sub esp,00000069C" и ставим на неё бряк. Когда попадаем на него, то ставим на второй после "call eax" вызов бряк - "call d,[edx][6C]" - эта та самая хрень, которая зависает - входим внутрь - попадаем в DDRAW.DLL. Далее у меня были такие адреса, вызывающиеся из DDRAW: bp 73754C72 mscat32.CryptCATAdminAcquireContext Вызывает оттуда: bp 76C3EA84 WINTRUST.KERNEL32.RegisterWaitForSingleObject() Т.е. на стеке получается что-то типа: 3dmark.exe ->e2_d3d_driver_mfc.dll -->DDRAW.DLL --->mscat32.dll ---->WINTRUST.DLL ----->KERNEL32.DLL ------>NTDLL.DLL Проблема в том, что этот долбанный RegisterWaitForSingleObject() не хочет заканчиваться, даже если там вместо -1 (INFINITE) поставить 1000 (1 секунда). Кто-нибудь сталкивался с такой проблемой - она как-нибудь лечится или нет? Можно вызов этого метода из DDRAW пропустить, но тогда 3dmark будет ругаться, что нужна видеокарта, которая может выводить текстуры. И куча мест где стоят всякие mov eax, [edi+???] будет указывать на нулевую память - короче, программа будет неработоспособна. |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
3D Mark 99 Max & 2001 SE Startup Hang Patch
Как выяснилось разработчики умудрились всунуть инициализацию DirectX в DLLMain(), когда официальная документация MSDN явно указывает, что в DLLMain() можно делать только очень небольшой набор вещей, иначе в лучшем случае получите ошибку, а в худшем, как здесь, взаимное ожидание завершения у нескольких потоков. |
![]() ![]() |
Упрощённая версия | Сейчас: 12th September 2024 - 12:59 |