Přihlásit se pomocí účtu Microsoft
Přihlaste se nebo si vytvořte účet.
Dobrý den,
Vyberte jiný účet.
Máte více účtů.
Zvolte účet, pomocí kterého se chcete přihlásit.

Příznaky

Rekurzivní volání funkcí správce okno vyváží USER32. Knihovna DLL může vrátit bez provedení požadované operace a bez nastavení kódu chyby. Obvykle k tomu dochází v aplikacích s hluboce vnořenými okno hierarchie. Mezi příznaky může nastat:

  • Aplikace s hluboce vnořenými okno hierarchie selhání správně velikost podřízených oken při změně velikosti okna rámce. Windows jsou přesunuty nebo změně velikosti pomocí volání MoveWindow, SetWindowPos nebo DeferWindowPos.

  • Okno zprávy nebyly šířeny windows nadřazené nebo podřízené windows podle očekávání. DefWindowProc nemusí úspěšně šířit zprávy nadřazené okno nebo podřízených oken okna příjemcem zprávy.

  • Okno zprávy odeslané do okna pomocí volání SendMessage SendMessageTimeout nebo SendMessageCallback nejsou přijímány zadané okno.

Navíc aplikace, které jinak fungovat normálně také zaznamenat příznaky popsané výše, pokud jsou háky WH_CALLWNDPROC nebo WH_CALLWNDPROCRET okno na podprocesy v aplikaci, které vlastní windows. Zavěšení okna lze nastavit na konkrétní vlákno nebo všechny podprocesy UI voláním funkce SetWindowsHookEx.

Příčina

Toto chování je výsledek systému Windows není schopen dosáhnout zásobníku jádra podprocesu volajícího chcete-li provést požadovanou operaci. Kvůli zásobníku jádra Další postup x64 zpracování prostředí systému Windows, v zásobníku jádra může být zaplněno vyšší rychlostí než v x86 prostředí systému Windows při provádění rekurzivního volání funkcí správce okno Exportovat USER32. DLL. Přestože příznaky popsané v tomto článku jsou pravděpodobnější v x64 platformách systému Windows, je možné pro rekurzivní volání spotřebovat zásobníku jádra podprocesu na x86 platformách systému Windows.

Řešení

Chcete-li vyřešit tento problém lze použít následující řešení.

  1. Velikost podřízených oken při zpracování zpráv okno WM_WINDOWPOSCHANGED namísto předání zprávy DefWindowProc.

  2. Asynchronně velikost podřízených oken při změně velikosti nadřazeného okna namísto velikosti podřízených oken při zpracování WM_WINDOWPOSCHANGED nebo WM_SIZE okno zprávy.

  3. Změnit návrh aplikace uživatelského rozhraní pro snížení hloubky vnořená okna.

Další informace

Části podsystému Win32, které jsou implementovány v ovladač zařízení režimu jádra (WIN32K. (SYS). Volání funkcí vyváží USER32. Knihovny DLL Chcete-li změnit stav okna, včetně jeho velikosti a umístění, bude volání do WIN32K. SYS k provedení požadované operace. Funkce, které změnit stav okna obvykle za následek okno zprávy do okna upravována, kde WIN32K. SYS umožňuje volat proceduru okna okna upravuje popisek uživatelského režimu. Například WIN32K. SYS bude odesílat okno zpráv WM_WINDOWPOSCHANGING okna a okno WM_WINDOWPOSCHANGED zprávy změně velikosti a umístění okna voláním funkce SetWindowPos. DefWindowProc budou zadané okno Odeslat zprávu WM_SIZE při WM_WINDOWPOSCHANGED zprávy a změnila velikost okna. Aplikace obvykle velikost podřízených oken při nadřazené okno obdrží WM_WINDOWPOSCHANGED nebo WM_SIZE zprávy okna, která vede k vytváření rekurzivní volání do WIN32K. SYS pro okna v hluboce vnořených hierarchiích. Aplikace, které jinak fungovat normálně také zaznamenat příznaky popsané v tomto článku, pokud jsou háky WH_CALLWNDPROC nebo WH_CALLWNDPROCRET nastavena pro podprocesy v rámci procesu. Je to způsobeno prostor zásobníku jádra Další, který je spotřebován při WIN32K. SYS zpracovává volání procedury zavěšení. Volání SendMessage odeslat zprávy okna do okna vlastněných volající vlákno obvykle zavolá proceduru okna okna příjemcem zprávy bez nutnosti volání do WIN32K. SYS. Však bude SendMessage volání do WIN32K. SYS, pokud jsou háky WH_CALLWNDPROC nebo WH_CALLWNDPROCRET zavěsí sadu ve volajícím vlákně jako WIN32K. SYS spravuje háky a zpracovává volání procedury zavěšení. Jak bylo uvedeno výše, DefWindowProc odešle zadané okno WM_SIZE zprávu při WM_WINDOWPOSCHANGED zprávy a změnila velikost okna. Zavěšení WH_CALLWNDPROC nebo WH_CALLWNDPROCRET způsobí volání SendMessage umožňuje DefWindowProc přechod do režimu jádra pro volání procedury zavěšení. Změny velikosti podřízených oken při zpracování zpráv okno WM_WINDOWPOSCHANGED namísto WM_SIZE okno zpráv sníží využití zásobníku jádra eliminací potřebu SendMessage k přechodu do režimu jádra v pořadí volání procedury zavěšení. Vývojáři aplikací model Windows Forms, které k tomuto problému dochází by naleznete v článku KB 953934Další informace.

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?
Po stisknutí tlačítka pro odeslání se vaše zpětná vazba použije k vylepšování produktů a služeb Microsoftu. Váš správce IT bude moci tato data shromažďovat. Prohlášení o zásadách ochrany osobních údajů.

Děkujeme vám za zpětnou vazbu.

×