Partilhar via


struct UNWIND_INFO

A estrutura de informações de dados de desenrolamento é usada para registrar os efeitos que tem uma função no ponteiro de pilha e onde os registros permanentes são salvos na pilha:

UBYTE: 3

Versão

UBYTE: 5

Sinalizadores

UBYTE

Tamanho de prolog

UBYTE

A contagem de códigos desenrola

UBYTE: 4

Registro de quadro chave

UBYTE: 4

Registro do quadro deslocado (dimensionado)

* Em USHORT

Desenrole a matriz de códigos

variável

Pode estar ou do formulário (1) ou abaixo (2)

(1) Manipulador de exceção

ULONG

Endereço do manipulador de exceção

variável

Dados específicos de linguagem do manipulador (opcional)

(2) Encadeado desenrola informações

ULONG

Endereço de início de função

ULONG

Endereço do final da função

ULONG

Desenrole o endereço de informações

A estrutura de UNWIND_INFO deve ser DWORD alinhado na memória.O significado de cada campo é a seguinte:

  • Versão
    Número de versão de dados de desenrolamento atualmente, 1.

  • Sinalizadores
    Três sinalizadores são definidos atualmente:

    UNW_FLAG_EHANDLER a função tem um manipulador de exceção que deve ser chamado para procurar as funções que precisam examinar exceções.

    UNW_FLAG_UHANDLER a função tem um manipulador de fim que deve ser chamado para desenrolar uma exceção.

    UNW_FLAG_CHAININFO que isso desenrola a estrutura de informações não é primária para o procedimento.Em vez disso, encadeados desenrolam a entrada de informações são o conteúdo de uma entrada anterior de RUNTIME_FUNCTION.Consulte o seguinte texto para obter uma explicação de encadeado para desenrolar estruturas de informações.Se este sinalizador é definido, os sinalizadores de UNW_FLAG_EHANDLER e de UNW_FLAG_UHANDLER devem ser apagados.Além disso, o registro do quadro e os campos de alocação de pilha fixa devem ter os mesmos valores que em primária para desenrolar informações.

  • Tamanho de prolog
    Comprimento de prólogo de função em bytes.

  • Contagem de códigos de desenrolar
    Este é o número de slots na matriz de códigos de desenrolamento.Observe que alguns códigos desenrolam (por exemplo, UWOP_SAVE_NONVOL) requerem mais de um slot na matriz.

  • Registro de quadro
    Se for diferente de zero, a função usa um ponteiro de quadro, e esse campo é o número de registro permanente usado como o ponteiro do quadro, usando a mesma codificação para o campo de informações da operação de nós de UNWIND_CODE.

  • Deslocamento do registro de quadro (dimensionado)
    Se o campo do registro do quadro é diferente de zero, então este é o deslocamento dimensionado de RSP que é aplicado ao registro de FP quando se estabelece.O registro real de FP é definido como RSP + 16 * esse número, permitindo que desloca 0 a 240.Isso permite apontar o registro de FP no meio de alocação de pilha local para o quadro de pilha dinâmicos, permitindo que a melhor densidade de código com uma instruções mais curtas (mais declarações podem usar o formulário de 8 bits com sinal de deslocamento).

  • Matriz de códigos desenrolar
    Esta é uma matriz de itens que explica o efeito de prólogo os registros e em RSP permanentes.Consulte a seção em UNWIND_CODE para o significado de itens individuais.Para fins de alinhamento, essa matriz sempre terá mesmo um número de entradas, com a entrada final potencialmente não utilizadas (nesse caso a matriz será uma maior do que indicado pela contagem de desenrole o campo de códigos).

  • Endereço do tratador de exceções
    Este é um ponteiro de imagem relativa a qualquer o tratador específico de linguagem de exceção/fim de função (se o sinalizador UNW_FLAG_CHAININFO é claro e um dos sinalizadores UNW_FLAG_EHANDLER ou UNW_FLAG_UHANDLER é definido).

  • Dados específicos do idioma do manipulador
    Este é dados específicos do idioma de manipulador de exceção de função.O formato desses dados não especificado e completamente determinado pelo tratador específico de exceção em uso.

  • Informações de desenrolar encadeadas
    Se o sinalizador UNW_FLAG_CHAININFO é definir a estrutura de UNWIND_INFO termina com três UWORDs.Este UWORDs representa informações de RUNTIME_FUNCTION para a função de encadeado desenrola.

Consulte também

Referência

Dados desenrolados para tratamento de exceções, suporte do depurador