Freigeben über


IoAllocateErrorLogEntry-Funktion (wdm.h)

Die IoAllocateErrorLogEntry Routine weist 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 einen (falschen) UCHAR-ab.

Rückgabewert

IoAllocateErrorLogEntry gibt einen Zeiger auf den Fehlerprotokolleintrag zurück oder NULL-, wenn kein Protokolleintrag zugeordnet werden konnte.

Bemerkungen

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, können mithilfe IoFreeErrorLogEntry-freigegeben werden.

Ein Fehlerprotokolleintrag besteht aus einer variablen Länge IO_ERROR_LOG_PACKET Struktur, möglicherweise gefolgt von einer oder mehreren nullgezä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 EntrySize-Größe(IO_ERROR_LOG_PACKET) + Größe des DumpData Member + 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 sie IoAllocateErrorLogEntryaufrufen. Da EntrySize als UCHAR deklariert wird und der Compiler im Hintergrund 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 nicht behandeln,NULL- als schwerwiegender Fehler zurückzugeben. Der Treiber muss weiterhin normal funktionieren, unabhängig davon, ob Fehler protokolliert werden können.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- IRQL-<= DISPATCH_LEVEL

Siehe auch

IO_ERROR_LOG_PACKET

IoFreeErrorLogEntry-

IoWriteErrorLogEntry-