同步并行端口的使用

客户端必须在使用并行端口之前分配并行端口,在使用该端口后释放该端口,以同步其并行端口的使用。

或者,客户端可以选择和取消选择 IEEE 1284.3 设备 (该设备会自动分配和释放并行端口) - 请参阅选择和取消选择附加到并行端口的 IEEE 1284 设备。

客户端使用下列设备控制请求来分配和释放并行端口:

IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE

IOCTL_INTERNAL_PARALLEL_PORT_FREE

内核模式客户端还可使用系统提供的并行端口回调例程,这些回调例程是使用 IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO请求获取的。 此请求返回 PARALLEL_PORT_INFORMATION 结构,其中包括指向系统提供的回调的以下指针:

  • TryAllocatePort 成员是指向 PPARALLEL_TRY_ALLOCATE_ROUTINE 回调的指针,该回调是尝试分配并行端口的非阻塞例程。

  • QueryNumWaiters 成员是指向 PPARALLEL_QUERY_WAITERS_ROUTINE 回调的指针,该回调返回并行端口的工作队列中排队的端口分配和设备选择请求数。

  • FreePort 成员是指向释放并行端口PPARALLEL_FREE_ROUTINE回调的指针。

请求 IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE 客户端需要处理最少,因为系统为并行端口提供的函数驱动程序在已分配并行端口时将客户端的请求排队。 函数驱动程序在将端口分配给客户端STATUS_SUCCESS状态完成分配请求。 由于不可接受的延迟或其他设备特定条件,客户端可以随时取消挂起的分配请求。

注意 如果 PPARALLEL_TRY_ALLOCATE_ROUTINE 非阻塞状态, (回调会立即) 。 如果客户端仅使用 PPARALLEL_TRY_ALLOCATE_ROUTINE回调来尝试分配其他客户端正在争用的并行端口,则并行端口函数驱动程序可能永远不会将端口分配给客户端。 若要确保成功,客户端必须使用并行端口分配请求。 (并行端口函数驱动程序队列,然后按接收请求的顺序处理、端口分配和设备选择请求。)

并行端口函数驱动程序向客户端分配并行端口后,客户端对端口具有独占访问权限。 客户端必须 调用 PPARALLEL_FREE_ROUTINE回调 以释放端口。 客户端释放端口后,并行端口函数驱动程序会从端口的工作队列中删除下一个请求 (端口分配或设备选择请求) (如果有)并完成请求。

客户端应该 使用 PPARALLEL_QUERY_WAITERS_ROUTINE回调 来确定是否有其他客户端正在等待并行端口。 需要长时间分配端口的客户端应定期调用 PPARALLEL_QUERY_WAITERS_ROUTINE 回调,以确定其他客户端是否正在等待获取端口,如果客户端正在等待,请尽快释放该端口。