IO_STATUS_BLOCK-Struktur (wdm.h)
Ein Treiber legt den I/O-status-Block eines IRP fest, um die endgültige status einer E/A-Anforderung anzugeben, bevor IoCompleteRequest für das IRP aufgerufen wird.
Syntax
typedef struct _IO_STATUS_BLOCK {
union {
NTSTATUS Status;
PVOID Pointer;
};
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
Member
Status
Dies ist der Abschluss status, entweder STATUS_SUCCESS, wenn der angeforderte Vorgang erfolgreich abgeschlossen wurde, oder ein Informations-, Warnungs- oder Fehler STATUS_XXX-Wert. Weitere Informationen finden Sie unter Verwenden von NTSTATUS-Werten.
Pointer
Reserviert. Nur zur internen Verwendung.
Information
Dies wird auf einen anforderungsabhängigen Wert festgelegt. Bei erfolgreichem Abschluss einer Übertragungsanforderung wird dies beispielsweise auf die Anzahl der übertragenen Bytes festgelegt. Wenn eine Übertragungsanforderung mit einer anderen STATUS_XXX abgeschlossen wird, wird dieser Member auf 0 festgelegt.
Hinweise
Es sei denn, die Dispatchroutine eines Treibers schließt eine IRP mit einem Fehler status Wert ab, der Treiber der untersten Ebene in der Kette legt häufig den I/O-status-Block des IRP auf die Werte fest, die an den ursprünglichen Anforderer des E/A-Vorgangs zurückgegeben werden.
Die IoCompletion-Routinen höherer Treiber überprüfen in der Regel den E/A-status-Block in IRPs, die von niedrigeren Treibern abgeschlossen werden. Standardmäßig ist der E/A-status-Block in einem IRP die einzigen Informationen, die vom zugrunde liegenden Gerätetreiber an alle IoCompletion-Routinen höherer Treiber zurückgegeben werden.
Das Betriebssystem implementiert Unterstützungsroutinen , die IO_STATUS_BLOCK Werte in vom Aufrufer bereitgestellte Ausgabepuffer schreiben. Siehe z. B. ZwOpenFile oder NtOpenFile. Diese Routinen geben status Codes zurück, die möglicherweise nicht mit den status Codes in den IO_STATUS_BLOCK-Strukturen übereinstimmen. Wenn eine dieser Routinen STATUS_PENDING zurückgibt, sollte der Aufrufer warten, bis der E/A-Vorgang abgeschlossen ist, und dann den status Code in der IO_STATUS_BLOCK-Struktur überprüfen, um die endgültige status des Vorgangs zu bestimmen. Wenn die Routine einen anderen status Code als STATUS_PENDING zurückgibt, sollte der Aufrufer diesen status Code anstelle des status Codes in der IO_STATUS_BLOCK-Struktur verwenden.
Weitere Informationen finden Sie unter E/A-Statusblöcke.
Anforderungen
Anforderung | Wert |
---|---|
Header | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |