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_INVALID_PARAMETER;如果设备中止了不支持的命令,驱动程序应将“状态”字段设置为STATUS_IO_DEVICE_ERROR。 如果未STATUS_SUCCESS Status ,驱动程序会将 “信息” 字段设置为零。
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)
从日志中读取的数据将放在 SENDCMDOUTPARAMS 的 bBuffer 成员指定的缓冲区中。
SMART_RCV_DRIVE_DATA I/O 状态块
驱动程序将“状态”字段(sizeof(SENDCMDOUTPARAMS) - 1 + 512)
设置为“STATUS_SUCCESS”时,将“信息”字段设置为 。 否则,驱动程序会将 “信息 ”字段设置为零,将 “状态” 字段设置为“可能STATUS_INVALID_PARAMETER或STATUS_INSUFFICIENT_RESOURCES。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 |
标头 | ntdddisk.h (包括 Ntdddisk.h) |