Ich verwende Umleitungen auf meinem Projekt, um den GL-Kontext eines Fensters zu speichern.Umwege stürzt mit wglMakeCurrent ab
So habe ich das Code-Beispiel gefolgt, die mit Detours 3.0 Express Edition kommt:
static BOOL (WINAPI * trueWglMakeCurrent)(HDC, HGLRC) = wglMakeCurrent;
BOOL WINAPI hookedWglMakeCurrent(HDC hdc, HGLRC hglrc);
BOOL WINAPI hookedWglMakeCurrent(HDC hdc, HGLRC hglrc)
{
wContext = hglrc;
wDC = hdc;
return trueWglMakeCurrent(hdc, hglrc); //CRASH HERE
//return TRUE;
}
Aber es stürzt ab, wenn die ursprüngliche WGL-Methode aufgerufen wird. Wenn ich diese Rückkehr zu return TRUE
ändere, stürzt es nicht ab. Aber es wird offensichtlich auch nichts machen.
hdc
und hglrc
haben gültige Adressen und sie entsprechen wahrscheinlich dem GL Kontext, den ich brauche, da dies direkt nach der gewünschten Fenstererstellung aufgerufen wird.
EDIT
Es stürzt nicht, wenn die gleiche Methode auf andere OpenGL-Funktionen der Anwendung, z.B. SwapBuffers, glFinish usw.
Im Falle eines isolierten Tests, in dem ich einfach meine DLL lade und die wglMakeCurrent
ausführe funktioniert es.
Im Falle der Injektion meiner DLL in eine Anwendung und dann wglMakeCurrent
für diese Anwendung, verursacht Umleitungen eine unendliche Rekursion auf dem trueWglMakeCurrent
Aufruf.
Versuchen Sie es unter einem Debugger ausgeführt und einen Aufruf Stapel zum Zeitpunkt des Absturzes. Dann posten Sie den Call-Stack hier. –
@MarcSherman Ich habe mehr getestet und herausgefunden, dass es wirklich eine unendliche Rekursion ist, die die Software zum Absturz bringt. Werfen Sie einen Blick auf meine neue Edit – KuramaYoko
Meine Vermutung ist, dass Ihr Hook die unendliche Rekursion durch den Aufruf von TrueWglMakeCurrent verursacht. Das Zerlegen von trueWglMakeCurrent (für ex in windbg 'uf trueWglMakeCurrent') sollte einen JMP zu hookedWglMakeCurrent als die erste Anweisung anzeigen. Ich glaube, dass die Detours-API, die den Hook installiert, auch einen Funktionszeiger zurückgibt, den Ihr Hook aufrufen sollte, wenn er die echte Implementierung aufrufen möchte. –