Condividi tramite


IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)

Questo oggetto IOCTL restituisce un set di risultati contenente l'enumerazione di tutti gli oggetti dispositivo fisici di archiviazione attivi associati alla destinazione del comando indirizzabile specificata (ACT). Il client può prima eseguire il probe per le dimensioni del buffer necessarie emettendo 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, la gestione I/O cancella il bit IRP_INPUT_OPERATION bit nei flag IRP. Dopo aver rilevato questo problema, il driver silo di archiviazione può impostare in modo sicuro IoStatus.Information sulle dimensioni del buffer necessarie, indicandolo quindi sul client.

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

È necessario prestare attenzione qui perché IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS è definito con METHOD_BUFFERED, pertanto gestione 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 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 un ULONG.

Buffer di output

Irp-AssociatedIrp.SystemBuffer> punta al buffer che riceverà i risultati dell'enumerazione PDO. Se il client ha fornito un buffer non NULL con IOCTL rilasciato, il driver lo riempie con il set di risultati solo se il valore Parameters.DeviceIoControl.Il valore restituito è STATUS_SUCCESS se la dimensione del buffer è sufficiente e i risultati sono stati copiati nel buffer. In caso contrario, STATUS_INVALID_BUFFER_SIZE viene restituito 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 principale nel buffer, ENUM_PDO_RESULTS, è costituita da un conteggio della struttura 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 dello stato

Uno dei valori seguenti può essere restituito nel campo Stato:

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

Requisiti

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