Estrutura SENDCMDINPARAMS (ntdddisk.h)
A estrutura SENDCMDINPARAMS contém os parâmetros de entrada para as solicitações de SMART_SEND_DRIVE_COMMAND e SMART_RCV_DRIVE_DATA (consulte Comentários).
Sintaxe
typedef struct _SENDCMDINPARAMS {
ULONG cBufferSize;
IDEREGS irDriveRegs;
UCHAR bDriveNumber;
UCHAR bReserved[3];
ULONG dwReserved[4];
UCHAR bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
Membros
cBufferSize
Contém o tamanho do buffer, em bytes.
irDriveRegs
Contém uma estrutura IDEREGS usada para relatar o conteúdo dos registros do controlador IDE.
bDriveNumber
Este membro é opaco. Não o use. O sistema operacional ignora esse membro, pois a unidade física que recebe a solicitação depende do identificador que o chamador usa ao fazer a solicitação.
bReserved[3]
Reservado.
dwReserved[4]
Reservado.
bBuffer[1]
Ponteiro para o buffer de entrada.
Comentários
A estrutura SENDCMDINPARAMS é usada com as solicitações de código de controle de E/S SMART_SEND_DRIVE_COMMAND e SMART_RCV_DRIVE_DATA . Essas IOCTLs devem ser tratadas por drivers que dão suporte a Self-Monitoring SMART (Analysis and Reporting Technology).
SMART_SEND_DRIVE_COMMAND
O código de controle SMART_SEND_DRIVE_COMMAND envia um dos seguintes comandos SMART para o dispositivo:
- Habilitar ou desabilitar relatórios no dispositivo
- Habilitar ou desabilitar o salvamento automático de atributos
- Salvar atributos atuais agora
- Executar diagnóstico offline
- Obter o SMART status atual
- Gravar no log SMART
Parâmetros de Entrada
O buffer em Irp-AssociatedIrp.SystemBuffer> contém uma estrutura SENDCMDINPARAMS que descreve o comando que está sendo enviado para o dispositivo. O membro irDriveRegs.bCommandReg deve especificar SMART_CMD. O membro irDriveRegs.bFeaturesReg deve especificar um subcomando SMART. Para obter uma lista de subcomandos, consulte IDEREGS.
Se o chamador especificar um subcomando SMART de SMART_WRITE_LOG em irDriveRegs.bFeaturesReg, o chamador também deverá indicar o número de setores a serem gravados em irDriveRegs.bSectorCountReg. O tamanho do buffer de entrada deve ser >= sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE)
. O chamador deve colocar os dados a serem gravados no buffer indicado pelo membro bBuffer de SENDCMDINPARAMS.
Parameters.DeviceIoControl.InputBufferLength especifica o tamanho em, bytes, do buffer de entrada, que deve ser >= (sizeof(SENDCMDINPARAMS) - 1)
.
Parameters.DeviceIoControl.OutputBufferLength especifica o tamanho, em bytes, do buffer de saída, que deve ser >= (sizeof(SENDCMDOUTPARAMS) - 1)
. Se o SMART status estiver sendo solicitado, o buffer de saída deverá ser >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS))
.
Parâmetros de saída
O driver retorna a estrutura SENDCMDOUTPARAMS para o buffer em Irp-AssociatedIrp.SystemBuffer>. Se o SMART status tiver sido solicitado e recebido com êxito do dispositivo, o driver incluirá a estrutura IDEREGS no buffer de saída.
Bloco de Status de E/S
Quando o driver define o campo Status como STATUS_SUCCESS, ele define o campo Informações como para ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS))
retornar SMART status e como (sizeof(SENDCMDOUTPARAMS) - 1)
para todos os outros comandos. O driver deve definir o campo Status como STATUS_INVALID_PARAMETER se um parâmetro de entrada estiver incorreto ou para STATUS_IO_DEVICE_ERROR se o dispositivo anular um comando ao qual não dá suporte. Se Status não for STATUS_SUCCESS, o driver definirá o campo Informações como zero.
SMART_RCV_DRIVE_DATA
O código de controle SMART_RCV_DRIVE_DATA retorna os dados de identificação do ATA-2, os limites SMART ou os atributos SMART para o dispositivo.
Parâmetros de entrada SMART_RCV_DRIVE_DATA
O buffer em Irp-AssociatedIrp.SystemBuffer> contém uma estrutura SENDCMDINPARAMS que descreve a solicitação que está sendo enviada ao dispositivo. O membro irDriveRegs.bCommandReg especifica ID_CMD quando os dados de identificação são solicitados e SMART_CMD quando os dados SMART são solicitados. Para obter uma lista de valores que podem ser atribuídos ao registro de recursos (irDriveRegs.bFeaturesReg), consulte IDEREGS.
Parameters.DeviceIoControl.InputBufferLength especifica o tamanho, em bytes, do buffer de entrada, que deve ser >= (sizeof(SENDCMDINPARAMS) - 1)
.
Parameters.DeviceIoControl.OutputBufferLength especifica o tamanho, em bytes, do buffer de saída, que deve ser >= (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
.
Parâmetros de saída SMART_RCV_DRIVE_DATA
O driver retorna a estrutura SENDCMDOUTPARAMS e um buffer de 512 bytes de dados da unidade para o buffer em Irp-AssociatedIrp.SystemBuffer>.
Se o chamador especificar um subcomando SMART de SMART_READ_LOG em irDriveRegs.bFeaturesReg, o chamador também deverá indicar o número de setores a serem lidos em irDriveRegs.bSectorCountReg. O tamanho do buffer de saída deve ser >= o máximo dos seguintes valores: sizeof(SENDCMDOUTPARAMS)
ou sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)
Os dados lidos do log serão colocados no buffer especificado pelo membro bBuffer de SENDCMDOUTPARAMS.
SMART_RCV_DRIVE_DATA bloco de status de E/S
O driver define o campo (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
Informações como quando define o campo Status como STATUS_SUCCESS. Caso contrário, o driver define o campo Informações como zero e o campo Status como possivelmente STATUS_INVALID_PARAMETER ou STATUS_INSUFFICIENT_RESOURCES.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 |
Cabeçalho | ntdddisk.h (inclua Ntdddisk.h) |