Partager via


IOCTL_SCSI_MINIPORT_DSM IOCTL (scsi.h)

Une notification DSM (Data Set Management) est transférée vers un pilote miniport dans une demande de code de contrôle IOCTL_SCSI_MINIPORT_DSM . La demande IOCTL_SCSI_MINIPORT_DSM est une sous-IOCTL de IOCTL_SCSI_MINIPORT. Ce IOCTL généré par StorPort en réponse à une action DSM, puis envoyé au miniport en tant que STORAGE_REQUEST_BLOCK (SRB) avec un type de fonction de SRB_FUNCTION_IO_CONTROL. Les données d’entrée et de sortie sont contenues dans le bloc de données SRB.

Note Les modèles de pilote de port SCSI et de pilote miniport SCSI peuvent être modifiés ou indisponibles à l’avenir. Au lieu de cela, nous vous recommandons d’utiliser les modèles de pilote Storport et de pilote Miniport Storport .
 

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

La mémoire tampon spécifiée dans le membre DataBuffer du SRB doit contenir une structure SRB_IO_CONTROL et une structure DSM_NOTIFICATION_REQUEST_BLOCK .

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

DataTransferLength indique la taille, en octets, de la mémoire tampon, qui doit être au moins sizeof (SRB_IO_CONTROL) + sizeof(DSM_NOTIFICATION_REQUEST_BLOCK), avec un stockage supplémentaire pour les structures MP_DEVICE_DATA_SET_RANGE incluses.

Mémoire tampon de sortie

Une structure SRB_IO_CONTROL mise à jour est retournée à la mémoire tampon de données dans le SRB. Le SrbStatus contient le résultat du traitement de la demande par le miniport.

Longueur de la mémoire tampon de sortie

Longueur d’une structure SRB_IO_CONTROL .

Bloc d’état

Le status résultant de la demande de fonction est défini dans le membre SrbStatus de SRB_IO_CONTROL. Voici les codes ioc status TL du disque DSM.

État du SRB Description
SRB_STATUS_SUCCESS La demande s’est terminée avec succès.
SRB_STATUS_INVALID_REQUEST La demande contient une taille de mémoire tampon non valide

Remarques

DSM_NOTIFICATION_REQUEST_BLOCK

Une structure de DSM_NOTIFICATION_REQUEST_BLOCK suit immédiatement la structure SRB_IO_CONTROL dans la mémoire tampon de données du SRB. DSM_NOTIFICATION_REQUEST_BLOCK est défini dans ntddscsi.h comme suit.

typedef struct _DSM_NOTIFICATION_REQUEST_BLOCK {
    ULONG   Version;
    ULONG   Size;
    ULONG   NotifyFLags;
    ULONG   DataSetProfile;
    ULONG   Reserved[3];
    ULONG   DataSetRangesCount;
    MP_DEVICE_DATA_SET_RANGE DataSetRanges[ANYSIZE_ARRAY];
} DSM_NOTIFICATION_REQUEST_BLOCK, *PDSM_NOTIFICATION_REQUEST_BLOCK;

MP_DEVICE_DATA_SET_RANGE

Les plages LBA sont incluses dans le membre DataSetRanges de DSM_NOTIFICATION_REQUEST_BLOCK en tant que tableau de structures MP_DEVICE_DATA_SET_RANGE . MP_DEVICE_DATA_SET_RANGE est défini dans ntddscsi.h comme suit.

typedef struct _MP_DEVICE_DATA_SET_RANGE {
    LONGLONG    StartingOffset;
    ULONGLONG   LengthInBytes;
} MP_DEVICE_DATA_SET_RANGE, *PMP_DEVICE_DATA_SET_RANGE;

La structure DSM_NOTIFICATION_REQUEST_BLOCK se trouve après la structure SRB_IO_CONTROL dans le DataBuffer du SRB.

La structure SRB_IO_CONTROL de ce IOCTL contient IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION dans son membre Signature et IOCTL_SCSI_MINIPORT_DSM dans le membre ControlCode .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.1.
En-tête scsi.h (inclure Ntddscsi.h, Storport.h)

Voir aussi

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK