Décrit une exception.
Syntaxe
typedef struct _EXCEPTION_RECORD {
DWORD ExceptionCode;
DWORD ExceptionFlags;
struct _EXCEPTION_RECORD *ExceptionRecord;
PVOID ExceptionAddress;
DWORD NumberParameters;
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD;
Membres
ExceptionCode
Raison pour laquelle l’exception s’est produite. Il s’agit du code généré par une exception matérielle ou du code spécifié dans la fonction RaiseException pour une exception générée par logiciel. Les tableaux suivants décrivent les codes d’exception susceptibles de se produire en raison d’erreurs de programmation courantes.
Valeur |
Signification |
-
EXCEPTION_ACCESS_VIOLATION
|
Le thread a tenté de lire ou d’écrire dans une adresse virtuelle pour laquelle il ne dispose pas de l’accès approprié.
|
-
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
|
Le thread a tenté d’accéder à un élément de tableau hors limites et le matériel sous-jacent prend en charge la vérification des limites.
|
-
EXCEPTION_BREAKPOINT
|
Un point d’arrêt a été rencontré.
|
-
EXCEPTION_DATATYPE_MISALIGNMENT
|
Le thread a essayé de lire ou d’écrire des données mal alignées sur du matériel qui ne fournit pas d’alignement. Par exemple, les valeurs 16 bits doivent être alignées sur les limites de 2 octets ; Valeurs 32 bits sur les limites de 4 octets, et ainsi de suite.
|
-
EXCEPTION_FLT_DENORMAL_OPERAND
|
L’un des opérandes d’une opération à virgule flottante est dénormal. Une valeur dénormale est une valeur trop petite pour être représentée sous la forme d’une valeur à virgule flottante standard.
|
-
EXCEPTION_FLT_DIVIDE_BY_ZERO
|
Le thread a essayé de diviser une valeur à virgule flottante par un diviseur à virgule flottante de zéro.
|
-
EXCEPTION_FLT_INEXACT_RESULT
|
Le résultat d’une opération à virgule flottante ne peut pas être représenté exactement sous la forme d’une fraction décimale.
|
-
EXCEPTION_FLT_INVALID_OPERATION
|
Cette exception représente toute exception à virgule flottante non incluse dans cette liste.
|
-
EXCEPTION_FLT_OVERFLOW
|
L’exposant d’une opération à virgule flottante est supérieur à la magnitude autorisée par le type correspondant.
|
-
EXCEPTION_FLT_STACK_CHECK
|
La pile a débordé ou sous-flux à la suite d’une opération à virgule flottante.
|
-
EXCEPTION_FLT_UNDERFLOW
|
L’exposant d’une opération à virgule flottante est inférieur à la magnitude autorisée par le type correspondant.
|
-
EXCEPTION_ILLEGAL_INSTRUCTION
|
Le thread a essayé d’exécuter une instruction non valide.
|
-
EXCEPTION_IN_PAGE_ERROR
|
Le thread a essayé d’accéder à une page qui n’était pas présente et le système n’a pas pu charger la page. Par exemple, cette exception peut se produire si une connexion réseau est perdue lors de l’exécution d’un programme sur le réseau.
|
-
EXCEPTION_INT_DIVIDE_BY_ZERO
|
Le thread a essayé de diviser une valeur entière par un diviseur entier de zéro.
|
-
EXCEPTION_INT_OVERFLOW
|
Le résultat d’une opération entière a provoqué une exécution du bit le plus significatif du résultat.
|
-
EXCEPTION_INVALID_DISPOSITION
|
Un gestionnaire d’exceptions a retourné une disposition non valide au répartiteur d’exceptions. Les programmeurs qui utilisent un langage de haut niveau comme C ne doivent jamais rencontrer cette exception.
|
-
EXCEPTION_NONCONTINUABLE_EXCEPTION
|
Le thread a tenté de poursuivre l’exécution après qu’une exception non continue s’est produite.
|
-
EXCEPTION_PRIV_INSTRUCTION
|
Le thread a tenté d’exécuter une instruction dont l’opération n’est pas autorisée en mode machine actuel.
|
-
EXCEPTION_SINGLE_STEP
|
Une interruption de trace ou un autre mécanisme d’instruction unique a signalé qu’une instruction a été exécutée.
|
-
EXCEPTION_STACK_OVERFLOW
|
Le thread a utilisé sa pile.
|
Un autre code d’exception est susceptible de se produire lors du débogage des processus de console. Elle ne se produit pas en raison d’une erreur de programmation. Le code d’exception DBG_CONTROL_C se produit lorsque CTRL+C est entré dans un processus de console qui gère les signaux CTRL+C et est en cours de débogage. Ce code d’exception n’est pas destiné à être géré par les applications. Il est déclenché uniquement pour le bénéfice du débogueur et est déclenché uniquement lorsqu’un débogueur est attaché au processus de console.
ExceptionFlags
Ce membre contient zéro ou plusieurs indicateurs d’exception. Le tableau suivant décrit certains des indicateurs d’exception couramment observés. Les indicateurs d’exception non présents dans le tableau suivant doivent être traités comme réservés à une utilisation système.
Indicateur d’exception |
Signification |
-
EXCEPTION_NONCONTINUABLE
|
La présence de cet indicateur indique que l’exception est une exception non continuable, tandis que l’absence de cet indicateur indique que l’exception est une exception continuable.
Toute tentative de poursuite de l’exécution après une exception non continue provoque l’exception EXCEPTION_NONCONTINUABLE_EXCEPTION .
|
-
EXCEPTION_SOFTWARE_ORIGINATE
|
Cet indicateur est réservé à l’utilisation du système.
|
ExceptionRecord
Pointeur vers une structure de EXCEPTION_RECORD associée. Les enregistrements d’exception peuvent être chaînés pour fournir des informations supplémentaires lorsque des exceptions imbriquées se produisent.
ExceptionAddress
Adresse où l’exception s’est produite.
NumberParameters
Nombre de paramètres associés à l’exception. Il s’agit du nombre d’éléments définis dans le tableau ExceptionInformation .
ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
Tableau d’arguments supplémentaires qui décrivent l’exception. La fonction RaiseException peut spécifier ce tableau d’arguments. Pour la plupart des codes d’exception, les éléments du tableau ne sont pas définis. Le tableau suivant décrit les codes d’exception dont les éléments de tableau sont définis.
Code d'exception |
Signification |
-
EXCEPTION_ACCESS_VIOLATION
|
Le premier élément du tableau contient un indicateur en lecture-écriture qui indique le type d’opération qui a provoqué la violation d’accès. Si cette valeur est égale à zéro, le thread a tenté de lire les données inaccessibles. Si cette valeur est 1, le thread a tenté d’écrire dans une adresse inaccessible.
Si cette valeur est 8, le thread a provoqué une violation de la prévention de l’exécution des données (DEP) en mode utilisateur.
Le deuxième élément de tableau spécifie l’adresse virtuelle des données inaccessibles.
|
-
EXCEPTION_IN_PAGE_ERROR
|
Le premier élément du tableau contient un indicateur en lecture-écriture qui indique le type d’opération qui a provoqué la violation d’accès. Si cette valeur est égale à zéro, le thread a tenté de lire les données inaccessibles. Si cette valeur est 1, le thread a tenté d’écrire dans une adresse inaccessible.
Si cette valeur est 8, le thread a provoqué une violation de la prévention de l’exécution des données (DEP) en mode utilisateur.
Le deuxième élément de tableau spécifie l’adresse virtuelle des données inaccessibles.
Le troisième élément de tableau spécifie le code NTSTATUS sous-jacent qui a entraîné l’exception.
|
Pour permettre à un débogueur de déboguer une cible qui s’exécute sur une architecture différente (32 bits au lieu de 64 bits), utilisez l’une des formes explicites de cette structure.
typedef struct _EXCEPTION_RECORD32 {
DWORD ExceptionCode;
DWORD ExceptionFlags;
DWORD ExceptionRecord;
DWORD ExceptionAddress;
DWORD NumberParameters;
DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;
typedef struct _EXCEPTION_RECORD64 {
DWORD ExceptionCode;
DWORD ExceptionFlags;
DWORD64 ExceptionRecord;
DWORD64 ExceptionAddress;
DWORD NumberParameters;
DWORD __unusedAlignment;
DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
Configuration requise
|
|
Client minimal pris en charge |
Windows XP [applications de bureau | Applications UWP] |
Serveur minimal pris en charge |
Windows Server 2003 [applications de bureau | Applications UWP] |
En-tête |
winnt.h (inclure Windows.h) |
Voir aussi
EXCEPTION_DEBUG_INFO
EXCEPTION_POINTERS
GetExceptionInformation
RaiseException
UnhandledExceptionFilter