STOWED_EXCEPTION_INFORMATION_V2 结构

包含已存储的异常信息。

语法

typedef struct _STOWED_EXCEPTION_INFORMATION_V2 {
  STOWED_EXCEPTION_INFORMATION_HEADER Header;
  HRESULT                             ResultCode;
  struct {
    DWORD ExceptionForm  :2;
    DWORD ThreadId  :30;
  };
  union {
    struct {
      PVOID ExceptionAddress;
      ULONG StackTraceWordSize;
      ULONG StackTraceWords;
      PVOID StackTrace;
    };
    struct {
      PWSTR ErrorText;
    };
  };
  ULONG                               NestedExceptionType;
  PVOID                               NestedException;
} STOWED_EXCEPTION_INFORMATION_V2, *PSTOWED_EXCEPTION_INFORMATION_V2;

成员

标头

类型: STOWED_EXCEPTION_INFORMATION_HEADER

包含此父结构信息的 STOWED_EXCEPTION_INFORMATION_HEADER 结构。

ResultCode

类型: HRESULT

已存放异常的 HRESULT 代码。

ExceptionForm

类型: DWORD

标识异常形式的 2 位值。

含义
STOWED_EXCEPTION_FORM_BINARY
0x01
此值指示异常的形式为二进制。
STOWED_EXCEPTION_FORM_TEXT
0x02
此值指示异常的形式为文本。

ThreadId

类型: DWORD

标识引发异常的线程的 30 位值。 存储值时,该值向右移动 2 位。 若要将其转换回有效的线程 ID,请将值左移 2。 例如:

DWORD ActualThreadId = (StowedException.ThreadId << 2);

(未命名的结构)

仅当 ExceptionForm 成员设置为 STOWED_EXCEPTION_FORM_BINARY 时,此嵌套结构的成员才有效。

ExceptionAddress

类型: PVOID

包含异常地址的指针。

StackTraceWordSize

类型: ULONG

StackTrace 成员指向的堆栈跟踪中每个单词的大小(以字节为单位)。 对于 32 位平台,此值设置为 4,对于 64 位平台,此值设置为 8。

StackTraceWords

类型: ULONG

StackTrace 成员指向的堆栈跟踪中的单词数。 单词数等于数组中的元素数。

StackTrace

类型: PVOID

指向包含堆栈跟踪的内存块的指针。

(未命名的结构)

仅当 ExceptionForm 成员设置为 STOWED_EXCEPTION_FORM_TEXT 时,此嵌套结构的成员才有效。

ErrorText

类型: PWSTR

指向以 null 结尾的字符串的指针,该字符串包含异常的错误文本。

NestedExceptionType

类型: ULONG

一个 32 位值,指定 NestedException 成员指向的对象类型。 使用此字节交换类型定义宏定义值,该宏假定 little-endian:

#define STOWED_EXCEPTION_NESTED_TYPE(t) ((((((ULONG)(t)) >> 24) & 0xFF) <<  0) | \
                                         (((((ULONG)(t)) >> 16) & 0xFF) <<  8) | \
                                         (((((ULONG)(t)) >>  8) & 0xFF) << 16) | \
                                         (((((ULONG)(t)) >>  0) & 0xFF) << 24))

下面是一些常见的类型定义:

含义
STOWED_EXCEPTION_NESTED_TYPE_NONE
(0x00000000)
此值指定没有嵌套异常对象。
STOWED_EXCEPTION_NESTED_TYPE_WIN32
STOWED_EXCEPTION_NESTED_TYPE ('W32E')
此值指定 NestedException 成员指向 EXCEPTION_RECORD 对象。
STOWED_EXCEPTION_NESTED_TYPE_STOWED
STOWED_EXCEPTION_NESTED_TYPE ('STOW')
此值指定 NestedException 成员指向另一个已存储的异常对象。 另一个存放的异常对象可以是 STOWED_EXCEPTION_INFORMATION_V2 对象或具有有效 Header 成员的不同版本,即包含有效STOWED_EXCEPTION_INFORMATION_HEADER的 Header成员
STOWED_EXCEPTION_NESTED_TYPE_CLR
STOWED_EXCEPTION_NESTED_TYPE ('CLR1')
此值指定 NestedException 成员指向“CLR1”异常对象。
STOWED_EXCEPTION_NESTED_TYPE_LEO
STOWED_EXCEPTION_NESTED_TYPE ('LEO1')
此值指定 NestedException 成员指向语言异常对象。

NestedException

类型: PVOID

指向嵌套异常类型的指针。 对象的类型由 NestedExceptionType 成员指示。

备注

STOWED_EXCEPTION_INFORMATION_V2STOWED_EXCEPTION_INFORMATION_HEADER 当前未在公开提供的标头中定义,因此你需要先在源代码中定义它们,然后再使用它们。

STOWED_EXCEPTION_INFORMATION_V1 结构与此结构相同,只不过它不包含 NestedExceptionTypeNestedException 成员。

要求

要求
最低受支持的客户端
Windows 8.1 [仅限桌面应用]
最低受支持的服务器
Windows Server 2012 R2 [仅限桌面应用]
标头

请参阅

EXCEPTION_RECORD

STOWED_EXCEPTION_INFORMATION_HEADER