Compartilhar via


Manipulador específico de idioma

O endereço relativo do manipulador específico de idioma está presente no UNWIND_INFO, sempre que os sinalizadores UNW_FLAG_EHANDLER ou UNW_FLAG_UHANDLER são definidos. Conforme descrito na seção anterior, o manipulador de idioma específico é chamado como parte da pesquisa de um manipulador de exceção ou como parte de um desenrolar. Ele tem o seguinte protótipo:

typedef EXCEPTION_DISPOSITION (*PEXCEPTION_ROUTINE) (
    IN PEXCEPTION_RECORD ExceptionRecord,
    IN ULONG64 EstablisherFrame,
    IN OUT PCONTEXT ContextRecord,
    IN OUT PDISPATCHER_CONTEXT DispatcherContext
);

ExceptionRecord fornece um ponteiro para um registro de exceções, que tem a definição padrão do tipo Win64.

EstablisherFrame é o endereço da base de alocação de pilha fixa para essa função.

ContextRecord aponta para o contexto de exceção na hora em que a exceção foi gerada (no caso de manipulador de exceção) ou atual "desenrolar" contexto (no caso de manipulador de terminação).

DispatcherContext aponta para o contexto de dispatcher para essa função. Ele tem a seguinte definição:

typedef struct _DISPATCHER_CONTEXT {
    ULONG64 ControlPc;
    ULONG64 ImageBase;
    PRUNTIME_FUNCTION FunctionEntry;
    ULONG64 EstablisherFrame;
    ULONG64 TargetIp;
    PCONTEXT ContextRecord;
    PEXCEPTION_ROUTINE LanguageHandler;
    PVOID HandlerData;
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;

ControlPc é o valor do RIP nessa função. Este é um endereço de exceção ou o endereço no qual o controle à esquerda a função de estabelecimento. Este é o RIP que será usado para determinar se o controle está dentro de alguns construção protegida nessa função (por exemplo, um bloco de __try para __try / __except ou __try/__finally).

ImageBase é a imagem base (endereço de carga) do módulo que contém essa função, a serem adicionados para os deslocamentos de 32 bits usados na entrada de função e desenrolar info para registrar os endereços relativos.

FunctionEntry fontes de um ponteiro para o RUNTIME_FUNCTION que detém a função de entrada de função e desenrolar endereços relativos de base da imagem de informações para esta função.

EstablisherFrame é o endereço da base de alocação de pilha fixa para essa função.

TargetIp fornece um endereço de instrução opcional que especifica o endereço de continuação de desenrolamento. Esse endereço é ignorado se EstablisherFrame não for especificado.

ContextRecord aponta para o contexto de exceção, para uso pelo código de despacho/desenrolar de exceção do sistema.

LanguageHandler aponta para a rotina de manipulador de linguagem específica do idioma que está sendo chamada.

HandlerData aponta para os dados específicos do idioma manipulador para esta função.

Consulte também

Referência

Tratamento (x64) de exceção