Not a kernel guy

… in the Windows kernel team

Monday, June 30, 2008

Undefined behavior – это все, что явно не указано в документации.

Навеяно постом про ExUuidCreate и в частности вот этой фразой:

Well, I suggest MSFT to documented this behavior, or at least explain this case in documentation.

Вкратце, суть статьи сводится к тому, что функция ExUuidCreate может изменять содержимое возвращаемого буфера даже в том случае, если она возвращает ошибку. Далее, в комментариях, завязался спор на тему имеет ли функция право трогать буфер в случае ошибки.

(more…)

Posted at 10:42 pm •

Saturday, June 21, 2008

Почему GetModuleFileName возвращает “system32” для 32-х битных библиотек под Wow64?

Вопрос:

32-х битный процесс запущен на 64-х битной системе. Почему для некоторых библиотек GetModuleFileName возвращает путь вида “%SystemRoot%\syswow64”, а для других - “%SystemRoot%\system32”, не смотря на то, что и первые, и вторые находятся в “%SystemRoot%\syswow64”?

Ответ:

Потому что загрузчик понятия не имеет о Wow64 и перенаправлении файловой системы в частности. Загрузчик просто сохраняет полное имя модуля во время загрузки и возвращает его копию в GetModuleFileName. Соответственно если библиотека была загружена как “%SystemRoot%\system32\foobar.dll”, то и GetModuleFileName вернёт эту строку.

Это же верно и для других Win32 функций.

Posted at 2:39 pm •

Friday, May 9, 2008

«Большие» функции в коде.

Вопрос из комментариев:

Не могли бы прокомментировать ответ “Lepsik” по порядкам в Microsoft (тред):

автор - Диез

1, 2. Естественно, полтора - это величина условная. Просто большая длина обычно требует более одного движения для полного обзора :)

3. Никто не мешает сделать методы того же класса, но часто удобнее и логичнее разнести код на уровни, т.е. в отдельные классы (а то и в отдельные библиотеки).

Вообще, все это есть у Фаулера :)

это просто у вас программы маленькие. :)

в больших компаниях Microsoft/IBM/SONY, …. таких правил нет. У нас есть методы с телом в сотню экранов. А файл с методом тела процесса больше мегобайта.

За весь Microsoft не скажу. Расскажу, что видел сам.

(more…)

Posted at 9:58 pm •

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 •
Next Page »

Powered by WordPress