Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando si verifica un'eccezione hardware o software, il processore arresta l'esecuzione nel punto in cui si è verificata l'eccezione e trasferisce il controllo al sistema. In primo luogo, il sistema salva sia lo stato della macchina del thread corrente che le informazioni che descrivono l'eccezione. Il sistema tenta quindi di trovare un gestore eccezioni per gestire l'eccezione.
Lo stato del computer del thread in cui si è verificata l'eccezione viene salvato in una strutturaCONTEXT. Queste informazioni (denominate record di contesto ) consentono al sistema di continuare l'esecuzione al momento dell'eccezione se l'eccezione viene gestita correttamente. La descrizione dell'eccezione (denominata record di eccezione ) viene salvata in una struttura EXCEPTION_RECORD. Poiché archivia le informazioni dipendenti dal computer del record di contesto separatamente dalle informazioni indipendenti dal computer del record di eccezione, il meccanismo di gestione delle eccezioni è portabile in piattaforme diverse.
Le informazioni nel contesto e nei record delle eccezioni sono disponibili tramite la funzione GetExceptionInformation e possono essere rese disponibili a tutti i gestori di eccezioni eseguiti in seguito all'eccezione. Il record di eccezione include le informazioni seguenti.
- Codice eccezione che identifica il tipo di eccezione.
- Flag che indicano se l'eccezione è continuabile. Qualsiasi tentativo di continuare l'esecuzione dopo un'eccezione non contigua genera un'altra eccezione.
- Puntatore a un altro record di eccezione. Ciò facilita la creazione di un elenco collegato di eccezioni se si verificano eccezioni annidate.
- Indirizzo in cui si è verificata l'eccezione.
- Matrice di argomenti che forniscono informazioni aggiuntive sull'eccezione.
Quando si verifica un'eccezione nel codice in modalità utente, il sistema usa l'ordine di ricerca seguente per trovare un gestore eccezioni:
- Se il processo viene sottoposto a debug, il sistema invia una notifica al debugger. Per altre informazioni, vedere Gestione delle eccezioni del debugger .
- Se il processo non viene sottoposto a debug o se il debugger associato non gestisce l'eccezione, il sistema tenta di individuare un gestore eccezioni basato su frame eseguendo una ricerca negli stack frame del thread in cui si è verificata l'eccezione. Il sistema cerca prima di tutto lo stack frame corrente, quindi cerca i frame dello stack precedenti in ordine inverso.
- Se non è possibile trovare alcun gestore basato su frame o nessun gestore basato su frame gestisce l'eccezione, ma il processo viene sottoposto a debug, il sistema invia una seconda notifica al debugger.
- Se il processo non viene sottoposto a debug o se il debugger associato non gestisce l'eccezione, il sistema fornisce la gestione predefinita in base al tipo di eccezione. Per la maggior parte delle eccezioni, l'azione predefinita consiste nel chiamare la funzioneexitprocess.
Quando si verifica un'eccezione nel codice in modalità kernel, il sistema cerca gli stack frame dello stack del kernel nel tentativo di individuare un gestore eccezioni. Se un gestore non può essere individuato o nessun gestore gestisce l'eccezione, il sistema viene arrestato come se fosse stata chiamata la funzioneExitWindows.