同步并行端口的使用

客户端必须通过使用并行端口之前分配并行端口并在使用完端口后释放端口来同步其对并行端口的使用。

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

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

IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE

IOCTL_INTERNAL_PARALLEL_PORT_FREE

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

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 回调,以确定其他客户端是否正在等待获取该端口,如果客户端正在等待,请尽快释放该端口。