Exceptions matérielles
La plupart des exceptions standard identifiées par le système d'exploitation sont des exceptions définies par le matériel. Windows identifie quelques exceptions logicielles de bas niveau, mais celles-ci sont généralement gérées de façon optimale par le système d'exploitation.
Windows mappe les erreurs matérielles des différents processeurs aux codes d'exception figurant dans cette section. Dans certains cas, un processeur peut générer uniquement un sous-ensemble de ces exceptions. Windows prétraite les informations sur l'exception et émet le code d'exception approprié.
Les exceptions matérielles identifiées par Windows sont résumées dans le tableau suivant :
Code d'exception |
Raison de l'exception |
---|---|
STATUS_ACCESS_VIOLATION |
Lecture ou écriture à un emplacement mémoire inaccessible. |
STATUS_BREAKPOINT |
Rencontre d'un point d'arrêt défini par le matériel ; utilisé uniquement par les débogueurs. |
STATUS_DATATYPE_MISALIGNMENT |
Lecture ou écriture dans les données à une adresse qui n'est pas correctement alignée ; par exemple, des entités 16 bits doivent être alignées sur des limites de 2 octets. (Non applicable aux processeurs Intel 80x86.) |
STATUS_FLOAT_DIVIDE_BY_ZERO |
Division du type à virgule flottante par 0,0. |
STATUS_FLOAT_OVERFLOW |
Dépassement de l'exposant positif maximal du type à virgule flottante. |
STATUS_FLOAT_UNDERFLOW |
Dépassement de la grandeur de l'exposant négatif le plus bas du type à virgule flottante. |
STATUS_FLOATING_RESEVERED_OPERAND |
Utilisation d'un format à virgule flottante réservé (utilisation non valide de format). |
STATUS_ILLEGAL_INSTRUCTION |
Tentative d'exécution d'un code d'instruction non défini par le processeur. |
STATUS_PRIVILEGED_INSTRUCTION |
Exécution d'une instruction non autorisée dans le mode actuel de l'ordinateur. |
STATUS_INTEGER_DIVIDE_BY_ZERO |
Division d'un type entier par 0. |
STATUS_INTEGER_OVERFLOW |
Tentative d'une opération qui dépasse la plage de l'entier. |
STATUS_SINGLE_STEP |
Exécution d'une instruction en mode pas à pas ; utilisé uniquement par les débogueurs. |
Un grand nombre des exceptions répertoriées dans le tableau précédent sont destinées à être gérées par les débogueurs, le système d'exploitation ou un autre code de bas niveau. À l'exception des erreurs relatives aux entiers et aux nombres à virgule flottante, votre code ne doit pas gérer ces erreurs. Ainsi, vous devez généralement utiliser le filtre de gestion des exceptions pour ignorer les exceptions (valeur 0). Sinon, vous risquez d'empêcher les mécanismes de niveau inférieur de réagir de manière appropriée. Toutefois, vous pouvez prendre les précautions appropriées contre les conséquences possibles de ces erreurs de bas niveau en écrivant des gestionnaires de terminaison.