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 deIDEREGSusada 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.

Observações

A estrutura de SENDCMDINPARAMS é usada com as solicitações de código de controle de E/S de SMART_SEND_DRIVE_COMMAND e SMART_RCV_DRIVE_DATA. Esses IOCTLs devem ser tratados 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 status SMART atual
  • Gravar no log SMART

Parâmetros de entrada

O buffer em >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 para gravar no buffer indicado pelo membro bBuffer do 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 status SMART estiver sendo solicitado, o buffer de saída deverá ser >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS)).

Parâmetros de saída

O driver retorna a estruturaSENDCMDOUTPARAMS para o buffer em >AssociatedIrp.SystemBuffer. Se o status SMART foi solicitado e recebido com êxito do dispositivo, o driver inclui 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 é definido como ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS)) para retornar o status SMART e (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 STATUS_IO_DEVICE_ERROR se o dispositivo anular um comando que não oferece 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 >>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 dados de identificação são solicitados e SMART_CMD quando 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 deSENDCMDOUTPARAMS e um buffer de 512 bytes de dados de unidade para o buffer em >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 bBuffer membro do SENDCMDOUTPARAMS.

SMART_RCV_DRIVE_DATA bloco de status de E/S

O driver define o campo informações de como (sizeof(SENDCMDOUTPARAMS) - 1 + 512) quando define o campo status como STATUS_SUCCESS. Caso contrário, o driver define o campo de Informações como zero e o campo de Status como possivelmente STATUS_INVALID_PARAMETER ou STATUS_INSUFFICIENT_RESOURCES.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 2000
cabeçalho ntdddisk.h (inclua Ntdddisk.h)

Consulte também

IDEREGS

SENDCMDOUTPARAMS