Accueil🇫🇷Chercher

HRESULT

Dans le domaine de la programmation informatique, le HRESULT est un type de données utilisé dans les systèmes d'exploitation Windows, ainsi que dans l'ancien système d'exploitation IBM/Microsoft OS/2, pour représenter des états d'erreur et d'avertissement.

Le but original des HRESULTs était de disposer de plages de codes d'erreur formellement définies, pour un usage public et interne à Microsoft, qui permette d'éviter les collisions entre codes d'erreur dans les différents sous-systèmes du système d'exploitation OS/2.

Les HRESULTs sont des codes d'erreur numériques. Les différents bits dans un HRESULT encodent des informations concernant la nature du code d'erreur, ainsi que sa provenance.

Les codes d'erreur HRESULT sont les plus gĂ©nĂ©ralement rencontrĂ©s dans le domaine de la programmation COM, oĂą ils forment la base pour une gestion normalisĂ©e des erreurs.

Le format HRESULT

Une valeur HRESULT est composée de 32 bits divisée en trois domaines, le code de sévérité indique si la valeur de retour est une information, un avertissement ou une erreur. Le code d'établissement identifie la partie du système responsable de l'erreur. Le code d'erreur est un numéro unique qui est chargé de représenter l'exception. Chaque exception est associée à un HRESULT.

L'établissement est soit le nom de l'établissement soit un identifiant unique, la sévérité est composée d'une seule lettre, S ou E, qui indique si l'appel de la fonction a réussi (S) ou produit un message d'erreur (E), et la raison est un identificateur qui décrit la signification du code. Par exemple, le code de statut STG_E_FILENOTFOUND indique qu'une erreur liée au stockage s'est produite, plus précisément qu'un fichier demandé n'existe pas. Il convient de garder à l'esprit qu'une valeur HRESULT peut également être affichée sous la forme d'un entier non signé, au format hexadécimal[1].

Les HRESULTs sont organisés comme suit[2] :

Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Champ S R C N X Etablissement Code

DĂ©tail du format

  • S - SĂ©vĂ©ritĂ© - indique un succès ou un Ă©chec
    • 0 :Succès
    • 1 : Échec
  • R - partie rĂ©servĂ©e du code d'Ă©tablissement, correspond au second bit de sĂ©vĂ©ritĂ© NT.
    • 1 : DĂ©faillance grave
  • C - Client. Ce bit permet d'indiquer si la valeur est dĂ©finie par un client, ou par Microsoft.
    • 0 : DĂ©fini par Microsoft
    • 1 : DĂ©fini par un client
  • N - partie rĂ©servĂ©e du code d'Ă©tablissement. UtilisĂ© pour indiquer une valeur d'Ă©tat NT liĂ©e.
  • X - partie rĂ©servĂ©e du code d'Ă©tablissement. RĂ©servĂ© pour un usage interne. UtilisĂ© pour indiquer que la valeur HRESULT n'est pas une valeur d'Ă©tat, mais un identifiant de message pour afficher du texte.
  • Établissement - indique le service du système qui est responsable de l'erreur. Des exemples de codes d'Ă©tablissement sont indiquĂ©s ci-dessous (pour la liste complète, voir [2]).
    • 1 - RPC
    • 2 - Dispatch (COM dispatch)
    • 3 - Stockage (OLE stockage)
    • 4 - ITF (Interface de gestion COM/OLE)
    • 7 - Win32 (codes d'erreurs Win32)
    • 8 - Windows
    • 9 - SSPI
    • 10 - ContrĂ´le
    • 11 - CERT (Certificat client ou serveur)
    • ...
  • Code - est le code d'Ă©tat de l'Ă©tablissement

Comment fonctionnent les HRESULTs

Un HRESULT est un descripteur de rĂ©sultat opaque[3] dĂ©fini Ă  zĂ©ro ou plus en cas de succès, et nĂ©gatif pour un Ă©chec. En gĂ©nĂ©ral, les fonctions renvoient le HRESULT S_OK (qui est Ă©gal Ă  zĂ©ro) en cas de succès. Mais, dans de rares circonstances, les fonctions peuvent renvoyer des codes de rĂ©ussite avec d'autres informations, par exemple S_FALSE=0x01.

Les HRESULTs sont gĂ©nĂ©ralement affichĂ©s en tant que valeur hexadĂ©cimale non signĂ©e, souvent prĂ©fixĂ©e par 0x. Dans ce cas, un nombre indiquant l'Ă©chec est reconnaissable car il commence par un symbole hexadĂ©cimal de 8 ou plus.

Les HRESULTs ont Ă©tĂ© initialement dĂ©finis dans le système d'exploitation IBM/Microsoft OS/2 en tant que codes de retour gĂ©nĂ©riques, et par la suite adoptĂ© dans Windows NT. Microsoft Visual Basic a considĂ©rablement amĂ©liorĂ© les mĂ©canismes d'erreurs HRESULT en y associant un objet IErrorInfo, en stockant un pointeur vers un object COM IErrorInfo dans la mĂ©moire locale de thread. Le mĂ©canisme IErrorInfo permet Ă  des programmes d'associer un large Ă©ventail d'informations pour un HRESULT donnĂ©: la classe de l'objet qui a dĂ©clenchĂ© l'erreur, l'interface de l'objet qui a dĂ©clenchĂ© l'erreur, le texte de l'erreur; et un lien vers une rubrique d'aide dans un fichier d'aide. En outre, les rĂ©cepteurs d'une erreur HRESULT peuvent obtenir la traduction du texte du message d'erreur sur demande.

Par la suite, HRESULT ainsi que son mĂ©canisme IErrorInfoassociĂ© ont Ă©tĂ© utilisĂ©s comme système de signalement d'erreur par dĂ©faut dans les composants COM.

Le support du mĂ©canisme IErrorInfo dans Windows est très incohĂ©rent. Les anciennes API Windows ont tendance Ă  ne pas le supporter du tout en retournant des HRESULTs sans IErrorInfo, tandis que les sous-systèmes COM les plus rĂ©cents dans Windows fournissent souvent de nombreuses informations d'erreur dans la description du message de l'objet IErrorInfo. Les fonctionnalitĂ©s plus avancĂ©es du mĂ©canisme IErrorInfo — les liens de l'aide, et la demande de traduction â€” sont rarement utilisĂ©es.

Dans le Framework .NET, les codes d'erreur HRESULT/IErrorInfo sont convertis en exceptions CLR lors du passage du code natif au code managĂ©; et les exceptions CLR sont converties en codes d'erreur HRESULT/IErrorInfo lors de la transition du code managĂ© en code COM natif.

Utilisation des HRESULTs

Le fichier winerror.h dĂ©finit certaines valeurs HRESULT gĂ©nĂ©riques. Les valeurs HRESULT codĂ©es en dur sont parfois encodĂ©es dans des fichiers d'en-tĂŞte (fichiers .h) pour un sous-système donnĂ©. Ces valeurs sont Ă©galement dĂ©finies dans les fichiers d'en-tĂŞte (.h) du SDK Microsoft Windows, ou du kit de dĂ©veloppement de pilote.

Pour vĂ©rifier si un appel qui renvoie un HRESULT a rĂ©ussi, assurez-vous que le champ S soit Ă  0 (un chiffre non-nĂ©gatif) ou utilisez la macro FAILED(). Pour obtenir la partie Code d'un HRESULT, utilisez la macro HRESULT_CODE(). Vous pouvez Ă©galement utiliser un outil appelĂ© ERR.EXE[4] pour prendre la valeur et la convertir en chaĂ®ne de caractère correspondante Ă  l'erreur. Un autre outil appelĂ© ERRLOOK.EXE[5] peut Ă©galement ĂŞtre utilisĂ© pour afficher des chaĂ®nes d'erreur associĂ©s Ă  une valeur HRESULT. ERRLOOK.EXE peut ĂŞtre exĂ©cutĂ© Ă  partir d'une invite de commande Visual Studio.

Les API natives de Windows SetErrorInfo et GetErrorInfo sont utilisĂ©es pour associer des codes de retour HRESULT Ă  l'objet IErrorInfo correspondant.

La fonction FormatMessage[6] peut ĂŞtre utilisĂ©e pour convertir des HRESULTs sans IErrorInfo en une chaĂ®ne de caractères lisible par un utilisateur.

Exemples

  • 0x80070005
    • 0x8 - Échec
    • 0x7 - Win32
    • 0x5 - E_FAULT
  • 0x80090032
    • 0x8 - Échec
    • 0x9 - SSPI
    • 0x32 - La demande n'est pas prise en charge[7]

Notes et références

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.