Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

Chiamate ricorsive alle funzioni di gestione della finestra esportate da USER32. DLL può restituire senza eseguire l'operazione richiesta e senza impostare un codice di errore. Ciò si verifica in genere nelle applicazioni con una gerarchia di annidamento di finestra. Tra i sintomi che si verifichi:

  • Le applicazioni con una gerarchia di annidamento di finestra non ridimensionare finestre figlio correttamente quando viene ridimensionata la finestra cornice. Windows vengono spostati e/o ridimensionato chiamando MoveWindow, SetWindowPos o DeferWindowPos.

  • Messaggi di finestra non vengono propagati a finestre padre o a finestre figlio, come previsto. DefWindowProc non vengono propagate correttamente messaggi alla finestra padre o finestre figlio della finestra di ricezione del messaggio.

  • Messaggi inviati a una finestra chiamata SendMessage, SendMessageTimeout o SendMessageCallback non vengono ricevuti tramite la finestra specificata.

Inoltre, le applicazioni che altrimenti funzionano normalmente possono inoltre verificarsi i sintomi descritti sopra, se WH_CALLWNDPROC o WH_CALLWNDPROCRET hook finestra sono impostate sul thread che possiedono le finestre dell'applicazione. Hook di finestra può essere impostato su un thread specifico o su tutti i thread dell'interfaccia utente chiamando la funzione SetWindowsHookEx.

Causa

Questo comportamento è il risultato di Windows non sarà in grado di crescere di stack del kernel del thread chiamante per eseguire l'operazione richiesta. A causa di stack del kernel aggiuntive gestisce le procedure necessarie per la x64 ambiente Windows, lo stack del kernel può essere utilizzato una maggiore velocità rispetto in un ambiente di Windows durante l'esecuzione ricorsiva di chiamate alle funzioni di gestione finestra esportati di x86 da USER32. DLL. Sebbene i sintomi descritti in questo articolo sono in genere si verificano in x64 piattaforme Windows, è possibile per le chiamate ricorsive di utilizzare un kernel dello stack su x86 piattaforme Windows.

Risoluzione

Le seguenti soluzioni possono essere utilizzate per risolvere il problema

  1. Ridimensionare finestre figlio durante la gestione di messaggi di finestra WM_WINDOWPOSCHANGED DefWindowProc invece passare il messaggio.

  2. Ridimensionare in modo asincrono le finestre figlio quando viene ridimensionata la finestra padre anziché il ridimensionamento delle finestre figlio durante l'elaborazione di WM_WINDOWPOSCHANGED o la finestra di messaggio WM_SIZE.

  3. Riprogettare l'interfaccia dell'applicazione per ridurre la profondità finestra nidificati.

Ulteriori informazioni

Parti del sottosistema Win32 vengono implementate in un driver di periferica in modalità kernel (WIN32K. SYS). Chiamate alle funzioni esportate da USER32. DLL per modificare lo stato di una finestra, tra cui le dimensioni e posizione, verrà richiamata in WIN32K. SYS per eseguire l'operazione richiesta. Funzioni che modificano lo stato di una finestra in genere come risultato messaggi finestra inviati alla finestra di modifica, in WIN32K. SYS rende un callout in modalità utente per chiamare la routine di finestra della finestra di modifica. Ad esempio, WIN32K. SYS invierà una finestra di una finestra di messaggio WM_WINDOWPOSCHANGING e una finestra di messaggio WM_WINDOWPOSCHANGED quando vengono modificata le dimensioni e/o la posizione della finestra chiamando la funzione SetWindowPos. DefWindowProc invierà la finestra specificata un messaggio WM_SIZE quando viene chiamato con un messaggio WM_WINDOWPOSCHANGED e le dimensioni della finestra sono cambiate. Le applicazioni in genere ridimensionare finestre figlio quando la finestra padre riceve un messaggio di finestra WM_WINDOWPOSCHANGED o WM_SIZE, che per le chiamate ricorsive in WIN32K. SYS per le gerarchie molto nidificate finestra. Le applicazioni che altrimenti funzionano normalmente anche dei sintomi descritti in questo articolo quando vengono impostati gli hook WH_CALLWNDPROC o WH_CALLWNDPROCRET sul thread del processo. Ciò è dovuto lo spazio dello stack del kernel aggiuntive che è utilizzato quando WIN32K. SYS gestisce la chiamata di routine di hook. La chiamata SendMessage per inviare un messaggio di finestra a una finestra proprietà del thread chiamante viene chiamato in genere la routine della finestra della finestra di ricezione del messaggio senza dover chiamare in WIN32K. SYS. Tuttavia, si chiamerà SendMessage in WIN32K. SYS, se sono presenti gli hook WH_CALLWNDPROC o WH_CALLWNDPROCRET esegue l'hook set nel thread chiamante, come WIN32K. SYS gestisce l'hook e handle di chiamata di routine di hook. Come già accennato, DefWindowProc invierà la finestra specificata un messaggio WM_SIZE quando viene chiamato con un messaggio WM_WINDOWPOSCHANGED e le dimensioni della finestra sono cambiate. Un hook WH_CALLWNDPROC o un WH_CALLWNDPROCRET causerà la chiamata SendMessage DefWindowProc rende la transizione alla modalità kernel per chiamare le routine di hook. Ridimensionamento finestre figlio quando la gestione dei messaggi di finestra WM_WINDOWPOSCHANGED i messaggi di finestra WM_SIZE ridurrà utilizzo dello stack del kernel, eliminando la necessità di SendMessage per passare alla modalità kernel in ordine di chiamare le routine di hook. Gli sviluppatori di applicazioni Windows Form che questo problema devono fare riferimento a di articolo KB 953934per ulteriori informazioni.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×