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> 上参数缓冲区的大小(以字节为单位),该缓冲区必须为 > (GET_DEVICE_INTERNAL_STATUS_DATA_REQUEST) 的大小

输出缓冲区

驱动程序将输出返回到 Irp-AssociatedIrp.SystemBuffer> 中的缓冲区。 此缓冲区包含具有设备内部状态的 DEVICE_INTERNAL_STATUS_DATA 结构。

输出缓冲区长度

I/O 堆栈位置中的 Parameters.DeviceIoControl.OutputBufferLength 指示参数缓冲区的大小(以字节为单位),该大小必须为 >= sizeof (DEVICE_INTERNAL_STATUS_DATA)

输入/输出缓冲区

N/A

输入/输出缓冲区长度

N/A

状态块

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