Freigeben über


IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)

Diese IOCTL gibt ein Resultset zurück, das die Enumeration aller aktiven Physischen Speichergeräteobjekte (PDOs) enthält, die dem angegebenen Addressable Command Target (ACT) zugeordnet sind. Der Client kann zuerst die erforderliche Puffergröße testen, indem er diese IOCTL auf folgende Weise ausgibt:

DeviceIoControl(
    hDevice,
    IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS,
    &pdoType,
    sizeof(PDO_TYPE),
    NULL,
    0,
    &dwBytesRequired,
    NULL );

Wenn der Ausgabepufferparameter auf NULL festgelegt ist, löscht der E/A-Manager das IRP_INPUT_OPERATION Bit in den IRP-Flags. Nach der Erkennung kann der Speichersilotreiber IoStatus.Information sicher auf die erforderliche Puffergröße festlegen und so dem Client angeben.

Dies funktioniert nur, weil STATUS_BUFFER_OVERFLOW (0x80000005) ein NT_WARNING()-Wert ist, für den der E/A-Manager IoStatus.Information in den lpBytesReturned-Parameter kopiert und diesen Wert an den Client zurückgibt.

Hier ist Vorsicht geboten, da IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS mit METHOD_BUFFERED definiert ist. Daher versucht der E/A-Manager, diese Anzahl von Bytes in den Ausgabepuffer zu kopieren.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

Der Eingabepuffer bei Irp-AssociatedIrp.SystemBuffer> muss einen ULONG-Wert enthalten, der in PDO_TYPE definiert ist.

wobei entweder alle PDOs, nur das Datenträger-PDO, nur die Steuerelement-PDO oder alle Silo-PDOs entsprechend dem angegebenen PDO_TYPE Eingabewert aufgelistet werden.

Eingabepufferlänge

Die Länge einer ULONG.

Ausgabepuffer

Irp-AssociatedIrp.SystemBuffer verweist auf den Puffer, der die PDO-Enumerationsergebnisse> empfängt. Wenn der Client einen Nicht-NULL-Puffer mit der ausgestellten IOCTL bereitgestellt hat, füllt der Treiber ihn nur mit dem Resultset, wenn parameters.DeviceIoControl.Der Rückgabewert STATUS_SUCCESS ist, wenn die Puffergröße ausreichend ist und die Ergebnisse in den Puffer kopiert wurden. Andernfalls wird STATUS_INVALID_BUFFER_SIZE zurückgegeben, und der Ausgabepuffer wird nicht geändert.

Der zurückgegebene Enumerationspuffer enthält ein Resultset, das nach den folgenden Regeln strukturiert ist. Die führende Struktur im Puffer, ENUM_PDO_RESULTS, besteht aus einer Strukturanzahl und einem Array von ENUM_PDO_ENTRY Strukturen.

Länge des Ausgabepuffers

OutputBufferLength gibt eine Puffergröße von ausreichender Länge an, um das gesamte Resultset einzuschließen.

Statusblock

Im Feld Status kann einer der folgenden Werte zurückgegeben werden:

STATUS_SUCCESS: Der Ausgabepuffer enthält die Enumeration der angeforderten PDOs.
STATUS_BUFFER_OVERFLOW: Das Feld Information ist auf die erforderliche Puffergröße festgelegt, um die gesamte Ausgabe des Enumerationsergebnissatzes zu enthalten.
STATUS_INVALID_BUFFER_SIZE: Die angegebene Ausgabepufferlänge reicht nicht aus, um die gesamte Ausgabe des Enumerationsergebnissatzes zu enthalten.

Anforderungen

Anforderung Wert
Header ehstorioctl.h (einschließlich EhStorIoctl.h)