Rekursiivne kõned akna funktsioonid ei pruugi ootamatult

Sümptomid

Rekursiivne avab akna mäluhalduri funktsioonidele USER32 eksportida. DLL võib tagastada ilma nõutud toimingu sooritamist ja milles tõrkekood. Tavaliselt juhtub see siis rakendustes, sügavalt pesastatud aknas hierarhia. Vahel probleemidega võite kokku puutuda.

  • Sügavalt pesastatud aknas hierarhia rakendusi ei õnnestu suurust lapse windows õigesti, kui kaadri akna suuruse. Windows on teisaldatud ja/või MoveWindow, SetWindowPos või DeferWindowPos muudetakse.

  • Akna sõnumeid ei levi, vanem Windowsi või lapse windows ootuspäraselt. DefWindowProc võib edukalt levitada sõnumite vanem aken või lapse windows akna tõrketeateid.

  • Akna sõnumeid saata aknasse helistaja SendMessage, SendMessageTimeout või SendMessageCallback ei saanud määratud akna.

Lisaks rakendusi, mis muidu talitlus võib tekkida ka juhul, kui WH_CALLWNDPROC või WH_CALLWNDPROCRET aken konksud on teemad rakenduse, mis kuulub windows eespool kirjeldatud sümptomid. Akna konksud saab määrata kindla teema või kõik Kasutajaliidese Teemad SetWindowsHookEx funktsiooni.

Põhjus

Selline käitumine on tingitud Windows ei saa kasvada kutsuv jutulõnga tuuma pinu selleks, et taotletud toimingut sooritada. Tõttu täiendavaid tuuma pinu käsitsemise vajalikud x64 protseduurid Windows keskkonnas, tuuma pinu võib tarbida kiiremini kui x x86 eksporditud Windows keskkonnas, kui tegemist rekursiivne kutsub akna mäluhalduri funktsioonidele, USER32. DLL. Kuigi selles artiklis kirjeldatud sümptomite tõenäolisemalt ilmneda x64 Windows platvormil, siis on võimalik tarbida saanud teemat tuuma pinu sisse x86 rekursiivne kõne Windows platvormidel.

Lahendus

Selle probleemi lahendamiseks saab kasutada järgmisi lahendusi

  1. Laste akende suuruse muutmiseks WM_WINDOWPOSCHANGED akna sõnumite hoopis kulgeb sõnumi DefWindowProc käsitsemisel.

  2. Asünkroonselt suurust muuta lapse windows, kui peamise akna suuruse asemel on WM_WINDOWPOSCHANGED või WM_SIZE aken sõnumi töötlemisel ilmnes laste akende suuruse muutmine.

  3. Plaani rakenduse Kasutajaliidese pesastatud akna sügavus vähendamiseks.

Lisateave

Osad Win32 alamsüsteemi rakendatakse tuumrežiimi seadmedraiver (WIN32K. SYS). Kõned USER32 eksporditud funktsioone. DLL-i muuta akna, sealhulgas selle suurust ja asukohta, helistab sisse WIN32K. SYS taotletud toimingut sooritada. Funktsioonid, mida muuta akna tavaliselt tulemuseks akna sõnumite saatmise aken on muudetud, kus WIN32K. SYS teeb kasutajarežiimi viikteksti helistada akna protseduuri muutmise aken. Näiteks WIN32K. SYS saadab aken WM_WINDOWPOSCHANGING akna teade ja WM_WINDOWPOSCHANGED aknas kuvatakse kui suurus ja/või akna asukoha SetWindowPos funktsiooni. DefWindowProc saatmiseks määratud akna WM_SIZE teade sõnumiga WM_WINDOWPOSCHANGED kutsumisel ja akna suurust on muudetud. Rakenduste suurust tavaliselt lapse windows kui vanem aken saab WM_WINDOWPOSCHANGED või WM_SIZE aken kuvatakse, mis viib WIN32K rekursiivne kõne teha. SYS sügavalt pesastatud akna hierarhiate jaoks. Rakendused, mis muidu talitlus võib tekkida ka WH_CALLWNDPROC või WH_CALLWNDPROCRET konksud määramisel Teemad protsessi selles artiklis kirjeldatud sümptomite. See on täiendav tuuma pinuruumi, mis on tingitud tarbida kui WIN32K. SYS käsitleb helistada konks protseduure. Helistaja SendMessage omanikuks kutsuv jutulõnga akna akna sõnumi saatmiseks tavaliselt kõne teate, ilma et kahtluse WIN32K akna akna protseduuri. SYS. Kuid SendMessage helistab sisse WIN32K. SYS kui WH_CALLWNDPROC konksud või WH_CALLWNDPROCRET konksud komplekt kutsuv teemat nagu WIN32K. SYS haldab konksud ja pidemed helistada konks protseduure. Nagu eespool märgitud, DefWindowProc on määratud akna WM_SIZE sõnumi saatmiseks sõnumiga WM_WINDOWPOSCHANGED kutsumisel ja akna suurust on muudetud. WH_CALLWNDPROC konks või mõne WH_CALLWNDPROCRET põhjustab SendMessage kõne DefWindowProc teeb, et tuumrežiimis ülemineku selleks, et helistada konks protseduure. Suuruse muutmine lapse windows kui WM_WINDOWPOSCHANGED akna sõnumite asemel WM_SIZE akna sõnumite käsitsemine vähendada tuuma pinu kasutus, et tuumrežiimis järjest ülemineku SendMessage vajaduse helistage konks protseduurid. Windowsi vormide rakenduste, et see probleem tekib arendajad tuleks viidata KB artiklis lisateabe saamiseks.

Kas vajate veel abi?

Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liitu Microsofti Insideri programmis osalejad

Kas sellest teabest oli abi?

Täname tagasiside eest!

Täname tagasiside eest! Tundub, et võiksime teid kokku viia ühega meie Office'i tugiagentidest, kes aitab teil probleemi lahendada.

×