IoAllocateErrorLogEntry 함수(wdm.h)
IoAllocateErrorLogEntry 루틴은 오류 로그 항목을 할당하고 호출자가 I/O 오류에 대한 정보를 제공하는 데 사용하는 패킷에 대한 포인터를 반환합니다.
구문
PVOID IoAllocateErrorLogEntry(
[in] PVOID IoObject,
[in] UCHAR EntrySize
);
매개 변수
[in] IoObject
I/O 오류가 발생한 디바이스를 나타내는 디바이스 개체 또는 오류를 발견한 드라이버를 나타내는 드라이버 개체에 대한 포인터입니다.
[in] EntrySize
할당할 오류 로그 항목의 크기(바이트)를 지정합니다. 이 값은 ERROR_LOG_MAXIMUM_SIZE 초과할 수 없습니다.
경고
EntrySize 는 UCHAR 값입니다. 더 큰 값을 지정하면 컴파일러가 해당 값을 (잘못된) UCHAR로 자동으로 자른다.
반환 값
IoAllocateErrorLogEntry 는 오류 로그 항목에 대한 포인터를 반환하거나 로그 항목을 할당할 수 없는 경우 NULL 을 반환합니다.
설명
드라이버는 먼저 오류에 대한 정보로 패킷을 입력한 다음 , IoWriteErrorLogEntry 를 호출하여 항목을 오류 로그에 게시해야 합니다. 로그 항목이 기록되면 오류 로그 항목 버퍼가 자동으로 해제됩니다. 로그에 기록되지 않을 항목 버퍼는 IoFreeErrorLogEntry를 사용하여 해제할 수 있습니다.
오류 로그 항목은 가변 길이 IO_ERROR_LOG_PACKET 구조체로 구성되며, 그 뒤에 하나 이상의 0개 이상의 유니코드 문자열이 올 수 있습니다. 이벤트 뷰어 항목에 대해 표시되는 오류 메시지에 이러한 문자열을 삽입합니다. IO_ERROR_LOG_PACKET 하나의 가변 길이 멤버인 DumpData 멤버를 포함합니다. 따라서 EntrySize 의 값은 sizeof(IO_ERROR_LOG_PACKET) + DumpData 멤버의 크기 + 드라이버 제공 삽입 문자열의 결합된 크기여야 합니다.
드라이버는 IoAllocateErrorLogEntry를 호출하기 전에 EntrySize 값이 ERROR_LOG_MAXIMUM_SIZE 미만인지 검사 합니다. EntrySize가 UCHAR로 선언되고 컴파일러가 UCHAR에 맞게 너무 큰 값을 자동으로 자르기 때문에 루틴 자체는 전달된 값이 너무 큰지 안정적으로 검색할 수 없습니다.
드라이버는 NULL을 반환하는 IoAllocateErrorLogEntry를 심각한 오류로 취급해서는 안됩니다. 드라이버는 오류를 기록할 수 있는지 여부에 관계없이 정상적으로 계속 작동해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |