다음을 통해 공유


병렬 포트 사용 동기화

클라이언트는 병렬 포트를 사용하기 전에 병렬 포트를 할당하고 사용이 완료된 후 포트를 해제하여 병렬 포트 사용을 동기화해야 합니다.

또는 클라이언트가 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 콜백을 호출하여 다른 클라이언트가 포트를 획득하기 위해 대기하고 있는지 확인하고, 클라이언트가 대기 중인 경우 가능한 한 빨리 포트를 해제해야 합니다.