pcRegisterIoTimeout 函数 (portcls.h)
PcRegisterIoTimeout 函数为指定的设备对象注册驱动程序提供的 I/O 计时器回调例程。
注册后,只要设备保持活动状态,端口类驱动程序大约每秒调用一次计时器回调。
语法
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。 否则,它将返回相应的错误代码。 下表显示了一些可能的错误代码。
返回代码 | 说明 |
---|---|
|
可能指示端口类驱动程序内的内存分配失败。 |
|
可能指示已注册具有相同设备对象、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
);
DeviceObject 和 Context 参数与适配器驱动程序之前作为调用参数传递给 PcRegisterIoTimeout 的值相同。 端口类驱动程序在 IRQL DISPATCH_LEVEL调用计时器例程。 计时器例程不得包含可分页代码。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | PortCls 系统驱动程序在 Microsoft Windows 98/Me 和 Windows 2000 及更高版本的操作系统中实现 PcRegisterIoTimeout 函数。 |
目标平台 | 通用 |
标头 | portcls.h (包括 Portcls.h) |
Library | Portcls.lib |
IRQL | PASSIVE_LEVEL |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将推出:在整个 2024 年,我们将逐步取消以“GitHub 问题”作为内容的反馈机制,并将其替换为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈