Wow64DisableWow64FsRedirection и GetNamedSecurityInfo - неизбежно ERROR_BAD_EXE_FORMAT? - PullRequest
2 голосов
/ 22 января 2011

Я использую Wow64DisableWow64FsRedirection / Wow64RevertWow64FsRedirection для отключения и восстановления перенаправления файлов WOW-64 (внесение system32 \ в syswow64 \ и некоторые изменения в реестре). Страница MSDN предупреждает, что вы должны использовать эти пары очень близко друг к другу, поскольку они влияют на все операции ввода-вывода, включая загрузку DLL.

Я успешно использовал их довольно долгое время, но теперь столкнулся с, казалось бы, невозможной ситуацией. Я пытаюсь вызвать функцию GetNamedSecurityInfo, которая принимает путь к файлу. Путь к файлу часто будет в папке system32, поэтому мне нужно отключить перенаправление. Однако если я отключу перенаправление, функция вернет ERROR_BAD_EXE_FORMAT.

Я пытался предварительно загрузить DLL, в которой он находится, с LoadLibrary(TEXT("Advapi32.dll")), но это не помогло. Я предполагаю, что он загружает другую DLL внутри GetNamedSecurityInfo, но я не знаю, какая именно.

Так что вот вопрос сейчас. Как лучше всего справиться с этой ситуацией? Должен ли я просто предварительно загрузить все возможные библиотеки DLL перед использованием Wow64DisableWow64FsRedirection? Есть ли лучший способ?

Спасибо.

Ответы [ 2 ]

1 голос
/ 09 октября 2013

Достаточно, чтобы вы предварительно загрузили ntmarta.dll перед вызовом Wow64DisableWow64FsRedirection (LoadLibrary("ntmarta.dll")).Таким образом, GetNamedSecurityInfo / SetNamedSecurityInfo API не вернет ERROR_BAD_EXE_FORMAT до предварительной загрузки этого модуля (см. ADVAPI32!AccProvpLoadMartaFunctions код функции).

0 голосов
/ 03 мая 2011

В вашем приложении вы должны попытаться получить доступ к каталогу% SystemRoot% \ SysNative вместо% SystemRoot% \ System32.Это отключает необходимость перенаправления FS.Все 32-битные процессы имеют доступ к этому псевдо-каталогу.Он невидим для 64-битных процессов.

32-битный cmd.exe, http://screencast.com/t/xbAQJ2XIzoT

64-битный cmd.exe, http://screencast.com/t/t9iFd9Ruc

Использование каталога Sysnative предпочтительнее, чем отключение перенаправления файловой системы из-за проблем, с которыми вы столкнулись.

...