Навеяно постом про ExUuidCreate и в частности вот этой фразой:
Well, I suggest MSFT to documented this behavior, or at least explain this case in documentation.
Вкратце, суть статьи сводится к тому, что функция ExUuidCreate может изменять содержимое возвращаемого буфера даже в том случае, если она возвращает ошибку. Далее, в комментариях, завязался спор на тему имеет ли функция право трогать буфер в случае ошибки.
(more…)
Posted at 10:42 pm •
Вопрос:
32-х битный процесс запущен на 64-х битной системе. Почему для некоторых библиотек GetModuleFileName возвращает путь вида “%SystemRoot%\syswow64”, а для других - “%SystemRoot%\system32”, не смотря на то, что и первые, и вторые находятся в “%SystemRoot%\syswow64”?
Ответ:
Потому что загрузчик понятия не имеет о Wow64 и перенаправлении файловой системы в частности. Загрузчик просто сохраняет полное имя модуля во время загрузки и возвращает его копию в GetModuleFileName. Соответственно если библиотека была загружена как “%SystemRoot%\system32\foobar.dll”, то и GetModuleFileName вернёт эту строку.
Это же верно и для других Win32 функций.
Posted at 2:39 pm •
Вопрос из комментариев:
Не могли бы прокомментировать ответ “Lepsik” по порядкам в Microsoft (тред):
автор - Диез
1, 2. Естественно, полтора - это величина условная. Просто большая длина обычно требует более одного движения для полного обзора
3. Никто не мешает сделать методы того же класса, но часто удобнее и логичнее разнести код на уровни, т.е. в отдельные классы (а то и в отдельные библиотеки).
Вообще, все это есть у Фаулера
это просто у вас программы маленькие.
в больших компаниях Microsoft/IBM/SONY, …. таких правил нет. У нас есть методы с телом в сотню экранов. А файл с методом тела процесса больше мегобайта.
За весь Microsoft не скажу. Расскажу, что видел сам.
(more…)
Posted at 9:58 pm •
В комментариях к загадке ответ был дан почти сразу. Действительно, обработчик отложенной загрузки DLL попытается загрузить «version.dll» по имени, а не по полному пути. В результате загрузчик будет искать библиотеку, пользуясь правилами по умолчанию. Номер два в этом списке поиск DLL в system32, что при отключенном перенаправлении файловой системы, равноценно попытке загрузить 64-х битную DLL в 32-х битный процесс. Бум.
(more…)
Posted at 9:28 pm •
Вот эта программа печатает номер версии указанного пользователем модуля, который она берет из поля “FileVersion” ресурса VS_VERSION_INFO этого модуля. Имя модуля передается как первый параметр командной строки. Для работы с VS_VERSION_INFO используется стандартная библиотека version.dll.
(далее идет много кода)
(more…)
Posted at 10:20 pm •
Просто наблюдение: если код .DLL, вылетающей с ошибкой доступа (Access Violation), находится в каталоге с именем «Dinosource», то его проще исправить самому, чем найти владельца этого кода.
Posted at 5:16 pm •
Оказалось, что это была ошибка в документации. Её поправили и посмотрите, что получилось.
(more…)
Posted at 9:06 pm •