IOCTL_USB_GET_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC IOCTL (usbioctl.h)

Ruft den QPC-Wert (System Query Performance Counter) ab, der mit dem Frame und dem Microframe synchronisiert ist.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabe-/Ausgabepuffer

Ein Zeiger auf eine USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION-Struktur , die die von der IOCTL_USB_START_TRACKING_FOR_TIME_SYNC-Anforderung abgerufene Zeiterfassung enthält. Bei der Eingabe kann der Aufrufer einen Frame und eine Microframenummer angeben, für die der QPC-Wert abgerufen werden soll.

Bei der Ausgabe wird der CurrentQueryPerformanceCounter-Member auf einen Wert festgelegt, der vom USB-Treiberstapel vorhergesagt wird. Der Wert stellt den QPC-Wert des Systems in Mikrosekunden dar.

Länge des Eingabe-/Ausgabepuffers

Die Größe der USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION-Struktur .

Statusblock

Irp->IoStatus.Status ist auf STATUS_SUCCESS festgelegt, wenn die Anforderung erfolgreich ist. Andernfalls gibt Status eine geeignete Fehlerbedingung als NTSTATUS-Code an.

Hinweise

Bei der Eingabe kann der Aufrufer optional einen Frame und einen Microframe angeben, für den der Aufrufer an der Kenntnis des zugeordneten System-QPC-Werts interessiert ist. Diese Werte müssen in den Membern InputFrameNumber und InputMicroFrameNumber von USB_FRAME_NUMBER_AND_QPC_FOR_TIME_SYNC_INFORMATION angegeben werden. Bei der Ausgabe füllt der USB-Treiberstapel den QueryPerformanceCounterAtInputFrameOrMicroFrame-Member mit einem QPC-Systemwert, der vom USB-Treiberstapel berechnet wird.

Wenn der Aufrufer diese Werte nicht interessiert, müssen die Werte InputFrameNumber und InputMicroFrameNumber mit 0 initialisiert werden. Bei der Ausgabe ist QueryPerformanceCounterAtInputFrameOrMicroFrame auf 0 festgelegt.

Wenn der USB-Treiberstapel eine Framegrenze gefunden hat, gibt der Wert PredictedAccuracyInMicroSeconds die Genauigkeit in einer Einheit von 125 Mikrosekunden an. Außerdem wird berücksichtigt, ob seit der Aktivierung der Nachverfolgung genügend Zeit verstrichen ist.

Der USB-Treiberstapel kann auch den QPC-Systemwert vorhersagen, der mit Busframe- und Microframenummern synchronisiert wird, die direkt vom Hostcontroller abgerufen werden.

Um QPC-Werte mit Genauigkeit vorherzusagen, kann der USB-Treiberstapel die Frame- und Microframe-Zeitquellen abfragen. Dieser Abfragevorgang kann das Erhöhen oder Senken von IRQL erfordern, um Planungsverzögerungen zu vermeiden, die die Genauigkeit des Werts beeinträchtigen (nachdem versucht wurde, den Register/QPC-Timer aus dem passiven IRQL für eine bestimmte Anzahl von Versuchen zu lesen). Angesichts dieser möglichen zusätzlichen CPU-Kosten darf diese Schnittstelle nur zum Abrufen der zugehörigen USB-Bus- und QPC-Werte verwendet werden und darf nicht als Ersatz für vorhandene Methoden verwendet werden, um nur die USB-Buszeit abzurufen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10, Version 1709
Unterstützte Mindestversion (Server) Windows Server 2016
Kopfzeile usbioctl.h
IRQL <= DISPATCH_LEVEL

Weitere Informationen

Erstellen von IOCTL-Anforderungen in Treibern

WdfIoTargetSendInternalIoctlOthersSynchronly

WdfIoTargetSendInternalIoctlSynchronly

WdfIoTargetSendIoctlSynchronly