IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT_EX IOCTL (ntddscsi.h)
La demande de code de contrôle IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT_EX est la version étendue de la demande IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT . Cette demande prend en charge les transferts de données bidirectionnels et autorise un bloc de données de commande (CDB) > de 16 octets.
Ce code de contrôle d’E/S permet à une application ou à un pilote de noyau d’envoyer une commande SCSI à un numéro d’unité logique réel désigné. Les restrictions suivantes s’appliquent à l’utilisation de ce code de contrôle d’E/S :
- S’il existe un pilote de classe pour le pseudo LUN, l’application doit envoyer la demande à ce pilote de classe. Par conséquent, une application peut envoyer cette requête directement à un MPIO uniquement s’il n’existe aucun pilote de classe pour l’appareil.
- Toutes les demandes directes doivent être synchrones.
- Les applications ne nécessitent pas de privilèges administratifs pour envoyer une demande directe à un appareil, mais elles doivent disposer d’un accès en lecture/écriture à l’appareil.
- La requête comprend une requête directe SCSI (dans une structure de SCSI_PASS_THROUGH_DIRECT incorporée) ainsi que certaines directives.
- La structure directe SCSI doit répondre aux exigences de ce type, comme décrit dans SCSI_PASS_THROUGH_DIRECT.
- Si la demande doit être envoyée via le DSM qui a revendiqué le numéro d’unité logique réel, cela doit être indiqué. Dans ce cas, le DSM lui-même doit indiquer le même numéro d’unité logique réelle. Sinon, la demande échouera.
- La demande doit spécifier le numéro d’unité logique réel qui est compris par le pseudo LUN en termes d’adresse SCSI de la première ou de son chemin d’accès MPIO, mais pas les deux.
Code principal
Mémoire tampon d'entrée
Parameters.DeviceIoControl.InputBufferLength indique la taille, en octets, de la mémoire tampon sur Irp-AssociatedIrp.SystemBuffer>.
Longueur de la mémoire tampon d’entrée
La mémoire tampon doit être au moins sizeof(MPIO_PASS_THROUGH_PATH_DIRECT_EX) ou, si elle est envoyée par une application 32 bits dans un système d’exploitation 64 bits, sizeof(MPIO_PASS_THROUGH_PATH_DIRECT32_EX).
Mémoire tampon de sortie
Le pilote de port retourne toutes les données de sens de requête et toutes les données transférées de l’appareil vers la mémoire tampon sur Irp-AssociatedIrp.SystemBuffer>.
Longueur de la mémoire tampon de sortie
Les valeurs SenseInfoLength et DataOutTransferLength dans la structure de SCSI_PASS_THROUGH_DIRECT_EX incorporées sont mises à jour pour indiquer la quantité de données transférées.
Bloc d’état
Le champ Informations est défini sur le nombre d’octets retournés dans la mémoire tampon de sortie sur Irp-AssociatedIrp.SystemBuffer>. Le champ État est défini sur STATUS_SUCCESS, ou éventuellement sur STATUS_BUFFER_TOO_SMALL ou STATUS_INVALID_PARAMETER si la valeur longueur d’entrée dans le SCSI_PASS_THROUGH_DIRECT_EX incorporé n’est pas définie de manière incorrecte.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | ntddscsi.h (inclure Ntddscsi.h) |