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)
Portcls.lib
IRQL PASSIVE_LEVEL

另请参阅

DEVICE_OBJECT

PcUnregisterIoTimeout