WOW64DisableWow64fsredirection和Get NamemedSecurityInfo-不可避免的error_bad_exe_format?

StackOverflow https://stackoverflow.com/questions/4764917

  •  16-10-2019
  •  | 
  •  

我在用 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比禁用文件系统重定向。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top