IOCTL_USB_GET_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC IOCTL (usbioctl.h)

检索系统查询性能计数器 (QPC) 与帧和微帧同步的值。

主要代码

IRP_MJ_DEVICE_CONTROL

输入/输出缓冲区

指向 USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION 结构的指针,该结构包含 IOCTL_USB_START_TRACKING_FOR_TIME_SYNC 请求检索到的时间跟踪。 在输入时,调用方可以指定要检索其 QPC 值的帧和微帧编号。

输出时, CurrentQueryPerformanceCounter 成员设置为 USB 驱动程序堆栈预测的值。 该值表示系统 QPC 值(以微秒为单位)。

输入/输出缓冲区长度

USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION结构的大小。

状态块

Irp->如果请求成功,IoStatus.Status 设置为 STATUS_SUCCESS。 否则, Status 指示作为 NTSTATUS 代码的适当错误条件。

注解

在输入时,调用方可以选择指定调用方希望了解关联的系统 QPC 值的帧和微帧。 这些值必须分别在 USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATIONInputFrameNumberInputMicroFrameNumber 成员中提供。 输出时,USB 驱动程序堆栈使用由 USB 驱动程序堆栈计算的系统 QPC 值填充 QueryPerformanceCounterAtInputFrameOrMicroFrame 成员。

如果调用方对这些值不感兴趣,则必须将 InputFrameNumberInputMicroFrameNumber 值初始化为 0。 在输出 时,QueryPerformanceCounterAtInputFrameOrMicroFrame 设置为 0。

如果 USB 驱动程序堆栈遇到帧边界, 则 PredictedAccuracyInMicroSeconds 值指示精度(以 125 微秒为单位)。 此外,还需考虑是否自启用跟踪以来已过足够的时间。

USB 驱动程序堆栈还可以预测与直接从主控制器检索的总线帧和微帧数同步的系统 QPC 值。

为了准确预测 QPC 值,USB 驱动程序堆栈可能会轮询帧和微帧时间源。 在尝试从被动 IRQL 读取寄存器/QPC 计时器后,该轮询操作可能需要提高或降低 IRQL,以消除在尝试) 给定次数后影响值 (准确性的计划延迟。 鉴于此可能的额外 CPU 成本,此接口必须仅用于获取关联的 USB 总线和 QPC 值,并且不能用作仅检索 USB 总线时间的现有方法的替代。

要求

要求
最低受支持的客户端 Windows 10 版本 1709
最低受支持的服务器 Windows Server 2016
标头 usbioctl.h
IRQL <= DISPATCH_LEVEL

另请参阅

在驱动程序中创建 IOCTL 请求

WdfIoTargetSendInternalIoctlOthersSynchronously

WdfIoTargetSendInternalIoctlSynchronously

WdfIoTargetSendIoctlSynchronously