WoW64DisableWow64FSReDirection und GetNamedSecurityInfo - Unwahrscheinlich error_bad_exe_format?

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

  •  16-10-2019
  •  | 
  •  

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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top