Открытие% SystemRoot% \ system32 \ calc.exe из 32-разрядного процесса перенаправляет в другой файл.Который, почему и как? - PullRequest
2 голосов
/ 28 апреля 2011

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

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

Это WinSxS на работе? Или что еще вызывает это? И какой файл фактически подается в 32-разрядные приложения, открывающие% SystemRoot% \ system32 \ calc.exe?

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

Ответы [ 3 ]

5 голосов
/ 28 апреля 2011

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

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

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

1 голос
/ 29 апреля 2011

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

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

1 голос
/ 28 апреля 2011

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

...