Поделиться через


IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG IOCTL (ntddstor.h)

Драйвер может использовать IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG для получения внутренних данных о состоянии устройства.

Основной код

IRP_MJ_INTERNAL_DEVICE_CONTROL

Входной буфер

Структура GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST, определяющая тип данных для запроса.

Длина входного буфера

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

Выходной буфер

Драйвер возвращает выходные данные в буфер по адресу Irp-AssociatedIrp.SystemBuffer>. Этот буфер содержит структуру DEVICE_INTERNAL_STATUS_DATA с внутренним состоянием устройства.

Длина выходного буфера

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

Буфер входных и выходных данных

Недоступно

Длина входного/выходного буфера

Недоступно

Блок состояния

Irp->IoStatus.Status имеет значение STATUS_SUCCESS, если запрос выполнен успешно. В противном случае для параметра Состояние устанавливается соответствующее условие ошибки в виде кода NTSTATUS. Дополнительные сведения см. в разделе Значения NTSTATUS.

Комментарии

IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG возвращает журнал телеметрии устройства, инициированного узлом, из любого устройства хранения. В следующем псевдокоде показано, как запросить заголовок данных телеметрии:

// Allocate a GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST structure, then
// initialize it with a data header request:
//   request.Version = sizeof(GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST);
//   request.Size = sizeof(GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST);
//   request.RequestDataType = DeviceCurrentInternalStatusDataHeader;

// Allocate a DEVICE_INTERNAL_STATUS_DATA structure in which
// to return the header data, with outputBufferLength set to
// (sizeof(DEVICE_INTERNAL_STATUS_DATA) + 512).

// Get the device internal status data.
BOOL result = TRUE;
ULONG returnedLength = 0;
result = DeviceIoControl(deviceHandle,
            IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG,
            &request,
            sizeof(GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST),
            &outputBuffer,
            outputBufferLength,
            &returnedLength,
            NULL);

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 2004
Верхняя часть ntddstor.h

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

DEVICE_INTERNAL_STATUS_DATA

GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST