IPB

Добро пожаловать, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> 3DMark'99, Windows XP fix
-=CHE@TER=-
Apr 7 2012, 14:58
Сообщение #1


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,361
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 314 раз(а)



Пытаюсь запустить эту штуковину под 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+???] будет указывать на нулевую память - короче, программа будет неработоспособна.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Sep 6 2019, 11:02
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,361
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 314 раз(а)



3D Mark 99 Max & 2001 SE Startup Hang Patch
Как выяснилось разработчики умудрились всунуть инициализацию DirectX в DLLMain(), когда официальная документация MSDN явно указывает, что в DLLMain() можно делать только очень небольшой набор вещей, иначе в лучшем случае получите ошибку, а в худшем, как здесь, взаимное ожидание завершения у нескольких потоков.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 31st October 2024 - 09:26