Estructura SENDCMDINPARAMS (ntdddisk.h)

La estructura SENDCMDINPARAMS contiene los parámetros de entrada para las solicitudes de SMART_SEND_DRIVE_COMMAND y SMART_RCV_DRIVE_DATA (vea Comentarios).

Sintaxis

typedef struct _SENDCMDINPARAMS {
  ULONG   cBufferSize;
  IDEREGS irDriveRegs;
  UCHAR   bDriveNumber;
  UCHAR   bReserved[3];
  ULONG   dwReserved[4];
  UCHAR   bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;

Miembros

cBufferSize

Contiene el tamaño del búfer, en bytes.

irDriveRegs

Contiene una estructura IDEREGS que se usa para informar del contenido de los registros del controlador IDE.

bDriveNumber

Este miembro es opaco. No lo utilice. El sistema operativo omite este miembro, ya que la unidad física que recibe la solicitud depende del identificador que usa el autor de la llamada al realizar la solicitud.

bReserved[3]

Reservado.

dwReserved[4]

Reservado.

bBuffer[1]

Puntero al búfer de entrada.

Comentarios

La estructura SENDCMDINPARAMS se usa con las solicitudes de código de control de E/S SMART_SEND_DRIVE_COMMAND y SMART_RCV_DRIVE_DATA . Estos ICTL deben controlarse mediante controladores que admiten Self-Monitoring Tecnología de análisis e informes (SMART).

SMART_SEND_DRIVE_COMMAND

El código de control SMART_SEND_DRIVE_COMMAND envía uno de los siguientes comandos SMART al dispositivo:

  • Habilitación o deshabilitación de informes en el dispositivo
  • Habilitar o deshabilitar el guardado automático de atributos
  • Guardar los atributos actuales ahora
  • Ejecución de diagnósticos sin conexión
  • Obtención del estado actual de SMART
  • Escritura en el registro SMART

Parámetros de entrada

El búfer de Irp-AssociatedIrp.SystemBuffer> contiene una estructura SENDCMDINPARAMS que describe el comando que se envía al dispositivo. El miembro irDriveRegs.bCommandReg debe especificar SMART_CMD. El miembro irDriveRegs.bFeaturesReg debe especificar un subcomando SMART. Para obtener una lista de subcomandos, consulte IDEREGS.

Si el autor de la llamada especifica un subcomando SMART de SMART_WRITE_LOG en irDriveRegs.bFeaturesReg, el llamador también debe indicar el número de sectores que se van a escribir en irDriveRegs.bSectorCountReg. El tamaño del búfer de entrada debe ser >= sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE). El autor de la llamada debe colocar los datos para escribir en el búfer indicado por el miembro bBuffer de SENDCMDINPARAMS.

Parameters.DeviceIoControl.InputBufferLength especifica el tamaño en bytes del búfer de entrada, que debe ser >= (sizeof(SENDCMDINPARAMS) - 1).

Parameters.DeviceIoControl.OutputBufferLength especifica el tamaño, en bytes, del búfer de salida, que debe ser >= (sizeof(SENDCMDOUTPARAMS) - 1). Si se solicita el estado SMART, el búfer de salida debe ser >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS)).

Parámetros de salida

El controlador devuelve la estructura SENDCMDOUTPARAMS al búfer en Irp-AssociatedIrp.SystemBuffer>. Si se solicitó y recibió correctamente el estado SMART del dispositivo, el controlador incluye la estructura IDEREGS en el búfer de salida.

Bloque de estado de entrada/salida

Cuando el controlador establece el campo Estado en STATUS_SUCCESS, establece el campo Información en ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS)) para devolver el estado SMART y en (sizeof(SENDCMDOUTPARAMS) - 1) para todos los demás comandos. El controlador debe establecer el campo Estado en STATUS_INVALID_PARAMETER si un parámetro de entrada es incorrecto o para STATUS_IO_DEVICE_ERROR si el dispositivo anula un comando que no admite. Si Status no es STATUS_SUCCESS, el controlador establece el campo Información en cero.

SMART_RCV_DRIVE_DATA

El código de control SMART_RCV_DRIVE_DATA devuelve el ATA-2 para identificar los datos, los umbrales SMART o los atributos SMART del dispositivo.

parámetros de entrada de SMART_RCV_DRIVE_DATA

El búfer de Irp-AssociatedIrp.SystemBuffer> contiene una estructura SENDCMDINPARAMS que describe la solicitud que se envía al dispositivo. El miembro irDriveRegs.bCommandReg especifica ID_CMD cuando se solicitan datos de identificación y SMART_CMD cuando se solicitan datos SMART. Para obtener una lista de valores que se pueden asignar al registro de características (irDriveRegs.bFeaturesReg), consulte IDEREGS.

Parameters.DeviceIoControl.InputBufferLength especifica el tamaño, en bytes, del búfer de entrada, que debe ser >= (sizeof(SENDCMDINPARAMS) - 1).

Parameters.DeviceIoControl.OutputBufferLength especifica el tamaño, en bytes, del búfer de salida, que debe ser >= (sizeof(SENDCMDOUTPARAMS) - 1 + 512).

parámetros de salida de SMART_RCV_DRIVE_DATA

El controlador devuelve la estructura SENDCMDOUTPARAMS y un búfer de 512 bytes de datos de unidad al búfer en Irp-AssociatedIrp.SystemBuffer>.

Si el autor de la llamada especifica un subcomando SMART de SMART_READ_LOG en irDriveRegs.bFeaturesReg, el autor de la llamada también debe indicar el número de sectores que se van a leer en irDriveRegs.bSectorCountReg. El tamaño del búfer de salida debe ser >= el máximo de los valores siguientes: sizeof(SENDCMDOUTPARAMS) o sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)

Los datos leídos del registro se colocarán en el búfer especificado por el miembro bBuffer de SENDCMDOUTPARAMS.

bloque de estado de E/S de SMART_RCV_DRIVE_DATA

El controlador establece el campo (sizeof(SENDCMDOUTPARAMS) - 1 + 512)Información en cuando establece el campo Estado en STATUS_SUCCESS. De lo contrario, el controlador establece el campo Información en cero y el campo Estado en posiblemente STATUS_INVALID_PARAMETER o STATUS_INSUFFICIENT_RESOURCES.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000
Encabezado ntdddisk.h (include Ntdddisk.h)

Consulte también

IDEREGS

SENDCMDOUTPARAMS