Page 1 of 1

Deaktivierung der WOW64 Redirection ungünstig

PostPosted: 30.01.2018, 18:09
by Dalai
Hallo mal wieder (bei der Häufigkeit meiner Vorschläge könnte man auf die Idee kommen, ich wäre ein - bad pun alert - "Vorschlagshammer" :mrgreen:)

Aufgrund der Thematik Fehler #0 beim Aufruf Update.cmd bin ich auf eine weitere ungünstige Implementation im UpdateInstaller aufmerksam geworden, die die Deaktivierung der WOW64 Redirection betrifft. Der derzeitige Aufruf führt zu keinem Fehler und funktioniert auch. Aber _WinAPI_GetLastError() nach dem DllCall() liefert Fehler 998 zurück:
Code: Select all
ERROR_NOACCESS
    998 (0x3E6)
    Invalid access to memory location.
Die Deklaration sagt, die Funktion Wow64DisableWow64FsRedirection() erwartet eigentlich einen Pointer (PVOID), der zur Speicherung von Informationen dient, die später von Wow64RevertWow64FsRedirection verwendet werden.

Lange Rede, kurzer Sinn: Ich hab mal in meinem AutoIt-Code gekramt, um zu schauen, wie ich das gelöst habe, und bin fündig geworden:
Code: Select all
local $Redirect, $pRedirect
$Redirect = DllStructCreate("uint")
if @error then Exit
$pRedirect = DllStructGetPtr($Redirect, 1)
DllCall("kernel32.dll", "bool", "Wow64DisableWow64FsRedirection", "ptr", $pRedirect)
; Do something
DllCall("kernel32.dll", "bool", "Wow64RevertWow64FsRedirection", "uint", DllStructGetData($Redirect, 1))
;--- release the memory for the variable
$Redirect = 0
Ist etwas mehr Code, aber bei dem liefert _WinAPI_GetLastError() immer 0 zurück, und natürlich hat er auch die gewünschte Wirkung.

Grüße
Dalai