Открытие %SystemRoot%system32calc.exe из 32-разрядного процесса перенаправляет на другой файл. Что, почему и как?

#winapi #windows-7-x64 #createfile #wow64 #winsxs

#winapi #windows-7-x64 #createfile #wow64 #winsxs

Вопрос:

В настоящее время я пишу некоторый тестовый код на C , который работает с файлами PE, чтобы понять структуру формата файла. Мой проект настроен на компиляцию в 64-разрядную версию. В моем коде я открываю %SystemRoot%system32calc.exe и прочитайте структуры IMAGE_DOS_HEADER и IMAGE_NT_HEADERS. В то же время у меня то же самое calc.exe открыт в Notepad с помощью плагина hex editor. Я сравнил значения, считываемые моим кодом, с Notepad и заметил, что они отличаются. Я скопировал calc.exe из System32 в C:Tempcalc.exe , и теперь значения совпадают.

Notepad , похоже, является 32-разрядным приложением (не проверял PE-файл, но поскольку по умолчанию он установлен в Program Files (x86), это кажется безопасным предположением).

Работает ли этот WinSxS? Или что еще является причиной этого? И какой файл фактически передается для открытия 32-разрядных приложений%SystemRoot%system32calc.exe ?

Просто любопытно. Заранее спасибо за любой свет, пролитый на это.

Ответ №1:

Да, это перенаправитель WOW. Вы увидите, что существует calc.exe в C:WindowsSysWOW64 также. Это файл, который открывается при использовании %SystemRoot%System32calc.exe путь.

Это может быть временно отключено для доступа к 64-разрядной версии файла с Wow64DisableWow64FsRedirection

Более подробную информацию можно найти в средстве перенаправления файловой системы

Комментарии:

1. 1 но, конечно, вы действительно имеете в виду «временно отключен доступ к 64-разрядной версии»; версия в SysWOW64 является 32-разрядной версией

2. Вы знаете, я не думал, что это так наоборот. Насколько я понимаю, 32-разрядные версии все еще существовали в System32 и перенаправлялись на их 64-разрядные версии в SysWOW64. После повторного чтения документов я вижу, что вы абсолютно правы.

3. Это легко запомнить: 32-разрядный материал помещается в место с 64 в имени, а 64-разрядный материал помещается в место с 32. Как это может кого-то смутить ?!! 😉

4. Спасибо, это все. Я знаю, что весь смысл wow64 в том, чтобы беспрепятственно запускать 32-разрядный код на 64-разрядной платформе, но это только кажется… зло. Интересно, сколько людей запускают 32-разрядные антивирусные сканеры на своих 64-разрядных системах и убеждены, что в их каталоге system32 вирусов нет…

5. @Jehjoa Я думаю, что в общей сложности 0 человек запускают 32-разрядные антивирусные сканеры на 64-разрядной машине. Разработчики антивирусных сканеров не идиоты. Они не будут устанавливать 32-разрядный сканер на 64-разрядную машину. Более того, антивирусные сканеры обычно интегрируются в ядро, и поэтому для того, чтобы многое сделать, они должны быть 64-разрядными в 64-разрядной системе. Да, WOW64 иногда может немного сбивать с толку, но вы скоро привыкнете к этому, как только освоитесь.

Ответ №2:

Отключение перенаправления WowFs не требуется, а иногда даже не является опцией (например, когда вы пытаетесь заставить Notepad открывать файлы в каталоге system32). Вы можете использовать виртуальный каталог %windir%Sysnative вместо %windir% System32 (вы не увидите его в проводнике, но вы можете ввести его в адресной строке)

WOW64 реализован в трех библиотеках DLL: wow64.dll, wow64cpu.dll, и wow64win.dll (и 32-разрядный NTDLL). Перенаправление (среди прочего) реализовано в wow64.dll, Эмуляция процессора / вспомогательные процедуры в wow64cpu.dll, и wow64win.dll содержит ссылки на win32k.sys (драйвер режима ядра, отвечающий за графический интерфейс Windows).

Ответ №3:

Если я хорошо помню, когда 32-разрядные приложения пытаются открыть каталог system32, он автоматически перенаправляется в каталог syswow64.

Комментарии:

1. Спасибо, вы хорошо запомнили. 🙂 Проголосовал «За», но я пометил ответ Пола как ответ, потому что он более полный.

2. @Jehjoa: спасибо за голосование, и вы правы: другой вариант более полный !! 🙂