WOW64DisableWow64fsredirection和Get NamemedSecurityInfo-不可避免的error_bad_exe_format?
题
我在用 Wow64DisableWow64FsRedirection
/ Wow64RevertWow64FsRedirection
禁用和还原WOW-64文件重定向(使System32 to Syswow64 和某些注册表更改)。 MSDN页面警告说,您应该非常近距离使用这些对,因为它们会影响所有I/O操作,包括加载DLL。
我已经成功使用了相当长的一段时间,但是现在已经遇到了看似不可能的情况。我试图打电话的功能是 GetNamedSecurityInfo
这是一个文件路径。文件路径经常进入System32文件夹,因此我需要禁用重定向。但是,如果我禁用重定向,则函数返回 ERROR_BAD_EXE_FORMAT
.
我试图预先加载它的dll LoadLibrary(TEXT("Advapi32.dll"))
但这无济于事。我的猜测是它正在加载另一个DLL GetNamedSecurityInfo
但是我不知道哪个。
所以这是现在的问题。处理这种情况的最佳方法是什么?我是否应该在使用之前先预加载所有可能的DLL Wow64DisableWow64FsRedirection
?有没有更好的办法?
谢谢。
解决方案
您预先负载就足够了 ntmarta.dll 打电话之前 Wow64DisableWow64FsRedirection
(LoadLibrary("ntmarta.dll")
)。这样 GetNamedSecurityInfo
/ SetNamedSecurityInfo
API不会返回 ERROR_BAD_EXE_FORMAT
在该模块之前先预加载之前(请参阅 ADVAPI32!AccProvpLoadMartaFunctions
功能代码)。
其他提示
在您的应用程序中,您应该尝试访问目录%SystemRoot% Sysnative而不是%SystemRoot% System32。这可以禁用FS重定向的需求。所有32位流程都可以访问此伪直系。它是64位过程的看不见的。
32位cmd.exe, http://screencast.com/t/xbaqj2xizot
64位cmd.exe, http://screencast.com/t/t9ifd9ruc
由于您遇到的问题类型,因此使用SYSNATIVE DIRECTORY比禁用文件系统重定向。