2

Wow64DisableWow64FsRedirection/を使用Wow64RevertWow64FsRedirectionしてWOW-64ファイルリダイレクトを無効にして復元しています(system32\からsyswow64\への変更といくつかのレジストリの変更)。MSDNページでは、DLLのロードを含むすべてのI / O操作に影響を与えるため、これらのペアを非常に接近して使用する必要があると警告しています。

私はかなり長い間これらをうまく使用してきましたが、今では一見不可能な状況に直面しています。私が呼び出そうとしている関数GetNamedSecurityInfoは、ファイルパスを取得する関数です。ファイルパスは頻繁にsystem32フォルダーに入るので、リダイレクトを無効にする必要があります。ただし、リダイレクトを無効にすると、関数はを返しますERROR_BAD_EXE_FORMAT

含まれているDLLをプリロードしようとしましたLoadLibrary(TEXT("Advapi32.dll"))が、役に立ちませんでした。私の推測では、別のDLLをロードしていると思いますGetNamedSecurityInfoが、どちらかはわかりません。

それで、ここに質問があります。この状況に対処するための最良の方法は何ですか?使用する前に、可能なすべてのDLLをプリロードする必要がありますWow64DisableWow64FsRedirectionか?もっと良い方法はありますか?

ありがとう。

4

2 に答える 2

0

アプリケーションでは、%SystemRoot%\System32 ではなく、ディレクトリ %SystemRoot%\SysNative へのアクセスを試みる必要があります。これにより、FS リダイレクトの必要がなくなります。すべての 32 ビット プロセスは、この疑似ディレクトリにアクセスできます。64 ビット プロセスからは見えません。

32 ビット cmd.exe、http://screencast.com/t/xbAQJ2XIzoT

64 ビット cmd.exe、http://screencast.com/t/t9iFd9Ruc

Sysnative ディレクトリを使用することは、ファイル システムのリダイレクトを無効にすることをお勧めします。

于 2011-05-02T22:19:49.427 に答える