同步處理平行埠的使用
用戶端必須在使用平行埠之前,先配置平行埠,並在完成使用埠之後釋放埠,以同步處理其使用方式。
或者,用戶端可以選取並取消選取 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回 呼,以判斷其他用戶端是否正在等候取得埠,如果用戶端正在等候,請儘快釋放埠。