Структура 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

Содержит структуру IDEREGS, используемую для создания отчетов о содержимом регистров контроллера IDE.

bDriveNumber

Этот элемент непрозрачный. Не используйте его. Операционная система игнорирует этот элемент, так как физический диск, получающий запрос, зависит от дескриптора, используемого вызывающим объектом при выполнении запроса.

bReserved[3]

Зарезервировано.

dwReserved[4]

Зарезервировано.

bBuffer[1]

Указатель на входной буфер.

Комментарии

Структура SENDCMDINPARAMS используется с SMART_SEND_DRIVE_COMMAND и SMART_RCV_DRIVE_DATA запросов кода управления вводом-выводом. Эти 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.

Если вызывающий объект задает подкоманду SMART SMART_WRITE_LOG в irDriveRegs.bFeaturesReg, вызывающий объект также должен указать количество секторов для записи в irDriveRegs.bSectorCountReg. Размер входного буфера должен быть >= sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE). Вызывающий объект должен поместить данные для записи в буфер, указанный членом bBuffer sendCMDINPARAMS.

Parameters.DeviceIoControl.InputBufferLength задает размер входного буфера в байтах, который должен иметь >значение = (sizeof(SENDCMDINPARAMS) - 1).

Parameters.DeviceIoControl.OutputBufferLength указывает размер выходного буфера в байтах, который должен иметь >значение = (sizeof(SENDCMDOUTPARAMS) - 1). Если запрашивается состояние SMART, выходной буфер должен иметь значение >= (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS)).

Выходные параметры

Драйвер возвращает структуру SENDCMDOUTPARAMS в буфер по адресу Irp-AssociatedIrp.SystemBuffer>. Если состояние SMART было запрошено и успешно получено от устройства, драйвер включает структуру IDEREGS в выходной буфер.

Блок состояния ввода-вывода

Когда драйвер задает для поля Состояние значение STATUS_SUCCESS, для поля Сведения задано значение ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS)) для возврата состояния SMART и значение для (sizeof(SENDCMDOUTPARAMS) - 1) всех остальных команд. Драйвер должен задать в поле Состояние значение STATUS_INVALID_PARAMETER, если входной параметр неверен, или STATUS_IO_DEVICE_ERROR, если устройство прерывает команду, не поддерживаемую. Если состояние не STATUS_SUCCESS, драйвер задает для поля Сведения значение 0.

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

Если вызывающий объект указывает подкоманду SMART SMART_READ_LOG в irDriveRegs.bFeaturesReg, вызывающий объект также должен указать количество секторов для чтения в irDriveRegs.bSectorCountReg. Размер выходного буфера должен быть >= максимум следующих значений: sizeof(SENDCMDOUTPARAMS) или sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)

Данные, считываемые из журнала, будут помещены в буфер, указанный членом bBuffersendCMDOUTPARAMS.

SMART_RCV_DRIVE_DATA блок состояния ввода-вывода

Драйвер задает для поля Сведения значение , (sizeof(SENDCMDOUTPARAMS) - 1 + 512) если для поля Состояние задано значение STATUS_SUCCESS. В противном случае драйвер задает для поля Сведения нулевое значение, а поле Состояние — возможно, STATUS_INVALID_PARAMETER или STATUS_INSUFFICIENT_RESOURCES.

Требования

Требование Значение
Минимальная версия клиента Windows 2000
Верхняя часть ntdddisk.h (включая Ntdddisk.h)

См. также раздел

IDEREGS

SENDCMDOUTPARAMS