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.