Почему Windows помещает 64-битные модули в System32?


Подсистема WoW64 (Windows on Windows 64) использует перенаправление реестра и файловой системы для 32-битных программ, запущенных в 64-разрядных версиях Windows, а 64-битные системные библиотеки по прежнему хранятся в каталоге "%windir%\system32". С чем же связано подобное положение, ведь более логично было бы закрепить за 32-битными программами путь "%windir%\system32", а для 64-битных использовать, скажем, "%windir%\system64"?

Алексей Пахунов, сотрудник Microsoft участвовавший в создании WoW64, в своём блоге пишет, что такой путь был выбран для упрощения переноса приложений на 64-битную платформу. Имена ключей реестра и названия каталогов, которые использует приложение, очень часто хранятся в виде текстовых констант в коде программы, несмотря на то, что путь к большинству системных каталогов можно (и нужно) получать с помощью функций GetSystemDirectory, GetWindowsDirectory и т.п. При перекомпиляции существующего приложения для 64-разрядной платформы эти текстовые константы останутся неизменными. И поскольку простой перекомпиляции обычно не достаточно для перехода на 64-битную платформу (проявляются ошибки, связанные с неточным следованием рекомендациям Microsoft по использованию Windows API), Microsoft постаралась сделать этот переход как можно менее болезненным, избавив программистов от необходимости поиска и замены множества строковых констант во всех портируемых приложениях.

Библиографический список



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;



Найденные ошибки

Проверено проектов
363
Собрано ошибок
13 495

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;