Fonction RtlVirtualUnwind (winnt.h)

Récupère le contexte d’appel de la fonction qui précède le contexte de fonction spécifié.

Notes

 Cette fonction n’est pas implémentée sur toutes les plateformes de processeur et l’implémentation est différente sur chaque plateforme qui la prend en charge. Le prototype suivant répertorie tous les paramètres potentiels et leur application. Pour plus d’informations, consultez les prototypes de fonction spécifiques au processeur.

Syntaxe

NTSYSAPI PEXCEPTION_ROUTINE RtlVirtualUnwind(
  [in]                DWORD                          HandlerType,
  [in]                DWORD64                        ImageBase,
  [in]                DWORD64                        ControlPc,
  [in]                PRUNTIME_FUNCTION              FunctionEntry,
  [in, out]           PCONTEXT                       ContextRecord,
  [out]               PVOID                          *HandlerData,
  [out]               PDWORD64                       EstablisherFrame,
  [in, out, optional] PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
);

Paramètres

[in] HandlerType

Type de gestionnaire. Ce paramètre peut prendre les valeurs suivantes.

Ce paramètre est uniquement présent sur x64.

Valeur Signification
UNW_FLAG_NHANDLER
0x0
La fonction n’a pas de gestionnaire.
UNW_FLAG_EHANDLER
0x1
La fonction a un gestionnaire d’exceptions qui doit être appelé.
UNW_FLAG_UHANDLER
0x2
La fonction a un gestionnaire de terminaison qui doit être appelé lors du déroulement d’une exception.
UNW_FLAG_CHAININFO
0x4
Le membre FunctionEntry est le contenu d’une entrée de table de fonction précédente.

[in] ImageBase

Adresse de base du module auquel la fonction appartient.

[in] ControlPc

Adresse virtuelle où le contrôle a quitté la fonction spécifiée.

[in] FunctionEntry

Adresse de l’entrée de la table de fonction pour la fonction spécifiée. Pour obtenir l’entrée de la table de fonction, appelez la fonction RtlLookupFunctionEntry .

[in, out] ContextRecord

Pointeur vers une structure CONTEXT qui représente le contexte de l’image précédente.

[out] HandlerData

Emplacement du PC. Si ce paramètre est 0, le PC se trouve dans le prologue, l’épilogue ou une zone de trame null de la fonction. Si ce paramètre a la valeur 1, le PC se trouve dans le corps de la fonction.

Ce paramètre n’est pas présent sur x64.

[out] EstablisherFrame

Pointeur vers une structure de FRAME_POINTERS qui reçoit la valeur du pointeur de trame d’établissement. Le pointeur d’image réel est défini uniquement si InFunction est 1.

Ce paramètre est de type PULONG64 sur x64.

[in, out, optional] ContextPointers

Pointeur facultatif vers une structure de pointeurs de contexte.

Valeur retournée

Cette fonction retourne un pointeur vers une fonction de rappel EXCEPTION_ROUTINE .

Remarques

La liste complète des marqueurs d’épilogue pour x64 est la suivante :

  • Ret
  • ret n
  • rep ret
  • jmp imm8 | imm32 où la cible se trouve en dehors de la fonction en cours de déwound
  • jmp qword ptr imm32
  • rex.w jmp reg

Configuration requise

   
Plateforme cible Windows
En-tête winnt.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

CONTEXT

EXCEPTION_RECORD

RtlLookupFunctionEntry

API Vertdll disponibles dans les enclaves VBS