SENDCMDINPARAMS 结构 (ntdddisk.h)

SENDCMDINPARAMS 结构包含SMART_SEND_DRIVE_COMMANDSMART_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_COMMANDSMART_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)

从日志中读取的数据将放在 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)

另请参阅

IDEREGS

SENDCMDOUTPARAMS