Wow64DisableWow64FsRedirection 和 GetNamedSecurityInfo - 不可避免的 ERROR_BAD_EXE_FORMAT?

发布于 2024-10-14 03:05:30 字数 634 浏览 6 评论 0原文

我正在使用 Wow64DisableWow64FsRedirection / Wow64RevertWow64FsRedirection 来禁用和恢复 WOW-64 文件重定向(将 system32\ 更改为 syswow64\ 并进行一些注册表更改)。 MSDN 页面警告您应该非常紧密地使用这些对,因为它们会影响所有 I/O 操作,包括加载 DLL。

我已经成功地使用这些方法相当长一段时间了,但现在遇到了一个看似不可能的情况。我尝试调用的函数是 GetNamedSecurityInfo,它采用文件路径。文件路径经常会进入 system32 文件夹,因此我需要禁用重定向。但是,如果我禁用重定向,该函数将返回ERROR_BAD_EXE_FORMAT

我尝试使用 LoadLibrary(TEXT("Advapi32.dll")) 预加载它所在的 DLL,但这没有帮助。我的猜测是它正在 GetNamedSecurityInfo 中加载另一个 DLL,但我不知道是哪个。

所以现在的问题是。处理这种情况的最佳方法是什么?我是否应该在使用 Wow64DisableWow64FsRedirection 之前预加载所有可能的 DLL?有更好的办法吗?

谢谢。

I am using Wow64DisableWow64FsRedirection / Wow64RevertWow64FsRedirection to disable and restore WOW-64 file redirection (making system32\ to syswow64\ and some registry changes). The MSDN page warns that you should use these pairs very close together because they effect all I/O operations, including loading DLLs.

I have used these successfully for quite some time, but now have come up against a seemingly impossible situation. The function I am trying to call is GetNamedSecurityInfo which takes a file path. The file path will frequently be into the system32 folder so I need to disable redirection. However, if I disable redirection the function returns ERROR_BAD_EXE_FORMAT.

I have tried to pre-load the DLL it is in with LoadLibrary(TEXT("Advapi32.dll")) but that didn't help. My guess is that it is loading another DLL within GetNamedSecurityInfo but I don't know which.

So here is the question now. What is the best way to handle this situation? Should I just pre-load all possible DLLs before using Wow64DisableWow64FsRedirection? Is there a better way?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尐偏执 2024-10-21 03:05:30

在您的应用程序中,您应该尝试访问目录 %SystemRoot%\SysNative 而不是 %SystemRoot%\System32。这将不再需要 FS 重定向。所有 32 位进程都可以访问此伪目录。它对于 64 位进程是不可见的。

32 位 cmd.exe,http://screencast.com/t/xbAQJ2XIzoT

64 位 cmd。 exe, http://screencast.com/t/t9iFd9Ruc

使用 Sysnative 目录优于禁用文件系统由于您遇到的问题而重定向。

In your application you should attempt to access the directory %SystemRoot%\SysNative instead of %SystemRoot%\System32. This disables the need for FS redirection. All 32-bit processes have access to this pseudo-directory. It is invisible to 64-bit processes.

32-bit cmd.exe, http://screencast.com/t/xbAQJ2XIzoT

64-bit cmd.exe, http://screencast.com/t/t9iFd9Ruc

Using the Sysnative directory is preferrable to disabling file system redirection because of the kind of problems you have run into.

埖埖迣鎅 2024-10-21 03:05:30

在调用 Wow64DisableWow64FsRedirection (LoadLibrary("ntmarta.dll")) 之前预加载 ntmarta.dll 就足够了。
这样,在预加载该模块之前,GetNamedSecurityInfo / SetNamedSecurityInfo API 不会返回 ERROR_BAD_EXE_FORMAT(请参阅 ADVAPI32!AccProvpLoadMartaFunctions功能代码)。

It's enough that you pre-load ntmarta.dll before calling Wow64DisableWow64FsRedirection (LoadLibrary("ntmarta.dll")).
In this way GetNamedSecurityInfo / SetNamedSecurityInfo API will not return ERROR_BAD_EXE_FORMAT before that module is preloaded before (see ADVAPI32!AccProvpLoadMartaFunctions function code).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文