Not a kernel guy

… in the Windows kernel team

Tuesday, April 1, 2008

Отгадка.

В комментариях к загадке ответ был дан почти сразу. Действительно, обработчик отложенной загрузки DLL попытается загрузить «version.dll» по имени, а не по полному пути. В результате загрузчик будет искать библиотеку, пользуясь правилами по умолчанию. Номер два в этом списке поиск DLL в system32, что при отключенном перенаправлении файловой системы, равноценно попытке загрузить 64-х битную DLL в 32-х битный процесс. Бум.

(more…)

Posted at 9:28 pm •

Sunday, March 30, 2008

Загадка.

Вот эта программа печатает номер версии указанного пользователем модуля, который она берет из поля “FileVersion” ресурса VS_VERSION_INFO этого модуля. Имя модуля передается как первый параметр командной строки. Для работы с VS_VERSION_INFO используется стандартная библиотека version.dll.

(далее идет много кода)

(more…)

Posted at 10:20 pm •

Wednesday, March 5, 2008

Dinosource.

Просто наблюдение: если код .DLL, вылетающей с ошибкой доступа (Access Violation), находится в каталоге с именем «Dinosource», то его проще исправить самому, чем найти владельца этого кода.

Posted at 5:16 pm •

Friday, February 15, 2008

Помните, как я ругался на функцию GetRawInputDeviceList?

Оказалось, что это была ошибка в документации. Её поправили и посмотрите, что получилось.

(more…)

Posted at 9:06 pm •

Sunday, February 3, 2008

Кстати ещё одна причина, почему DllMain должна выполнять как можно меньше работы…

…это возможность распараллелить код инициализации подсистем по разным процессорам. Учитывая скорость распространения многоядерных процессоров это становиться актуальной задачей. Вынести большую часть кода из DllMain и конструкторов статических объектов не сложно. Достаточно оформить доступ ко всем подсистемам через singleton-подобный интерфейс, защищённый критической секцией. Сложнее – выстроить зависимости между подсистемами так, чтобы инициализация выполнялась как можно позже, когда все рабочие потоки созданы и готовы к работе.

Не менее важно и не перестараться с отложенной инициализацией. 30 секундное шуршание головками винчестера в ответ на безобидный щелчок мышью может вывести из себя даже спокойного пользователя. Или ещё хуже, удаленное приложение может оборвать соединение, так и не дождавшись ответа.

Posted at 4:40 pm •

Thursday, January 31, 2008

Возвращаясь к теме про фаззеры.

Вот код, которым я пользуюсь для написания стресс тестов и фаззеров в своих проектах. Класс EntropyGenerator – обертка вокруг генератора случайных чисел.

(more…)

Posted at 10:02 pm •

Wednesday, January 30, 2008

Пикник на обочине или не ходите, дети, в DllMain гулять, а то ноги оторвёт.

Точка входа в DLL, так же как и точка входа в программу, - это очень специальное место. Зона. В Зоне действуют свои правила касательно того, что можно делать, а что делать нельзя. В Зоне можно инициализировать локальные данные DLL, можно создавать критические секции. В Зоне нельзя динамически загружать другие Модули или создавать потоки. Любой Сталкер знает и следует правилам Зоны. Все остальные рано или поздно нарушают правила и расплачиваются за это.

(more…)

Posted at 9:01 pm •
« Previous PageNext Page »

Powered by WordPress