직렬 I/O 요청 인터페이스
직렬 컨트롤러의 포트에 연결된 주변 디바이스를 제어하기 위해 클라이언트 애플리케이션 또는 주변 장치 드라이버는 포트에 I/O 요청을 보냅니다. 클라이언트는 IRP_MJ_WRITE 및 IRP_MJ_READ 요청을 사용하여 직렬 포트로 데이터를 전송하고 데이터를 받습니다. 또한 Windows는 클라이언트가 직렬 포트를 구성하는 데 사용할 수 있는 IOCTL(직렬 I/O 제어 요청) 집합을 정의합니다.
직렬 IRP_MJ_XXX 요청 및 직렬 IOCTL은 다양한 직렬 컨트롤러 디바이스에서 지원되는 직렬 I/O 요청 인터페이스를 형성합니다. 이 인터페이스는 Serial.sys 드라이버와 SerCx2 또는 SerCx와 확장 기반 직렬 컨트롤러 드라이버의 조합에 의해 지원됩니다.
SerCx2, SerCx 및 Serial.sys 동일한 직렬 IOCTL을 많이 지원합니다. 그러나 SerCx2, SerCx 및 Serial.sys 직렬 디바이스 제어 요청에 지정된 IOCTL의 다양한 하위 집합을 지원합니다. 다음 표에는 SerCx2, SerCx 및 Serial.sys 지원되는 IOCTL의 하위 집합이 요약되어 있습니다. 테이블의 예 항목은 직렬 프레임워크 확장 또는 드라이버가 해당 IOCTL을 지원한다는 것을 나타내고 No 항목은 그렇지 않음을 나타냅니다.
직렬 IOCTL | SerCx2 | SerCx | Serial.sys |
---|---|---|---|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
참고 1을 참조하십시오. |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
참고 2를 참조하세요. |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
참고 1을 참조하십시오. |
예 |
예 |
|
예 |
예 |
예 |
|
IOCTL_SERIAL_GET_MODEM_CONTROL (참고 4 참조) |
예 |
예 |
예 |
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
IOCTL_SERIAL_RESET_DEVICE (참고 5 참조) |
예 |
예 |
예 |
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
참고 2를 참조하세요. |
예 |
예 |
|
참고 1을 참조하십시오. |
예 |
예 |
|
참고 1을 참조하십시오. |
예 |
예 |
|
IOCTL_SERIAL_SET_HANDFLOW (참고 3 참조) |
예 |
예 |
예 |
예 |
예 |
예 |
|
IOCTL_SERIAL_SET_MODEM_CONTROL (참고 4 참조) |
예 |
예 |
예 |
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
|
예 |
예 |
예 |
SerCx2는 직렬 컨트롤러 드라이버의 구현 및 직렬 컨트롤러 하드웨어의 기능에 따라 이 IOCTL을 지원할 수도 있고 지원하지 않을 수도 있습니다.
SerCx2는 특수 문자를 지원하지 않습니다. SerCx2는 항상 STATUS_SUCCESS 상태 코드로 IOCTL_SERIAL_SET_CHARS 요청을 완료하지만 특수 문자를 설정하거나 이 요청에 대한 응답으로 다른 작업을 수행하지 않습니다. IOCTL_SERIAL_GET_CHARS 요청의 경우 SerCx2는 SERIAL_CHARS 구조의 모든 문자 값을 null로 설정하고 STATUS_SUCCESS 상태 코드로 요청을 완료합니다.
SerCx2 및 SerCx는 SERIAL_HANDFLOW 구조체의 FlowReplace 및 ControlHandShake 멤버에 대해 정의된 플래그의 하위 집합만 지원합니다. Serial.sys 이러한 플래그를 모두 지원합니다. 자세한 내용은 SERIAL_HANDFLOW 참조하세요.
IOCTL_SERIAL_GET_MODEM_CONTROL 및 IOCTL_SERIAL_SET_MODEM_CONTROL 요청은 주로 하드웨어 테스트에 사용됩니다. 모뎀 컨트롤 작업에 대해 표준 레지스터 레이아웃이 정의되어 있지 않습니다. 모뎀 제어 IOCTL을 사용하는 주변 장치 드라이버는 특정 직렬 컨트롤러의 하드웨어 기능에 종속될 위험이 있습니다.
Serial.sys 드라이버는 항상 STATUS_SUCCESS 사용하여 IOCTL_SERIAL_RESET_DEVICE 요청을 완료하지만 이 요청에 대한 응답으로 작업을 수행하지 않습니다. SerCx2 및 SerCx는 IOCTL_SERIAL_RESET_DEVICE 요청을 지원하지 않으며 항상 STATUS_NOT_IMPLEMENTED 사용하여 이러한 요청을 완료합니다.
직렬 컨트롤러에 대한 IOCTL_SERIAL_XXX 요청 및 읽기 및 쓰기 요청에 대한 자세한 내용은 ntddser.h 헤더를 참조하세요.