Бесшумное перенаправление 64-разрядных системных файлов на 32-разрядные эквиваленты можно отключить , отключить и вернуть с помощью Wow64DisableWow64FsRedirection и Wow64RevertWow64FsRedirection. Мы используем это для определенных проверок личности файлов в нашем приложении.
Проблема заключается в том, что при выполнении некоторых из этих задач мы могли бы вызвать каркас или API Windows, который впоследствии вызывает другой API в DLL, которая еще не была загружена. Если перенаправление включено в это время, может быть загружена неправильная версия библиотеки DLL, что приведет к ошибке XXX is not a valid Win32 application
.
Я определил несколько рассматриваемых вызовов API, и что я хотел бы сделать, чтобы принудительно включить перенаправление на время этого вызова, а затем вернуть его обратно - просто напротив предоставленных Win32 API. , К сожалению, эти вызовы не предоставляют какой-либо флаг совместимости с WOW64, как это делают некоторые методы реестра.
Очевидная альтернатива - использовать Wow64EnableWow64FsRedirection, передать TRUE для Wow64FsEanbledRedirection. Однако существует множество предупреждений об использовании этого метода и отмечается, что он не совместим с комбинированными методами Disable / Revert, которые его заменили.
Существует ли безопасный способ принудительного перенаправления на для вызова Win32 без ограничений?
В документации указано, что перенаправление зависит от потока, поэтому я рассмотрел возможность создания нового потока для конкретного вызова с соответствующими блокировками и ожиданиями, но я надеялся на более простое решение.