시스템 이벤트 로그에 쓰기
오류는 해당 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 를 사용하여 사용되지 않는 로그 항목을 해제할 수 있습니다.
미리 정의된 오류 코드(IO_ERR_XXX 형식)는 WDK(Windows 드라이버 키트)에 포함된 ntiologc.h 헤더 파일에 정의됩니다. 각 오류 코드와 연결된 오류 메시지는 오류 코드 선언 옆에 있는 ntiologc.h에 대한 주석에서 찾을 수 있습니다. 미리 정의된 오류 코드를 사용하려면 드라이버가 연결된 오류 메시지의 원본으로 시스템 파일 iologmsg.dll 등록해야 합니다. 자세한 내용은 오류 메시지의 원본으로 등록을 참조하세요.
드라이버는 자체 사용자 지정 오류 유형 및 관련 오류 메시지를 정의할 수도 있습니다. 자세한 내용은 사용자 지정 오류 유형 정의를 참조하세요.