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 |