Entrar com a conta da Microsoft
Entrar ou criar uma conta.
Olá,
Selecionar uma conta diferente.
Você tem várias contas
Escolha a conta com a qual você deseja entrar.

Sintomas

Chamadas recursivas para funções do Gerenciador de janela exportadas pelo USER32. DLL pode retornar sem executar a operação solicitada e sem definir um código de erro. Isso normalmente ocorre em aplicativos com uma hierarquia de janela profundamente aninhados. Entre os sintomas podem ocorrer:

  • Aplicativos com uma hierarquia de janela profundamente aninhadas não redimensionar janelas filho corretamente quando a janela do quadro é redimensionada. Windows são movidos e/ou redimensionados chamando MoveWindow, SetWindowPos ou DeferWindowPos.

  • As mensagens de janela não são propagadas para windows pai ou janelas filho conforme o esperado. DefWindowProc não pode propagar com êxito as mensagens para a janela pai ou filho da janela de recebimento da mensagem.

  • As mensagens de janela é enviada para uma janela chamada SendMessage, SendMessageTimeout ou SendMessageCallback não são recebidas pela janela especificada.

Além disso, aplicativos que caso contrário funcionam normalmente também podem enfrentar os sintomas descritos acima se WH_CALLWNDPROC ou WH_CALLWNDPROCRET ganchos da janela são definidos em threads do aplicativo que possuem os windows. Ganchos da janela podem ser definidos em um segmento específico ou em todos os segmentos de interface do usuário chamando a função SetWindowsHookEx.

Causa

Esse comportamento é resultado do Windows sendo não é possível aumentar a pilha do kernel no thread de chamada para executar a operação solicitada. Devido ao tratamento procedimentos necessários no x64 de pilha de kernel adicional ambiente Windows, a pilha do kernel pode ser consumida em uma taxa mais rápida que em um ambiente Windows quando recursiva de fazer chamadas a funções do Gerenciador de janela exportado de x86 por USER32. DLL. Embora os sintomas descritos neste artigo têm maior probabilidade de ocorrer em x64 plataformas Windows, é possível que as chamadas recursivas consumir a pilha do kernel de um segmento em x86 plataformas Windows.

Resolução

As soluções a seguir podem ser usadas como solução alternativa para esse problema

  1. Redimensione janelas filho quando lidar com mensagens de janela WM_WINDOWPOSCHANGED, em vez disso, passar a mensagem para DefWindowProc.

  2. Redimensione janelas filho assincronamente quando a janela pai é redimensionada em vez de redimensionar janelas filho ao processar a WM_WINDOWPOSCHANGED ou a mensagem de janela WM_SIZE.

  3. Recrie a UI do aplicativo para reduzir a profundidade de janela aninhados.

Informações adicionais

Partes do subsistema Win32 são implementadas em um driver de dispositivo de modo kernel (WIN32K. SYS). Chamadas a funções exportadas pelo USER32. DLL para alterar o estado de uma janela, inclusive seu tamanho e posição, chamará WIN32K. SYS para executar a operação solicitada. Funções que modificam o estado de uma janela geralmente resultam em mensagens de janela que está sendo enviadas para a janela que está sendo modificada, onde WIN32K. SYS faz uma chamada de modo de usuário para chamar o procedimento de janela da janela está sendo modificado. Por exemplo, WIN32K. SYS enviará uma janela de uma mensagem de janela WM_WINDOWPOSCHANGING e uma WM_WINDOWPOSCHANGED janela quando o tamanho e/ou a posição da janela é modificada, chamando a função SetWindowPos. DefWindowProc enviará a janela especificada uma mensagem WM_SIZE quando chamado com uma mensagem WM_WINDOWPOSCHANGED e o tamanho da janela foi alterado. Aplicativos normalmente redimensionar janelas filho quando a janela pai recebe uma mensagem de janela WM_WINDOWPOSCHANGED ou WM_SIZE, que leva para fazer chamadas recursivas em WIN32K. SYS para hierarquias de janela profundamente aninhados. Aplicativos que caso contrário funcionam normalmente também podem enfrentar os sintomas descritos neste artigo quando ganchos WH_CALLWNDPROC ou WH_CALLWNDPROCRET estão definidos em segmentos no processo. Isso ocorre porque o espaço de pilha de kernel adicional é consumido quando WIN32K. SYS manipula chamando procedimentos do gancho. Chamar SendMessage para enviar uma mensagem da janela de uma janela do segmento de chamada normalmente chamará o procedimento de janela da janela de recebimento da mensagem sem precisar chamar WIN32K. SYS. No entanto, SendMessage chamará WIN32K. SYS se houver ganchos WH_CALLWNDPROC ou WH_CALLWNDPROCRET conecta conjunto no thread de chamada, como WIN32K. SYS gerencia os ganchos e as alças chamando procedimentos de gancho. Conforme observado acima, DefWindowProc enviará a janela especificada uma mensagem WM_SIZE quando chamado com uma mensagem WM_WINDOWPOSCHANGED e o tamanho da janela foi alterado. Um gancho WH_CALLWNDPROC ou um WH_CALLWNDPROCRET fará com que a chamada SendMessage DefWindowProc faz a transição para o modo de kernel para chamar procedimentos do gancho. Redimensionamento janelas filho quando lidar com mensagens de janela WM_WINDOWPOSCHANGED em vez de mensagens de janela WM_SIZE reduzirá uso de pilha de kernel, eliminando a necessidade de SendMessage para a transição para o modo kernel chamam procedimentos do gancho. Os desenvolvedores de aplicativos de formulários do Windows que estão enfrentando este problema consulte KB artigo 953934para obter informações adicionais.

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?
Ao pressionar enviar, seus comentários serão usados para aprimorar os produtos e serviços da Microsoft. Seu administrador de TI poderá coletar esses dados. Política de Privacidade.

Agradecemos seus comentários!

×