Problembeschreibung

Rekursive Aufrufe von USER32 exportierten Fenster-Manager-Funktionen. DLL kann ohne Ausführen des angeforderten Vorgangs und einen Fehlercode zurückgeben. Dies tritt normalerweise bei einer tief geschachtelten Fensterhierarchie. Unter die Symptome auftreten:

  • Mit einer tief geschachtelten Fensterhierarchie nicht untergeordneten Fenster Größe ordnungsgemäß beim Ändern der Größe des Rahmenfensters. Windows werden verschoben bzw. MoveWindow, SetWindowPos oder DeferWindowPos geändert.

  • Fenster-Nachrichten werden nicht auf übergeordnete Windows oder untergeordnete Fenster als erwartet weitergegeben. DefWindowProc kann Nachrichten an übergeordneten Fensters oder untergeordnete Fenster des Fensters die Nachricht nicht erfolgreich übertragen.

  • Fenster Nachrichten an ein Fenster durch Aufrufen von SendMessage SendMessageTimeout oder SendMessageCallback werden durch das angegebene Fenster nicht empfangen.

Darüber hinaus können sonst gewohnt Applikationen auch wenn WH_CALLWNDPROC oder WH_CALLWNDPROCRET die Hooks für Threads in der Anwendung festgelegt werden, bei denen die Fenster oben beschriebenen Symptome auftreten. Die Hooks können auf einen bestimmten Thread oder alle Benutzeroberflächenthreads Anwendung Funktion festgelegt werden.

Ursache

Dies ist ein Ergebnis von Windows nicht weiter Kernelstapel des aufrufenden Threads, um den angeforderten Vorgang durchzuführen. Durch zusätzliche Kernelstapel Handhabung in die X64 erforderlichen Windows-Umgebung von USER32 Kernelstapel schneller als in einer Windows-Umgebung Managerfunktionen machen rekursiven Aufruf exportiert X86 verwendet werden kann. DLL Symptome in diesem Artikel beschrieben sind wahrscheinlicher, in X64 Windows-Plattformen, kann rekursive Aufrufe Kernelstapel eines Threads in X86 verwenden Windows-Plattformen.

Fehlerbehebung

Folgendes können zur Umgehung des Problems

  1. Fenstergröße Kind beim WM_WINDOWPOSCHANGED Fensternachrichten die Nachricht stattdessen an DefWindowProc übergeben.

  2. Asynchron Fenstergröße Kind beim Ändern der Fenstergröße übergeordnete statt untergeordnete Fenstergröße beim Verarbeiten der WM_WINDOWPOSCHANGED oder die WM_SIZE-Meldung.

  3. Neugestaltung der Benutzeroberfläche der Anwendung zu fenstertiefe geschachtelte.

Weitere Informationen

Teile des Win32-Subsystems werden in ein Kernelmodus-Gerätetreiber (WIN32K. SYS). Aufrufe von USER32 exportierten Funktionen. DLL zum Ändern des Status eines Fensters, dessen Größe und Position, einschließlich wird WIN32K aufrufen. SYS, die angeforderte Operation durchzuführen. Funktionen, die den Zustand eines Fensters in der Regel ändern führen Fensternachrichten an das Fenster geändert, wobei WIN32K. SYS ist eine Legende im Benutzermodus, rufen Sie die Fensterprozedur des Fensters geändert wird. Z. B. WIN32K. SYS sendet ein eine Meldung WM_WINDOWPOSCHANGING und eine WM_WINDOWPOSCHANGED Meldung Wenn Größe und Position des Fensters durch Aufrufen der Funktion SetWindowPos geändert werden. DefWindowProc sendet dem angegebenen Fenster eine WM_SIZE-Meldung als mit einer WM_WINDOWPOSCHANGED-Meldung und die Größe des Fensters geändert hat. Applikationen Größe normalerweise untergeordnete Fenster empfängt das übergeordnete Fenster eine Fensternachricht WM_WINDOWPOSCHANGED oder WM_SIZE führt rekursive Aufrufe in WIN32K. SYS für Fenster tief verschachtelten Hierarchien. Andernfalls normal Applikationen können auch bei WH_CALLWNDPROC oder WH_CALLWNDPROCRET-Hooks auf Threads im Prozess werden in diesem Artikel beschriebenen Symptome auftreten. Liegt der weitere Stapel Speicherplatz verbraucht bei WIN32K. SYS behandelt die Hook-Prozeduren aufrufen. SendMessage zum Senden einer Meldung in ein Fenster im Besitz des aufrufenden Threads aufrufen rufen üblicherweise die Fensterprozedur des Fensters Meldung ohne WIN32K aufrufen. SYS. Allerdings wird SendMessage WIN32K aufrufen. SYS Wenn WH_CALLWNDPROC Haken oder WH_CALLWNDPROCRET lockt Satz der aufrufende Thread als WIN32K. SYS verwaltet die Hooks und Aufrufen von Hook-Prozeduren behandelt. Wie bereits erwähnt, wird DefWindowProc dem angegebenen Fenster WM_SIZE-Meldung mit einer WM_WINDOWPOSCHANGED-Meldung als und die Größe des Fensters geändert hat. WH_CALLWNDPROC-Hook oder einem WH_CALLWNDPROCRET verursacht SendMessage-Aufruf DefWindowProc wird für den Übergang in den Kernelmodus, um die Hook-Prozeduren aufrufen. Größe Kind beim WM_WINDOWPOSCHANGED Fensternachrichten statt WM_SIZE Fensternachrichten behandeln Kernel Stapel reduziert wird überflüssig SendMessage für den Übergang in den Kernelmodus nacheinander aufgerufen werden Hook-Prozeduren. Entwickler von Windows Forms-Anwendung, die dieses Problem auftreten sollte auf KB-Artikel Weitere Informationen beziehen.

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Übersetzungsqualität?

Was hat Ihre Erfahrung beeinflusst?

Haben Sie weiteres Feedback? (Optional)

Vielen Dank für Ihr Feedback!

×