IoAllocateErrorLogEntry-Funktion (wdm.h)
Die IoAllocateErrorLogEntry-Routine ordnet einen Fehlerprotokolleintrag zu und gibt einen Zeiger auf das Paket zurück, das der Aufrufer verwendet, um Informationen zu einem E/A-Fehler bereitzustellen.
Syntax
PVOID IoAllocateErrorLogEntry(
[in] PVOID IoObject,
[in] UCHAR EntrySize
);
Parameter
[in] IoObject
Zeiger auf ein Geräteobjekt, das das Gerät darstellt, auf dem ein E/A-Fehler aufgetreten ist, oder auf ein Treiberobjekt, das den Treiber darstellt, der einen Fehler gefunden hat.
[in] EntrySize
Gibt die Größe des zuzuordnenden Fehlerprotokolleintrags in Bytes an. Dieser Wert darf ERROR_LOG_MAXIMUM_SIZE nicht überschreiten.
Warnung
EntrySize ist ein UCHAR-Wert . Wenn Sie einen größeren Wert angeben, schneidet der Compiler diesen Wert automatisch auf eine (falsche) UCHAR ab.
Rückgabewert
IoAllocateErrorLogEntry gibt einen Zeiger auf den Fehlerprotokolleintrag oder NULL zurück, wenn ein Protokolleintrag nicht zugeordnet werden konnte.
Hinweise
Der Treiber muss zuerst das Paket mit Informationen zum Fehler ausfüllen und dann IoWriteErrorLogEntry aufrufen, um den Eintrag im Fehlerprotokoll zu posten. Der Fehlerprotokolleintragspuffer wird automatisch freigegeben, sobald der Protokolleintrag aufgezeichnet wurde. Eingabepuffer, die nicht in das Protokoll geschrieben werden sollen, können mithilfe von IoFreeErrorLogEntry freigegeben werden.
Ein Fehlerprotokolleintrag besteht aus einer struktur mit variabler Länge IO_ERROR_LOG_PACKET, möglicherweise gefolgt von einer oder mehreren 0 gezählten Unicode-Zeichenfolgen. Die Ereignisanzeige fügt diese Zeichenfolgen in die Fehlermeldung ein, die für den Eintrag angezeigt wird. IO_ERROR_LOG_PACKET enthält ein Element mit variabler Länge, das DumpData-Element . Daher muss der Wert für EntrySizesizeof(IO_ERROR_LOG_PACKET) + size des DumpData-Elements + kombinierte Größe aller vom Treiber bereitgestellten Einfügezeichenfolgen sein.
Treiber sollten überprüfen, ob der Wert für EntrySize kleiner als ERROR_LOG_MAXIMUM_SIZE ist, bevor IoAllocateErrorLogEntry aufgerufen wird. Da EntrySize als UCHAR deklariert wird und der Compiler automatisch alle Werte abschneidet, die zu groß sind, um in eine UCHAR zu passen, kann die Routine selbst nicht zuverlässig erkennen, ob der übergebene Wert zu groß ist.
Treiber dürfen ioAllocateErrorLogEntry , die NULL zurückgeben, nicht als schwerwiegenden Fehler behandeln. Der Treiber muss weiterhin normal funktionieren, unabhängig davon, ob er Fehler protokollieren kann.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |