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

NestedException 멤버가 가리키는 개체의 형식을 지정하는 32비트 값입니다. 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 [데스크톱 앱만 해당]
지원되는 최소 서버
R2 Windows Server 2012 [데스크톱 앱만 해당]
헤더
없음

참고 항목

EXCEPTION_RECORD

STOWED_EXCEPTION_INFORMATION_HEADER