IOCTL_SCSI_MINIPORT_DSM IOCTL (storport.h)
Uma notificação de DSM (Gerenciamento de Conjunto de Dados) é transferida para um driver de miniporte em uma solicitação de código de controle IOCTL_SCSI_MINIPORT_DSM . A solicitação IOCTL_SCSI_MINIPORT_DSM é um sub-IOCTL de IOCTL_SCSI_MINIPORT. Esse IOCTL gerado pelo StorPort em resposta a uma ação DSM e, em seguida, enviado para o miniporto como um SRB (STORAGE_REQUEST_BLOCK ) com um tipo de função de SRB_FUNCTION_IO_CONTROL. Os dados de entrada e saída estão contidos no bloco de dados SRB.
Código principal
Buffer de entrada
O buffer especificado no membro DataBuffer do SRB deve conter uma estrutura SRB_IO_CONTROL e uma estrutura DSM_NOTIFICATION_REQUEST_BLOCK .
Comprimento do buffer de entrada
DataTransferLength indica o tamanho, em bytes, do buffer, que deve ser pelo menos sizeof (SRB_IO_CONTROL) + sizeof(DSM_NOTIFICATION_REQUEST_BLOCK), com armazenamento adicional para as estruturas de MP_DEVICE_DATA_SET_RANGE incluídas.
Buffer de saída
Uma estrutura de SRB_IO_CONTROL atualizada é retornada ao buffer de dados no SRB. O SrbStatus contém o resultado do processamento do miniporto da solicitação.
Comprimento do buffer de saída
O comprimento de uma estrutura SRB_IO_CONTROL .
Bloco de status
O status resultante da solicitação de função é definido no membro SrbStatus de SRB_IO_CONTROL. Veja a seguir os códigos de status ioctl de disco DSM.
SRB Status | Descrição |
---|---|
SRB_STATUS_SUCCESS | A solicitação foi concluída com êxito. |
SRB_STATUS_INVALID_REQUEST | A solicitação contém um tamanho de buffer inválido |
Comentários
DSM_NOTIFICATION_REQUEST_BLOCK
Uma estrutura DSM_NOTIFICATION_REQUEST_BLOCK segue imediatamente a estrutura SRB_IO_CONTROL no buffer de dados do SRB. DSM_NOTIFICATION_REQUEST_BLOCK é definido em ntddscsi.h como o seguinte.
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
Os intervalos LBA são incluídos no membro em DataSetRanges de DSM_NOTIFICATION_REQUEST_BLOCK como uma matriz de estruturas de MP_DEVICE_DATA_SET_RANGE . MP_DEVICE_DATA_SET_RANGE é definido em ntddscsi.h como o seguinte.
typedef struct _MP_DEVICE_DATA_SET_RANGE {
LONGLONG StartingOffset;
ULONGLONG LengthInBytes;
} MP_DEVICE_DATA_SET_RANGE, *PMP_DEVICE_DATA_SET_RANGE;
A estrutura DSM_NOTIFICATION_REQUEST_BLOCK está localizada após a estrutura SRB_IO_CONTROL no DataBuffer do SRB.
A estrutura SRB_IO_CONTROL para esse IOCTL contém IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION em seu membro Signature e IOCTL_SCSI_MINIPORT_DSM no membro ControlCode .
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8.1. |
Cabeçalho | storport.h (inclua Ntddscsi.h, Storport.h) |