PcRegisterIoTimeout-Funktion (portcls.h)

Die PcRegisterIoTimeout-Funktion registriert eine vom Treiber bereitgestellte E/A-Timer-Rückrufroutine für ein angegebenes Geräteobjekt.

Nach der Registrierung ruft der Portklassentreiber den Timer-Rückruf ungefähr einmal pro Sekunde auf, solange das Gerät aktiv bleibt.

Hinweis Diese Funktion ist für Windows 8 und höhere Versionen von Windows veraltet. Für Windows on Arm-Systeme ist diese Funktion im PortCls-Klassentreiber auskommentiert und nicht zugänglich.
 

Syntax

PORTCLASSAPI NTSTATUS PcRegisterIoTimeout(
  [in] PDEVICE_OBJECT    pDeviceObject,
  [in] PIO_TIMER_ROUTINE pTimerRoutine,
  [in] PVOID             pContext
);

Parameter

[in] pDeviceObject

Zeiger auf ein Geräteobjekt, das ein Gerät darstellt, für das für E/A-Vorgänge ein Timeout möglich ist. Dieser Parameter muss auf eine Systemstruktur vom Typ DEVICE_OBJECT verweisen. Beim Aufrufen der E/A-Timer-Rückrufroutine übergibt der Portklassentreiber diesen Zeiger als ersten von zwei Aufrufparametern. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in] pTimerRoutine

Zeiger auf die vom Treiber bereitgestellte E/A-Timer-Rückrufroutine. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in] pContext

Zeiger auf den treiberspezifischen Kontext. Beim Aufrufen der E/A-Timer-Rückrufroutine übergibt der Portklassentreiber diesen Zeiger als den zweiten von zwei Aufrufparametern. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

PcRegisterIoTimeout gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich war. Andernfalls wird ein entsprechender Fehlercode zurückgegeben. In der folgenden Tabelle sind einige der möglichen Fehlercodes aufgeführt.

Rückgabecode Beschreibung
STATUS_INSUFFICIENT_RESOURCES
Möglicherweise deutet darauf hin, dass ein Fehler bei der Speicherzuordnung innerhalb des Portklassentreibers aufgetreten ist.
STATUS_UNSUCCESSFUL
Gibt möglicherweise an, dass ein Timer-Rückruf mit derselben Kombination aus Geräteobjekt, E/A-Timer-Rückrufroutine und Kontext bereits registriert ist.

Hinweise

Ein Adaptertreiber ruft die PcRegisterIoTimeout-Funktion auf, um einen Watchdog-Timer mit niedriger Auflösung zu aktivieren. Treiber verwenden diese Funktion in erster Linie, um Geräte zu überwachen, die keine Möglichkeit haben, selbst ein Ereignis zu generieren, wenn sie einen zuvor initiierten E/A-Vorgang nicht innerhalb eines maximalen Zeitintervalls abschließen können.

Nachdem der Treiber PcRegisterIoTimeout aufgerufen hat, ruft der Portklassentreiber die E/A-Timer-Rückrufroutine des Treibers ungefähr einmal pro Sekunde auf, solange das Gerät aktiv bleibt. (Das Gerät wird durch eine IRP_MN_START_DEVICE-Anforderung aktiviert und durch eine IRP_MN_STOP_DEVICE-Anforderung deaktiviert.)

Der Treiber kann den Timer deaktivieren, indem er PcUnregisterIoTimeout aufruft.

Es kann jeweils nur ein Timer-Rückruf mit einer bestimmten Kombination aus Geräteobjekt, E/A-Timer-Rückrufroutine und Kontext registriert werden.

Die Bedeutung des pContext-Parameters wird vom Adaptertreiber bestimmt, aber der Treiber legt diesen Parameter in der Regel so fest, dass er auf ein Objekt wie das Miniport-, Miniport-Stream- oder Adapterobjekt verweist.

Der pTimerRoutine-Parameter ist vom Typ PIO_TIMER_ROUTINE, der in ntddk.h definiert wird, um zu sein.

  VOID
    (*PIO_TIMER_ROUTINE)(
      IN PDEVICE_OBJECT  DeviceObject,
      IN PVOID  Context
      );

Die Parameter DeviceObject und Context sind dieselben Werte, die der Adaptertreiber zuvor als Aufrufparameter an PcRegisterIoTimeout übergeben hat. Der Portklassentreiber ruft die Timerroutine bei IRQL DISPATCH_LEVEL auf. Die Timerroutine darf keinen ausserstellbaren Code enthalten.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Der PortCls-Systemtreiber implementiert die PcRegisterIoTimeout-Funktion in Microsoft Windows 98/Me und in Windows 2000 und höheren Betriebssystemen.
Zielplattform Universell
Header portcls.h (include Portcls.h)
Bibliothek Portcls.lib
IRQL PASSIVE_LEVEL

Weitere Informationen

DEVICE_OBJECT

PcUnregisterIoTimeout