오류는 NTSTATUS 값으로 지정됩니다. 시스템은 드라이버에서 사용할 수 있는 특정 NTSTATUS 값을 미리 정의하며 드라이버 작성기는 추가 오류를 정의할 수 있습니다. 오류를 로깅할 때 특정 NTSTATUS 값만 사용할 수 있습니다.
각 NTSTATUS 값에는 오류를 기록할 때 사용할 수 있는 관련 오류 메시지가 있습니다. 예를 들어 병렬 포트 드라이버는 NTSTATUS 값 PAR_INTERRUPT_CONFLICT를 사용하여 하드웨어 인터럽트 충돌을 나타내며, 메시지 텍스트 "인터럽트 충돌이 %1에서 감지되었습니다"입니다.
이벤트 뷰어는 로그 항목의 속성 시트에 있는 설명 텍스트 상자에 메시지 텍스트를 표시합니다. 메시지 텍스트 문자열에 "%1"가 포함된 경우 이벤트 뷰어는 항목을 기록한 디바이스의 이름으로 바꿉니다. 메시지 텍스트에는 "%2" "%3" 등의 추가 매개 변수가 포함될 수 있습니다. 드라이버가 오류를 기록할 때 해당 매개 변수에 대한 문자열 값을 제공할 수 있습니다. 이러한 문자열 값을 삽입 문자열이라고 합니다. 이벤트 뷰어는 백분율 값 대신 자동으로 삽입됩니다.
또한 드라이버는 덤프 데이터알려진 로그 항목에 이진 데이터를 포함할 수 있습니다. 이벤트 뷰어는 로그 항목 속성 시트의 데이터 텍스트 상자에 덤프 데이터를 표시합니다.
이벤트 뷰어에서 항목을 두 번 클릭하여 로그 항목에 대한 속성 시트를 표시할 수 있습니다. 다음 스크린샷은 샘플 로그 항목 속성 시트를 보여줍니다.
드라이버는 IoAllocateErrorLogEntry 루틴을 사용하여 오류 로그 항목을 할당합니다. 로그 항목은 가변 길이 IO_ERROR_LOG_PACKET 헤더와 삽입 문자열로 구성됩니다.
다음 다이어그램은 메모리에 있는 오류 로그 항목의 레이아웃을 보여줍니다.
메모리의 오류 로그 패킷 레이아웃을 보여 주는 
IO_ERROR_LOG_PACKETErrorCode 멤버는 오류의 NTSTATUS 값을 지정합니다. DumpData 멤버는 로그 항목에 대한 덤프 데이터를 지정합니다. DumpData 가변 크기 배열로, 크기는 DumpDataSize 멤버에 의해 지정됩니다. 드라이버는 StringOffset 멤버를 사용하여 첫 번째 삽입 문자열의 시작 부분과 NumberOfStrings 멤버의 문자열 수를 지정합니다. 각 삽입 문자열 자체는 null로 끝나는 유니코드 문자열입니다.
드라이버가 할당된 오류 로그 항목을 채우면 IoWriteErrorLogEntry사용하여 오류 로그에 항목을 씁니다. IoWriteErrorLogEntry 로그 항목에 할당된 메모리를 자동으로 해제합니다. 드라이버는 IoFreeErrorLogEntry 사용하여 사용하지 않는 로그 항목을 해제할 수 있습니다.
미리 정의된 오류 코드(XXXIO_ERR_형식)는 WDK(Windows 드라이버 키트)에 포함된 ntiologc.h 헤더 파일에 정의됩니다. 각 오류 코드와 연결된 오류 메시지는 오류 코드 선언 옆에 있는 ntiologc.h에 대한 주석에서 찾을 수 있습니다. 미리 정의된 오류 코드를 사용하려면 드라이버가 연결된 오류 메시지의 원본으로 시스템 파일 iologmsg.dll등록해야 합니다. 자세한 내용은 오류 메시지의 원인으로 등록을 참조하세요.
드라이버는 자체 사용자 지정 오류 유형 및 관련 오류 메시지를 정의할 수도 있습니다. 자세한 내용은 사용자 지정 오류 유형 정의 참조하세요.