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 |