Freigeben über


IO_ERROR_LOG_PACKET-Struktur (wdm.h)

Die IO_ERROR_LOG_PACKET-Struktur dient als Header für einen Fehlerprotokolleintrag.

Syntax

typedef struct _IO_ERROR_LOG_PACKET {
  UCHAR         MajorFunctionCode;
  UCHAR         RetryCount;
  USHORT        DumpDataSize;
  USHORT        NumberOfStrings;
  USHORT        StringOffset;
  USHORT        EventCategory;
  NTSTATUS      ErrorCode;
  ULONG         UniqueErrorValue;
  NTSTATUS      FinalStatus;
  ULONG         SequenceNumber;
  ULONG         IoControlCode;
  LARGE_INTEGER DeviceOffset;
  ULONG         DumpData[1];
} IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;

Member

MajorFunctionCode

Gibt den IRP_MJ_XXX Hauptfunktionscode des IRP an, den der Treiber beim Auftreten des Fehlers verarbeitet hat. Das Festlegen dieses Werts ist optional.

RetryCount

Gibt an, wie oft der Treiber den Vorgang wiederholt hat und dieser Fehler aufgetreten ist. Verwenden Sie null, um anzugeben, dass der Treiber den Vorgang einmal versucht hat, oder fügen Sie einen für jeden Wiederholungsversuch über den ersten Versuch hinaus hinzu.

DumpDataSize

Gibt die Größe des DumpData-Members dieser Struktur mit variabler Länge in Bytes an. Der angegebene Wert muss ein Vielfaches von sizeof(ULONG) sein.

NumberOfStrings

Gibt die Anzahl der Einfügezeichenfolgen an, die der Treiber mit diesem Fehlerprotokolleintrag angibt. Treiber legen diesen Wert für Fehler, die keine Einfügezeichenfolgen erfordern, auf Null fest. Der Ereignisanzeige verwendet diese Zeichenfolgen, um die Einträge "%2" bis "%n" in der Zeichenfolgenvorlage für diesen Fehlercode auszufüllen.

Die Unicode-Zeichenfolgen mit Null-Endung selbst folgen der IO_ERROR_LOG_PACKET Struktur im Arbeitsspeicher.

StringOffset

Gibt den Offset in Bytes vom Anfang der Struktur an, an dem alle vom Treiber bereitgestellten Einfügezeichenfolgendaten beginnen. Normalerweise ist dies sizeof(IO_ERROR_LOG_PACKET) plus der Wert des DumpDataSize-Elements . Wenn keine vom Treiber bereitgestellten Einfügezeichenfolgen vorhanden sind, kann StringOffset 0 sein.

EventCategory

Gibt die Ereigniskategorie für den Fehler an. Ein Treiber gibt die unterstützten Ereigniskategorien und die entsprechenden beschreibenden Zeichenfolgen im Nachrichtenkatalog an. Die Ereignisanzeige zeigt die beschreibende Zeichenfolge als Category-Wert für den Fehler an.

ErrorCode

Gibt den Typ des Fehlers an. Die Ereignisanzeige verwendet den Fehlercode, um zu bestimmen, welche Zeichenfolge als Description-Wert für den Fehler angezeigt werden soll. Die Ereignisanzeige übernimmt die Zeichenfolgenvorlage für den im Nachrichtenkatalog des Treibers angegebenen Fehler, ersetzt "%1" in der Vorlage durch den Namen des Geräteobjekts des Treibers und ersetzt "%2" bis "%n" durch die Einfügezeichenfolgen, die mit dem Fehlerprotokolleintrag angegeben werden.

ErrorCode ist eine systemdefinierte oder vom Treiber definierte Konstante. Weitere Informationen finden Sie unter Protokollierungsfehler .

UniqueErrorValue

Ein treiberspezifischer Wert, der angibt, wo der Fehler im Treiber erkannt wurde. Das Festlegen dieses Werts ist optional.

FinalStatus

Gibt den NTSTATUS-Wert an, der für den Vorgang zurückgegeben werden soll, der den Fehler ausgelöst hat. Das Festlegen dieses Werts ist optional.

SequenceNumber

Gibt eine vom Treiber zugewiesene Sequenznummer für die aktuelle IRP an, die für die Lebensdauer einer bestimmten Anforderung konstant sein sollte. Das Festlegen dieses Werts ist optional.

IoControlCode

Für eine IRP_MJ_DEVICE_CONTROL oder IRP_MJ_INTERNAL_DEVICE_CONTROL IRP gibt dieses Element den E/A-Steuerungscode für die Anforderung an, die den Fehler verdutzt hat. Andernfalls ist dieser Wert 0. Das Festlegen dieses Werts ist optional.

DeviceOffset

Gibt den vom Treiber angegebenen Offset auf das Gerät an, auf dem der Fehler aufgetreten ist. Das Festlegen dieses Werts ist optional.

DumpData[1]

Ein Array mit variabler Größe, das zum Speichern treiberspezifischer Binärdaten verwendet werden kann, z. B. Registerwerte oder andere Informationen, die zur Identifizierung der Fehlerursache nützlich sind. Treiber müssen die Größe des Arrays in Bytes im DumpDataSize-Member dieser Struktur angeben.

Hinweise

Treiber verwenden die IoAllocateErrorLogEntry-Routine , um einen Fehlerprotokolleintrag zuzuweisen. Die IO_ERROR_LOG_PACKET-Struktur dient als Header für den zurückgegebenen Puffer. Im Arbeitsspeicher folgen alle Einfügezeichenfolgen für den Protokolleintrag.

Beachten Sie, dass der E/A-Manager selbst einige Informationen in das Systemfehlerprotokoll einfügt, z. B. den Namen des Geräts und des Treibers. Der E/A-Manager reserviert 80 Bytes, um diese Informationen aufzunehmen. Wenn die Größe dieser Informationen 80 Bytes überschreitet, schneidet der E/A-Manager die Einfügezeichenfolgen des Treibers nach Bedarf ab.

Weitere Informationen zur Verwendung dieser Struktur finden Sie unter Protokollierungsfehler.

Anforderungen

Anforderung Wert
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)

Weitere Informationen

IRP_MJ_DEVICE_CONTROL

IRP_MJ_INTERNAL_DEVICE_CONTROL

IoAllocateErrorLogEntry

IoFreeErrorLogEntry

IoWriteErrorLogEntry