Partager via


IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)

Ce IOCTL retourne un jeu de résultats contenant l’énumération de tous les objets de périphérique physique (PDO) de stockage actifs associés à la cible de commande adressable (ACT) donnée. Le client peut d’abord rechercher la taille de mémoire tampon requise en émettant ce IOCTL de la manière suivante :

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

Avec le paramètre de mémoire tampon de sortie défini sur NULL, le gestionnaire d’E/S efface le bit IRP_INPUT_OPERATION dans les indicateurs IRP. Lors de la détection de ce paramètre, le pilote de silo de stockage peut définir en toute sécurité IoStatus.Information sur la taille de mémoire tampon requise, ce qui l’indique au client.

Cela fonctionne uniquement parce que STATUS_BUFFER_OVERFLOW (0x80000005) est une valeur NT_WARNING() pour laquelle le gestionnaire d’E/S copie IoStatus.Information dans le paramètre lpBytesReturned, renvoyant cette valeur au client.

La prudence est requise ici, car IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS est défini avec METHOD_BUFFERED. Par conséquent, le gestionnaire d’E/S tente de copier ce nombre d’octets dans la mémoire tampon de sortie.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

La mémoire tampon d’entrée sur Irp-AssociatedIrp.SystemBuffer> doit contenir une valeur ULONG telle que définie dans PDO_TYPE,

où tous les PDO de disque, l’AOP de disque, l’AOP de contrôle ou tous les PDO de silo sont énumérés respectivement en fonction de la valeur d’entrée fournie PDO_TYPE.

Longueur de la mémoire tampon d’entrée

Longueur d’un ULONG.

Mémoire tampon de sortie

Irp-AssociatedIrp.SystemBuffer> pointe vers la mémoire tampon qui recevra les résultats de l’énumération PDO. Si le client a fourni une mémoire tampon non NULL avec le IOCTL émis, le pilote le remplit avec le jeu de résultats uniquement si la valeur de retour est STATUS_SUCCESS si la taille de la mémoire tampon est suffisante et que les résultats ont été copiés dans la mémoire tampon. Sinon, STATUS_INVALID_BUFFER_SIZE est retourné et la mémoire tampon de sortie n’est pas modifiée.

La mémoire tampon d’énumération retournée contient un jeu de résultats structuré selon les règles suivantes. La structure de début dans la mémoire tampon, ENUM_PDO_RESULTS, se compose d’un nombre de structures et d’un tableau de structures ENUM_PDO_ENTRY .

Longueur de la mémoire tampon de sortie

OutputBufferLength indique une taille de mémoire tampon d’une longueur suffisante pour inclure l’ensemble du jeu de résultats.

Bloc d’état

L’une des valeurs suivantes peut être retournée dans le champ État :

STATUS_SUCCESS : la mémoire tampon de sortie contient l’énumération des PDO demandés.
STATUS_BUFFER_OVERFLOW : le champ Informations est défini sur la taille de mémoire tampon requise pour contenir l’ensemble de la sortie du jeu de résultats d’énumération.
STATUS_INVALID_BUFFER_SIZE : la longueur de la mémoire tampon de sortie fournie est insuffisante pour contenir l’intégralité de la sortie du jeu de résultats d’énumération.

Configuration requise

Condition requise Valeur
En-tête ehstorioctl.h (inclure EhStorIoctl.h)