SENDCMDINPARAMS 结构 (ntdddisk.h)
SENDCMDINPARAMS 结构包含 SMART_SEND_DRIVE_COMMAND 和 SMART_RCV_DRIVE_DATA 请求的输入参数(请参阅“备注”)。
语法
typedef struct _SENDCMDINPARAMS {
ULONG cBufferSize;
IDEREGS irDriveRegs;
UCHAR bDriveNumber;
UCHAR bReserved[3];
ULONG dwReserved[4];
UCHAR bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
成员
cBufferSize
包含缓冲区大小(以字节为单位)。
irDriveRegs
包含用于报告 IDE 控制器寄存器内容的 IDEREGS 结构。
bDriveNumber
此成员不透明。 请勿使用它。 作系统将忽略此成员,因为接收请求的物理驱动器取决于调用方在发出请求时使用的句柄。
bReserved[3]
保留。
dwReserved[4]
保留。
bBuffer[1]
指向输入缓冲区的指针。
言论
SENDCMDINPARAMS 结构与 SMART_SEND_DRIVE_COMMAND 和 SMART_RCV_DRIVE_DATA I/O 控制代码请求一起使用。 这些 IOCTL 必须由支持 Self-Monitoring 分析和报告技术的驱动程序处理(SMART)。
SMART_SEND_DRIVE_COMMAND
SMART_SEND_DRIVE_COMMAND 控制代码将以下 SMART 命令之一发送到设备:
- 启用或禁用设备上的报告
- 启用或禁用属性的自动保存
- 立即保存当前属性
- 执行脱机诊断
- 获取当前 SMART 状态
- 写入 SMART 日志
输入参数
Irp->AssociatedIrp.SystemBuffer 的缓冲区包含描述要发送到设备的命令的 SENDCMDINPARAMS 结构。 irDriveRegs.bCommandReg 成员必须指定SMART_CMD。 irDriveRegs.bFeaturesReg 成员必须指定 SMART 子命令。 有关子命令的列表,请参阅 IDEREGS。
如果调用方在 irDriveRegs.bFeaturesReg中指定SMART_WRITE_LOG的 SMART 子命令,则调用方还必须指示要在 irDriveRegs.bSectorCountReg中写入的扇区数。 输入缓冲区大小必须 >= sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE)
。 调用方必须将数据放入 SENDCMDINPARAMS的 bBuffer 成员指示的缓冲区中写入。
Parameters.DeviceIoControl.InputBufferLength 指定输入缓冲区的大小(以字节为单位),必须 >= (sizeof(SENDCMDINPARAMS) - 1)
。
Parameters.DeviceIoControl.OutputBufferLength 指定输出缓冲区的大小(以字节为单位),必须 >= (sizeof(SENDCMDOUTPARAMS) - 1)
。 如果请求 SMART 状态,则输出缓冲区必须 >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS))
。
输出参数
驱动程序将 SENDCMDOUTPARAMS 结构返回到 Irp->AssociatedIrp.SystemBuffer的缓冲区。 如果请求并成功从设备接收 SMART 状态,驱动程序会在输出缓冲区中包含 IDEREGS 结构。
I/O 状态块
当驱动程序将“状态”字段设置为STATUS_SUCCESS时,它将 信息 字段设置为 ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS))
,以便返回 SMART 状态,并为所有其他命令 (sizeof(SENDCMDOUTPARAMS) - 1)
。 如果输入参数不正确或设备中止不支持的命令,驱动程序应将 状态 字段设置为 STATUS_IO_DEVICE_ERROR STATUS_INVALID_PARAMETER。 如果未STATUS_SUCCESS 状态,驱动程序会将 信息 字段设置为零。
SMART_RCV_DRIVE_DATA
SMART_RCV_DRIVE_DATA 控制代码返回 ATA-2 标识数据、SMART 阈值或设备的 SMART 属性。
SMART_RCV_DRIVE_DATA输入参数
Irp->AssociatedIrp.SystemBuffer 的缓冲区包含描述要发送到设备的请求的 SENDCMDINPARAMS 结构。 irDriveRegs.bCommandReg 成员指定在请求标识数据时ID_CMD,并在请求 SMART 数据时SMART_CMD。 有关可分配给功能寄存器的值列表(irDriveRegs.bFeaturesReg),请参阅 IDEREGS。
Parameters.DeviceIoControl.InputBufferLength 指定输入缓冲区的大小(以字节为单位),必须 >= (sizeof(SENDCMDINPARAMS) - 1)
。
Parameters.DeviceIoControl.OutputBufferLength 指定输出缓冲区的大小(以字节为单位),必须 >= (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
。
SMART_RCV_DRIVE_DATA输出参数
驱动程序将 SENDCMDOUTPARAMS 结构和 512 字节的驱动器数据的缓冲区返回到 Irp->AssociatedIrp.SystemBuffer的缓冲区。
如果调用方在 irDriveRegs.bFeaturesReg中指定SMART_READ_LOG的 SMART 子命令,调用方还必须指示要在 irDriveRegs.bSectorCountReg中读取的扇区数。 输出缓冲区大小必须 >= 以下值的最大值:sizeof(SENDCMDOUTPARAMS)
或 sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)
从日志中读取的数据将放置在由 SENDCMDOUTPARAMSbBuffer 成员指定的缓冲区中。
SMART_RCV_DRIVE_DATA I/O 状态块
驱动程序将 信息 字段设置为 (sizeof(SENDCMDOUTPARAMS) - 1 + 512)
时,它将 状态 字段设置为STATUS_SUCCESS。 否则,驱动程序会将 信息 字段设置为零,并将 状态 字段设置为可能STATUS_INVALID_PARAMETER或STATUS_INSUFFICIENT_RESOURCES。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 |
标头 | ntdddisk.h (包括 Ntdddisk.h) |