Compartilhar via


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)

Confira também

IDEREGS

SENDCMDOUTPARAMS