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

另请参阅

IDEREGS

SENDCMDOUTPARAMS