다음을 통해 공유


SerCx2 읽기 및 쓰기 요청 처리

주변 장치 드라이버는 쓰기(IRP_MJ_WRITE) 및 읽기(IRP_MJ_READ) 요청을 직렬 컨트롤러의 포트로 보내 포트에 연결된 주변 장치와 데이터를 전송합니다. SerCx2에서 이러한 요청을 처리하는 방법은 요청 시간이 초과되거나 취소된 경우에도 잘 정의됩니다.

읽기 또는 쓰기 요청 취소

읽기 또는 쓰기 요청을 완료하기 전에 운영 체제 또는 요청을 보낸 주변 드라이버에서 이 요청을 취소할 수 있습니다. SerCx2가 요청에 대한 데이터를 전송하기 전에 취소가 발생하면 SerCx2는 STATUS_CANCELLED 상태 코드로 요청을 완료합니다.

그러나 요청에 대해 하나 이상의 데이터 바이트가 전송된 후 읽기 또는 쓰기 요청이 취소되지만 요청에 대한 모든 데이터가 전송되기 전에 SerCx2는 STATUS_SUCCESS 상태 코드를 사용하여 요청을 완료합니다. 완료된 요청은 요청을 처리하는 동안 SerCx2에서 읽거나 쓴 바이트 수를 보고합니다. 필요한 경우 요청을 보낸 주변 장치 드라이버는 이 정보를 사용하여 두 번째 요청을 보내 부분적으로 완료된 읽기 또는 쓰기 작업을 완료할 수 있습니다.

시간 초과 요청

읽기 또는 쓰기 요청이 처리에 너무 오래 걸리는 경우 시간이 초과할 수 있는 경우 또한 직렬 컨트롤러에서 받은 두 개의 연속 바이트 사이의 시간이 허용되는 최대 시간을 초과하는 경우 읽기 요청의 시간이 초과될 수 있습니다. 두 경우 모두 시간 제한 조건이 검색되면 SerCx2는 STATUS_TIMEOUT 상태 코드로 요청을 즉시 완료합니다. 완료된 요청은 요청을 처리하는 동안 SerCx2에서 읽거나 쓴 바이트 수를 보고합니다. 필요한 경우 요청을 보낸 주변 장치 드라이버는 이 정보를 사용하여 두 번째 요청을 보내 부분적으로 완료된 읽기 또는 쓰기 작업을 완료할 수 있습니다. 제한 시간에 대한 자세한 내용은 SERIAL_TIMEOUTS 참조하세요.

하드웨어 제한 사항의 영향

일반적으로 SerCx2는 시간 초과 또는 취소된 읽기 또는 쓰기 요청에 의해 전송된 바이트 수를 정확하게 보고합니다. 그러나 시스템 DMA 트랜잭션을 수행하는 데 사용되는 일부 하드웨어는 부분적으로 완료된 읽기 또는 쓰기 트랜잭션에 의해 전송된 바이트 수를 정확하게 계산하지 못할 수 있습니다. 이 경우 연결된 읽기 또는 쓰기 요청은 전송된 바이트의 대략적인 수만 보고할 수 있습니다.

0바이트 전송 요청

0바이트를 전송하는 읽기 또는 쓰기 요청에 대한 응답으로 SerCx2는 STATUS_SUCCESS 상태 코드로 요청을 완료하지만 작업을 수행하지 않습니다.