Condividi tramite


IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)

Questo IOCTL restituisce un set di risultati contenente l'enumerazione di tutti gli oggetti dispositivo fisico (PDO) di archiviazione attivi associati alla destinazione del comando indirizzabile specificata (ACT). Il client può prima eseguire il probe per le dimensioni del buffer necessarie eseguendo questo IOCTL nel modo seguente:

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

Con il parametro del buffer di output impostato su NULL, il gestore di I/O cancella il bit IRP_INPUT_OPERATION nei flag IRP. Dopo aver rilevato questo problema, il driver del silo di archiviazione può impostare in modo sicuro IoStatus.Information sulla dimensione del buffer richiesta, indicandola quindi sul client.

Questo funziona solo perché STATUS_BUFFER_OVERFLOW (0x80000005) è un valore NT_WARNING() per il quale gestione I/O copia IoStatus.Information nel parametro lpBytesReturned, restituendo tale valore al client.

È necessario prestare attenzione perché IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS è definito con METHOD_BUFFERED, pertanto il gestore di I/O tenterà di copiare questo numero di byte nel buffer di output.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

Il buffer di input in Irp->AssociatedIrp.SystemBuffer deve contenere un valore ULONG come definito in PDO_TYPE,

dove tutti i PDO, solo il PDO del disco, solo il PDO del controllo o tutti i PDO silo vengono enumerati rispettivamente in base al valore di input fornito PDO_TYPE.

Lunghezza del buffer di input

Lunghezza di una ULONG.

Buffer di output

Irp->AssociatedIrp.SystemBuffer punta al buffer che riceverà i risultati dell'enumerazione PDO. Se il client ha fornito un bufferNULL non con l'IOCTL emesso, il driver lo riempie con il set di risultati solo se il parametro Parameters.DeviceIoControl.Il valore restituito è STATUS_SUCCESS se le dimensioni del buffer sono sufficienti e i risultati sono stati copiati nel buffer. In caso contrario, viene restituito STATUS_INVALID_BUFFER_SIZE e il buffer di output non viene modificato.

Il buffer di enumerazione restituito contiene un set di risultati strutturato in base alle regole seguenti. La struttura iniziale nel buffer, ENUM_PDO_RESULTS, è costituita da un conteggio di strutture e da una matrice di strutture ENUM_PDO_ENTRY.

Lunghezza del buffer di output

OutputBufferLength indica una dimensione del buffer di lunghezza sufficiente per includere l'intero set di risultati.

Blocco di stato

È possibile restituire uno dei valori seguenti nel campo Stato:

STATUS_SUCCESS: il buffer di output contiene l'enumerazione dei PDO richiesti.
STATUS_BUFFER_OVERFLOW: il campo Informazioni viene impostato sulla dimensione del buffer necessaria per contenere l'intero output del set di risultati dell'enumerazione.
STATUS_INVALID_BUFFER_SIZE: la lunghezza del buffer di output specificata non è sufficiente per contenere l'intero output del set di risultati dell'enumerazione.

Fabbisogno

Requisito Valore
intestazione ehstorioctl.h (include EhStorIoctl.h)