Gestion des requêtes Pass-Through SCSI
Un pilote de classe qui génère une requête IOCTL_SCSI_PASS_THROUGH ou une demande de IOCTL_SCSI_PASS_THROUGH_DIRECT est responsable des éléments suivants :
Définition de la longueur de la mémoire tampon utilisateur sur Parameters.DeviceIoControl.InputBufferLength sur au moins sizeof(SCSI_PASS_THROUGH) ou sizeof(SCSI_PASS_THROUGH_DIRECT)
Configuration de l’emplacement de la pile d’E/S du pilote de port de stockage comme d’habitude
Définition de MinorFunction dans l’IRP sur IRP_MJ_DEVICE_CONTROL, ce qui marque la demande comme ayant été traitée par un pilote de classe de stockage.
À la réception d’une demande de IOCTL_SCSI_PASS_THROUGH ou de IOCTL_SCSI_PASS_THROUGH_DIRECT d’un pilote de niveau supérieur, la routine DispatchDeviceControl d’un pilote de classe de stockage est chargée de vérifier la validité de la commande SCSI incorporée (CDB) et, si la commande est valide pour son appareil, d’envoyer la demande au pilote de port de stockage.
Si l’emplacement de la pile d’E/S du pilote de port pour une demande IOCTL_SCSI_PASS_THROUGH ou IOCTL_SCSI_PASS_THROUGH_DIRECT n’a pas son champ MinorFunction défini avec IRP_MJ_DEVICE_CONTROL, le pilote de port suppose que la demande provient directement d’une application et qu’il n’existe aucun pilote de classe pour le type d’appareil cible. Il s’agit d’une erreur d’application d’envoyer une telle demande directement au pilote de port pour un périphérique qui a été revendiqué par un pilote de classe de stockage.
Le pilote de port ne case activée pas la validité de la commande SCSI incorporée dans une telle demande directe.