IOCTL_SCSI_MINIPORT_DSM IOCTL (storport.h)
Una notificación de administración de conjuntos de datos (DSM) se transfiere a un controlador de minipuerto en una solicitud de código de control IOCTL_SCSI_MINIPORT_DSM . La solicitud de IOCTL_SCSI_MINIPORT_DSM es un sub-IOCTL de IOCTL_SCSI_MINIPORT. Este IOCTL generado por StorPort en respuesta a una acción DSM y, a continuación, se envía al miniporte como un STORAGE_REQUEST_BLOCK (SRB) con un tipo de función de SRB_FUNCTION_IO_CONTROL. Los datos de entrada y salida se encuentran en el bloque de datos SRB.
Código principal
Búfer de entrada
El búfer especificado en el miembro DataBuffer de la SRB debe contener una estructura de SRB_IO_CONTROL y una estructura de DSM_NOTIFICATION_REQUEST_BLOCK .
Longitud del búfer de entrada
DataTransferLength indica el tamaño, en bytes, del búfer, que debe ser al menos sizeof (SRB_IO_CONTROL) + sizeof(DSM_NOTIFICATION_REQUEST_BLOCK), con almacenamiento adicional para las estructuras MP_DEVICE_DATA_SET_RANGE incluidas.
Búfer de salida
Se devuelve una estructura de SRB_IO_CONTROL actualizada al búfer de datos de la SRB. SrbStatus contiene el resultado del procesamiento del miniporte de la solicitud.
Longitud del búfer de salida
Longitud de una estructura de SRB_IO_CONTROL .
Bloque de estado
El estado resultante de la solicitud de función se establece en el miembro SrbStatus de SRB_IO_CONTROL. A continuación se muestran los códigos de estado IOCTL del disco DSM.
Estado de SRB | Descripción |
---|---|
SRB_STATUS_SUCCESS | La solicitud se completó correctamente. |
SRB_STATUS_INVALID_REQUEST | La solicitud contiene un tamaño de búfer no válido. |
Comentarios
DSM_NOTIFICATION_REQUEST_BLOCK
Una estructura de DSM_NOTIFICATION_REQUEST_BLOCK sigue inmediatamente la estructura de SRB_IO_CONTROL en el búfer de datos de la SRB. DSM_NOTIFICATION_REQUEST_BLOCK se define en ntddscsi.h como se indica a continuación.
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
Los intervalos LBA se incluyen en el miembro de DataSetRanges de DSM_NOTIFICATION_REQUEST_BLOCK como una matriz de estructuras de MP_DEVICE_DATA_SET_RANGE . MP_DEVICE_DATA_SET_RANGE se define en ntddscsi.h como se indica a continuación.
typedef struct _MP_DEVICE_DATA_SET_RANGE {
LONGLONG StartingOffset;
ULONGLONG LengthInBytes;
} MP_DEVICE_DATA_SET_RANGE, *PMP_DEVICE_DATA_SET_RANGE;
La estructura DSM_NOTIFICATION_REQUEST_BLOCK se encuentra después de la estructura de SRB_IO_CONTROL en DataBuffer de la SRB.
La estructura SRB_IO_CONTROL de este IOCTL contiene IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION en su miembro Signature y IOCTL_SCSI_MINIPORT_DSM en el miembro ControlCode .
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8.1. |
Encabezado | storport.h (include Ntddscsi.h, Storport.h) |