WoW64DisableWow64FSReDirection und GetNamedSecurityInfo - Unwahrscheinlich error_bad_exe_format?
Frage
ich benutze Wow64DisableWow64FsRedirection
/ Wow64RevertWow64FsRedirection
So deaktivieren und wiederherstellen Sie die WOW-64-Dateiumleitung (System 32 zu SYSWOW64 und einigen Registrierungsänderungen). Die MSDN -Seite warnt davor, dass Sie diese Paare sehr nahe beieinander verwenden sollten, da sie alle E/A -Operationen, einschließlich des Ladens von DLLs, beeinflussen.
Ich habe diese seit einiger Zeit erfolgreich verwendet, bin aber jetzt auf eine scheinbar unmögliche Situation gestoßen. Die Funktion, die ich anrufen möchte, ist GetNamedSecurityInfo
was einen Dateipfad nimmt. Der Dateipfad befindet sich häufig im Ordner System32, sodass ich die Umleitung deaktivieren muss. Wenn ich jedoch die Umleitung deaktiviere, kehrt die Funktion zurück ERROR_BAD_EXE_FORMAT
.
Ich habe versucht, die DLL vorzuladen, in der sie sich befindet LoadLibrary(TEXT("Advapi32.dll"))
Aber das half nicht. Ich vermute, dass es eine andere DLL in sich lädt GetNamedSecurityInfo
Aber ich weiß nicht was.
Also hier ist jetzt die Frage. Was ist der beste Weg, um mit dieser Situation umzugehen? Sollte ich einfach alle möglichen DLLs vor der Verwendung vorlade Wow64DisableWow64FsRedirection
? Gibt es einen besseren Weg?
Vielen Dank.
Lösung
Es ist genug, dass Sie vorladen ntmarta.dll voranrufen Wow64DisableWow64FsRedirection
(LoadLibrary("ntmarta.dll")
). Auf diese Weise GetNamedSecurityInfo
/ SetNamedSecurityInfo
API wird nicht zurückkehren ERROR_BAD_EXE_FORMAT
bevor dieses Modul zuvor vorinstalliert ist (siehe ADVAPI32!AccProvpLoadMartaFunctions
Funktionscode).
Andere Tipps
In Ihrer Anwendung sollten Sie versuchen, auf das Verzeichnis %systemroot % sysnative anstelle von %Systemroot % System32 zuzugreifen. Dies deaktiviert die Notwendigkeit einer FS -Umleitung. Alle 32-Bit-Prozesse haben Zugriff auf dieses Pseudo-Verzeichnis. Es ist unsichtbar für 64-Bit-Prozesse.
32-Bit Cmd.exe, http://screencast.com/t/xbaqj2xizot
64-Bit Cmd.exe, http://screencast.com/t/t9ifd9ruc
Die Verwendung des systemativen Verzeichnisses ist der Umleitung von Dateisystemen aufgrund der Art der Probleme, auf die Sie gestoßen sind, vorzuziehen.