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) |