Собираясь отправиться в места не столь отдаленные, но лишенные прелестей всемирной сети, я прихватил с собой ноутбук, предварительно снабдив его рядом невероятно модных во времена своей беззаботной молодости игрушек. В число избранных попали такие шедевры, как Fallout 2, Baldur’s Gate, и более поздняя Age of Wonders 2. Проверив каждую из них на работоспособность в условиях свежеустановленной на лэптоп операционной системы Windows 7, я благополучно успокоился, будучи уверенным в том, что они помогут мне скоротать предстоящие долгие зимние вечера.
Каково же было мое удивление, когда, располагаясь уже на месте своего назначения, я решил все-таки вкусить немного постапокалиптики и, дважды кликнув по значку, изображающему Васька Трубачева, получил шиш с маслом! При этом я твердо помнил, что дома лично запускал все установленные игры и даже начинал играть в каждую из них. А в этот раз все, что я получил – это песочные часики на несколько секунд, и под завязку загруженный процессор. Взглянув в диспетчер задач, я заметил, что жадным до процессорного времени процессом оказался rundll32.exe, запустившийся вместе с fallout’ом. Завершив его, я немного побаловался с параметрами совместимости, но в каждом случае получал один и тот же результат. Смирившись с тем, что с киберпанком у меня не сложилось, я решил продолжить карьеру профессионального истребителя орков и прочих гоблинов, но к своему ужасу увидел, что с Baldur’s Gate и Age of Wonders 2 приключилась та же неприятность!
Интернета не было, выхода тоже, поэтому пришлось думать. Отбросив варианты саботажа, повреждения при перевозке, близкого расположения телевышки (облучающей меня и моего наколенного друга пропитанными свиным гриппом и предвыборной кампанией волнами) и проч, я остановился на наиболее вероятном – проявлении всемирного заговора. Чтобы подтвердить эту теорию, я с помощью наглядной студии приаттачился к гнусному процессу rundll32.exe, с надеждой если уж не поиграть, то произвести intercourse со своим мозгом. Предусмотрительно привязав себя к стулу, дабы не убежать в страхе из-за увиденного, я нажал кнопку Pause, вследствие чего заполучил на экране вываленную безо всякого сожаления тонну отдизасемблированного кода. Поставив брекпойнт в точке, на которой я приостановил выполнение программы, я на несколько секунд заснул на клавише F5, и по миганию красного кружка понял, что имею дело с зацикливанием. Чего, собственно, и следовало ожидать. Заглянув в Call Stack, я в который раз удивился, обнаружив там вызовы из wininet.dll. А после того, как методом последовательно восходящего брейкпойнтирования я локализовал место зацикливания, то оказался в gameux.dll.
Собственно, кусок кода, из-за которого произошло зацикливание:
Условный джамп в забрейкпойнченной точке всегда обходил стороной mov в следующей строке, и так происходило вечно... Все, что от меня требовалось в данном случае – это перетащить желтую стрелочку на строчку вниз, нажать F5, и вуаля – я в Fallout’е. Точно такой же трюк прошел и с двумя оставшимися игрушками.
Дальнейший поиск показал, что gameux.dll представляет собой некий Game Explorer, который, видимо, с недобрыми намерениями пытался пробраться в интернет и загрузить информацию о запускаемой игре, а когда у него это не получалось, - стопорился. Осталось только определить, при каких условиях это происходит.
P.S. А вот и описание аналогичной проблемы на форумах Microsoft - она, оказывается, тянется еще с билда 7100.


Ubuntu Linux тебе в помощь... Там нет пирадских игр. Нет пирадской венды. Есть только светлый и чистый OpenSource. Без бреда с вирусами и прочими malware.
OK.