Deaktivierung der WOW64 Redirection ungünstig

Re: Deaktivierung der WOW64 Redirection ungünstig

Postby boco » 23.03.2018, 01:59

[OT]

Ich versteh irgendwie nur Bahnhof. :)

Meine letzten Programmieraktionen waren mit Borland Pascal 7 auf MS-DOS. :D
Aber wenn es hilft, WOU besser zu machen, dann nur weiter. :mrgreen:

[/OT]
Microsoft update catalog: http://catalog.update.microsoft.com/v7/site/
Windows Install media download: https://support.microsoft.com/en-us/help/15088/windows-create-installation-media
boco
 
Posts: 1985
Joined: 24.11.2009, 18:00
Location: Germany

Re: Deaktivierung der WOW64 Redirection ungünstig

Postby WSUSUpdateAdmin » 23.03.2018, 13:17

Moin!

Dalai wrote:Soweit war mir das schon klar. Aber vorher wird ja im DllStructCreate schon ein ptr erzeugt, der nachfolgend als ptr* benutzt wird. Gesamt also ein Pointer auf einen Pointer auf einen Pointer, oder fügt DllStructGetPtr gar einen weiteren Pointer hinzu? Oder verstehe ich was falsch?

Es ist so:
DllStructCreate erzeugt eine Struktur, welcher Art und Größe auch immer.
Hier wird ein "ptr" erzeugt; in reinen 32-Bit-Umgebungen könnte man auch "INT", "BOOL", "LONG", "UINT", "DWORD" etc. pp. angeben, alles wurscht, weil alles 32 Bit groß.
Dann holt man sich mit DllStructGetPtr einen Zeiger auf die Struktur, in diesem Fall also einen Zeiger auf einen Zeiger, und übergibt Wow64DisableWow64FsRedirection damit, was es will, nämlich einen void**, was man "DllCall" durch die Angabe von "ptr*" als vierten Parameter auch kenntlich macht, vgl. AutoIt-Doku: "Add * to the end of another type to pass it by reference. For example "int*" passes a pointer to an "int" type."
Beim Aufruf von Wow64RevertWow64FsRedirection, sagt man "DllCall" dann nur noch "ptr" und übergibt folgerichtig $pRedirect und nicht DllStructGetPtr($pRedirect), weil die Funktion einen PVOID erwartet, also einen void* und nicht einen void**.

Dalai wrote:Ich hasse Pointer. Ich bin eher in Delphi zuhause, wo man sich darum im Normalfall nicht kümmern muss.

Warum?
Streiche "Pointer", setze "Adresse (von)".
Ich hab' auch mit TurboPascal und Delphi angefangen *seufz*, und der Grund dafür, dass man das Pointer-Konzept dort (vermeintlich) in der Regel nicht braucht, liegt einzig und allein in der Syntax von Funktions- und Prozeduraufrufen:
- "normaler" Parameter = "call by value"
- VAR-Parameter = "call by reference" = Pointer!
:)

Viele Grüße
Torsten
WSUSUpdateAdmin
Administrator
 
Posts: 2116
Joined: 07.07.2009, 15:38

Re: Deaktivierung der WOW64 Redirection ungünstig

Postby Dalai » 23.03.2018, 16:33

WSUSUpdateAdmin wrote:Beim Aufruf von Wow64RevertWow64FsRedirection, sagt man "DllCall" dann nur noch "ptr" und übergibt folgerichtig $pRedirect und nicht DllStructGetPtr($pRedirect), weil die Funktion einen PVOID erwartet, also einen void* und nicht einen void**.

Laut Deklaration erwarten aber beide Funktionen einen PVOID. Daher müsste doch ein ptr in beiden Fällen genügen. Mein Testskript jedenfalls kommt damit zurecht und GetLastError liefert dort ebenfalls 0; OK, ptr* funktioniert ebenfalls, aber irgendwie ist mir das ein Zeiger zuviel :).

Warum?

Ich bin zu wenig Programmierer, um die ganze Geschichte Referenzierung/Dereferenzierung zu verstehen. In C++ braucht man den Krempel bei simplen Funktionsaufrufen, bei Delphi im Normalfall eben nicht, weil sich die Sprache selbst bzw. der Compiler darum kümmert. Objekte in Delphi sind intern auch Zeiger, aber als Programmierer sieht man sie nicht als solche - daher finde ich Delphi einfacher.

Grüße
Dalai
Dalai
 
Posts: 609
Joined: 12.07.2016, 22:00

Re: Deaktivierung der WOW64 Redirection ungünstig

Postby WSUSUpdateAdmin » 23.03.2018, 17:36

Dalai wrote:Laut Deklaration erwarten aber beide Funktionen einen PVOID. [...]

Nein!

Code: Select all
BOOL WINAPI Wow64DisableWow64FsRedirection(
  _Out_ PVOID *OldValue
);

ist PVOID *, also void**,

Code: Select all
BOOL WINAPI Wow64RevertWow64FsRedirection(
  _In_ PVOID OldValue
);

ist PVOID, also void*.

Schönes Wochenende,
Torsten
WSUSUpdateAdmin
Administrator
 
Posts: 2116
Joined: 07.07.2009, 15:38

Re: Deaktivierung der WOW64 Redirection ungünstig

Postby Dalai » 23.03.2018, 17:49

Öhm, ja. Ein weiterer Grund, warum ich C++ (und Pointer) hasse: die kleinen Sternchen sind viel zu leicht zu übersehen. Genau das ist hier passiert :oops:. Also passt alles. Wobei mich wundert, dass auch ptr an allen Stellen funktioniert...

Grüße
Dalai
Dalai
 
Posts: 609
Joined: 12.07.2016, 22:00

Previous

Return to Anregungen / Suggestions

Who is online

Users browsing this forum: No registered users and 4 guests

cron