pcRegisterIoTimeout 函数 (portcls.h)

PcRegisterIoTimeout 函数为指定的设备对象注册驱动程序提供的 I/O 计时器回调例程。

注册后,只要设备保持活动状态,端口类驱动程序大约每秒调用一次计时器回调。

注意此函数已弃用Windows 8及更高版本的 Windows。 对于 Arm 系统上的 Windows,此函数在 PortCls 类驱动程序中被注释掉,并且不可访问。
 

语法

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

参数

[in] pDeviceObject

指向表示 I/O 操作可超时的设备的设备对象的指针。此参数必须指向 DEVICE_OBJECT 类型的系统结构。 调用 I/O 计时器回调例程时,端口类驱动程序将此指针作为两个调用参数中的第一个传递。 有关更多信息,请参见下面的“备注”部分。

[in] pTimerRoutine

指向驱动程序提供的 I/O 计时器回调例程的指针。 有关更多信息,请参见下面的“备注”部分。

[in] pContext

指向特定于驱动程序的上下文的指针。 调用 I/O 计时器回调例程时,端口类驱动程序将此指针作为两个调用参数中的第二个传递。 有关更多信息,请参见下面的“备注”部分。

返回值

如果调用成功,PcRegisterIoTimeout 将返回STATUS_SUCCESS。 否则,它将返回相应的错误代码。 下表显示了一些可能的错误代码。

返回代码 说明
STATUS_INSUFFICIENT_RESOURCES
可能指示端口类驱动程序内的内存分配失败。
STATUS_UNSUCCESSFUL
可能指示已注册具有相同设备对象、I/O 计时器回调例程和上下文组合的计时器回调。

注解

适配器驱动程序调用 PcRegisterIoTimeout 函数以启用低分辨率监视器计时器。 驱动程序使用此函数主要用于监视设备,如果设备无法在某个最大时间间隔内完成以前启动的 I/O 操作,则无法自行生成事件。

驱动程序调用 PcRegisterIoTimeout 后,只要设备保持活动状态,端口类驱动程序大约每秒调用一次驱动程序的 I/O 计时器回调例程。 (设备由IRP_MN_START_DEVICE请求激活,并由IRP_MN_STOP_DEVICE请求停用。)

驱动程序可以通过调用 PcUnregisterIoTimeout 来禁用计时器。

一次只能注册一个具有设备对象、I/O 计时器回调例程和上下文的特定组合的计时器回调。

pContext 参数的含义由适配器驱动程序决定,但驱动程序通常会将此参数设置为指向微型端口、微型端口流或适配器对象等对象。

pTimerRoutine 参数的类型为 PIO_TIMER_ROUTINE,在 ntddk.h 中定义为

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

DeviceObjectContext 参数与适配器驱动程序之前作为调用参数传递给 PcRegisterIoTimeout 的值相同。 端口类驱动程序在 IRQL DISPATCH_LEVEL调用计时器例程。 计时器例程不得包含可分页代码。

要求

要求
最低受支持的客户端 PortCls 系统驱动程序在 Microsoft Windows 98/Me 和 Windows 2000 及更高版本的操作系统中实现 PcRegisterIoTimeout 函数。
目标平台 通用
标头 portcls.h (包括 Portcls.h)
Library Portcls.lib
IRQL PASSIVE_LEVEL

另请参阅

DEVICE_OBJECT

PcUnregisterIoTimeout