다음을 통해 공유


IO_ERROR_LOG_PACKET 구조체(wdm.h)

IO_ERROR_LOG_PACKET 구조체는 오류 로그 항목의 헤더 역할을 합니다.

구문

typedef struct _IO_ERROR_LOG_PACKET {
  UCHAR         MajorFunctionCode;
  UCHAR         RetryCount;
  USHORT        DumpDataSize;
  USHORT        NumberOfStrings;
  USHORT        StringOffset;
  USHORT        EventCategory;
  NTSTATUS      ErrorCode;
  ULONG         UniqueErrorValue;
  NTSTATUS      FinalStatus;
  ULONG         SequenceNumber;
  ULONG         IoControlCode;
  LARGE_INTEGER DeviceOffset;
  ULONG         DumpData[1];
} IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;

멤버

MajorFunctionCode

오류가 발생했을 때 드라이버가 처리한 IRP의 IRP_MJ_XXX 주 함수 코드를 나타냅니다. 이 값을 설정하는 것은 선택 사항입니다.

RetryCount

드라이버가 작업을 다시 시도했으며 이 오류가 발생한 횟수를 나타냅니다. 0을 사용하여 드라이버가 작업을 한 번 시도했음을 나타내거나 초기 시도 이후 각 재시도에 대해 하나씩 추가합니다.

DumpDataSize

이 구조체의 가변 길이 DumpData 멤버의 크기(바이트)를 나타냅니다. 지정된 값은 sizeof(ULONG)의 배수여야 합니다.

NumberOfStrings

드라이버에서 이 오류 로그 항목과 함께 제공할 삽입 문자열의 수를 나타냅니다. 드라이버는 삽입 문자열이 필요하지 않은 오류의 경우 이 값을 0으로 설정합니다. 이벤트 뷰어 이러한 문자열을 사용하여 이 오류 코드에 대한 문자열 템플릿의 "%2"~"%n" 항목을 채웁니다.

null로 끝나는 유니코드 문자열 자체는 메모리의 IO_ERROR_LOG_PACKET 구조를 따릅니다.

StringOffset

드라이버 제공 삽입 문자열 데이터가 시작되는 구조체의 시작부터 오프셋(바이트)을 나타냅니다. 일반적으로 sizeof(IO_ERROR_LOG_PACKET)와 DumpDataSize 멤버의 값이 됩니다. 드라이버 제공 삽입 문자열이 없는 경우 StringOffset 은 0일 수 있습니다.

EventCategory

오류에 대한 이벤트 범주를 지정합니다. 드라이버는 지원하는 이벤트 범주와 메시지 카탈로그에 해당하는 설명 문자열을 지정합니다. 이벤트 뷰어 설명 문자열을 오류의 범주 값으로 표시합니다.

ErrorCode

오류 유형을 지정합니다. 이벤트 뷰어 오류 코드를 사용하여 오류에 대한 설명 값으로 표시할 문자열을 결정합니다. 이벤트 뷰어 드라이버의 메시지 카탈로그에 제공된 오류에 대한 문자열 템플릿을 사용하고 템플릿의 "%1"을 드라이버의 디바이스 개체 이름으로 바꾸고 "%2"에서 "%n"을 오류 로그 항목과 함께 제공된 삽입 문자열로 바꿉니다.

ErrorCode 는 시스템 정의 또는 드라이버 정의 상수입니다. 자세한 내용은 로깅 오류를 참조하세요.

UniqueErrorValue

드라이버에서 오류가 검색된 위치를 나타내는 드라이버별 값입니다. 이 값을 설정하는 것은 선택 사항입니다.

FinalStatus

오류를 트리거한 작업에 대해 반환할 NTSTATUS 값을 지정합니다. 이 값을 설정하는 것은 선택 사항입니다.

SequenceNumber

지정된 요청의 수명 동안 상수여야 하는 현재 IRP에 대한 드라이버 할당 시퀀스 번호를 지정합니다. 이 값을 설정하는 것은 선택 사항입니다.

IoControlCode

IRP_MJ_DEVICE_CONTROL 또는 IRP_MJ_INTERNAL_DEVICE_CONTROL IRP의 경우 이 멤버는 오류를 시도한 요청에 대한 I/O 제어 코드를 지정합니다. 그렇지 않으면 이 값은 0입니다. 이 값을 설정하는 것은 선택 사항입니다.

DeviceOffset

오류가 발생한 디바이스에 대한 드라이버 지정 오프셋을 지정합니다. 이 값을 설정하는 것은 선택 사항입니다.

DumpData[1]

레지스터 값 또는 오류의 원인을 식별하는 데 유용한 기타 정보와 같은 드라이버별 이진 데이터를 저장하는 데 사용할 수 있는 변수 크기 배열입니다. 드라이버는 이 구조체의 DumpDataSize 멤버에 있는 배열의 크기(바이트)를 지정해야 합니다.

설명

드라이버는 IoAllocateErrorLogEntry 루틴을 사용하여 오류 로그 항목을 할당합니다. IO_ERROR_LOG_PACKET 구조체는 반환된 버퍼의 헤더 역할을 합니다. 로그 항목에 대한 삽입 문자열이 메모리에서 뒤에 잇습니다.

I/O 관리자 자체는 디바이스 및 드라이버의 이름과 같은 일부 정보를 시스템 오류 로그에 삽입합니다. I/O 관리자는 이 정보를 보유하기 위해 80바이트를 예약합니다. 이 정보의 크기가 80바이트를 초과하면 I/O 관리자가 필요에 따라 드라이버의 삽입 문자열을 자립니다.

이 구조를 사용하는 방법에 대한 자세한 내용은 로깅 오류를 참조하세요.

요구 사항

요구 사항
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)

추가 정보

IRP_MJ_DEVICE_CONTROL

IRP_MJ_INTERNAL_DEVICE_CONTROL

IoAllocateErrorLogEntry

IoFreeErrorLogEntry

IoWriteErrorLogEntry