인터럽트 서비스 루틴을 병렬 포트에 연결

커널 모드 클라이언트는 IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT 요청을 사용하여 인터럽트 서비스 루틴 및 지연된 포트 확인 루틴 을 병렬 포트 함수 드라이버의 작업에 연결할 수 있습니다.

참고 Microsoft는 클라이언트에서 제공하는 인터럽트 루틴을 사용하지 않는 것이 좋습니다. 인터럽트 사용으로 인해 시스템 불안정이 발생할 수 있습니다. 기본적으로 IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT 요청은 사용하지 않도록 설정됩니다.

병렬 디바이스용 드라이버의 포팅 및 개발을 용이하게 하기 위해 병렬 포트용 시스템 제공 함수 드라이버는 커널 모드 클라이언트가 연결 인터럽트 요청을 사용하거나 사용하지 않도록 설정하는 데 사용할 수 있는 레지스트리 플래그를 지원합니다. 연결 인터럽트 요청은 병렬 포트에 대한 플러그 앤 플레이 레지스트리 키 아래의 레지스트리 항목 값 EnableConnectInterruptIoctl에 의해 활성화됩니다. 항목 값에는 REG_DWORD 형식이 있으며 기본값은 0x0(사용 안 함)입니다. 0x0 같지 않은 값은 연결 인터럽트 요청을 사용하도록 설정합니다.

연결 인터럽트 요청은 병렬 포트의 인터럽트 개체에 대한 포인터와 시스템 제공 콜백 루틴에 대한 다음 포인터를 포함하는 PARALLEL_INTERRUPT_INFORMATION 구조를 반환 합니다.

  • TryAllocatePortAtInterruptLevel 멤버는 ISR(비 차단 PPARALLEL_TRY_ALLOCATE_ROUTINE) 콜백에 대한 포인터로, 커널 모드 드라이버가 ISR에서 병렬 포트를 할당하는 데 사용할 수 있습니다.

  • FreePortFromInterruptLevel 멤버는 커널 모드 드라이버가 ISR에서 병렬 포트를 해제하는 데 사용할 수 있는 ISR(비 차단 PPARALLEL_FREE_ROUTINE) 콜백에 대한 포인터입니다.

인터럽트 서비스 루틴은 병렬 포트에서 하드웨어 인터럽트 후 IRQL = DIRQL에서 호출됩니다. 드라이버가 인터럽트 서비스 루틴을 연결하고 언로드 루틴이 있는 경우 드라이버는 언로드 루틴에서 IOCTL_INTERNAL_PARALLEL_DISCONNECT_INTERRUPT 요청을 보내야 합니다.

지연된 포트 확인 루틴은 병렬 포트가 해제되고 포트를 할당하거나 IEEE 1284.3 디바이스를 선택하는 보류 중인 요청이 없는 경우 호출됩니다. 드라이버는 지연된 포트 확인 루틴을 사용하여 인터럽트 활성화할 수 있습니다.

클라이언트에 할당된 포트가 없을 때 클라이언트의 인터럽트 서비스 루틴이 호출되면 클라이언트는 PPARALLEL_TRY_ALLOCATE_ROUTINE(ISR) 콜백을 호출하여 포트를 신속하게 할당하려고 시도할 수 있습니다. 클라이언트는 ISR(PPARALLEL_FREE_ROUTINE) 콜백을 사용하여 포트를 해제할 수도 있습니다.

병렬 포트는 드라이버에서 공유되므로 병렬 포트 함수 드라이버는 병렬 포트에 연결된 인터럽트 서비스 루틴 및 지연된 포트 확인 루틴 목록을 유지 관리합니다. 병렬 포트 함수 드라이버는 연결된 모든 인터럽트 루틴 및 지연된 포트 확인 루틴을 연결된 순서대로 호출합니다.