将中断服务例程连接到并行端口

内核模式客户端可以使用IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT请求将中断服务例程和延迟端口检查例程连接到并行端口函数驱动程序的操作。

注意 Microsoft 不建议使用客户端提供的中断例程。 使用中断可能会导致系统不稳定。 默认情况下,禁用IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT请求。

为了促进并行设备的驱动程序的移植和开发,系统提供的并行端口函数驱动程序支持内核模式客户端可用于启用和禁用连接中断请求的注册表标志。 连接中断请求由并行端口即插即用注册表项下的注册表项值 EnableConnectInterruptIoctl 启用。 条目值的类型REG_DWORD,默认值0x0 (禁用) 。 不等于 0x0 的值启用连接中断请求。

连接中断请求返回 PARALLEL_INTERRUPT_INFORMATION 结构,其中包括指向并行端口中断对象的指针和以下指向系统提供的回调例程的指针:

  • TryAllocatePortAtInterruptLevel 成员是指向非阻塞PPARALLEL_TRY_ALLOCATE_ROUTINE (ISR) 回调的指针,内核模式驱动程序可以在 ISR 中使用该回调来分配并行端口。

  • FreePortFromInterruptLevel 成员是指向非阻止PPARALLEL_FREE_ROUTINE (ISR) 回调的指针,内核模式驱动程序可以在 ISR 中使用该回调来释放并行端口。

在并行端口上发生硬件中断后,会在 IRQL = DIRQL 处调用中断服务例程。 如果驱动程序连接中断服务例程并具有 Unload 例程,则驱动程序必须在其 Unload 例程中发送IOCTL_INTERNAL_PARALLEL_DISCONNECT_INTERRUPT请求。

延迟端口检查例程在并行端口释放后调用,如果没有等待的请求来分配端口或选择 IEEE 1284.3 设备。 驱动程序可以使用延迟端口检查例程来启用中断。

如果在客户端未分配端口时调用客户端的中断服务例程,则客户端可以通过调用PPARALLEL_TRY_ALLOCATE_ROUTINE (ISR) 回调来尝试快速分配端口。 客户端还可以使用PPARALLEL_FREE_ROUTINE (ISR) 回调来释放端口。

由于并行端口由驱动程序共享,因此并行端口功能驱动程序维护连接到并行端口的中断服务例程和延迟端口检查例程的列表。 并行端口函数驱动程序按连接顺序调用所有连接的中断例程和延迟端口检查例程。