통신 리소스 설정 수정
CreateFile 함수가 직렬 통신 리소스에 대한 핸들을 열면 시스템은 리소스를 마지막으로 열었을 때 설정한 값에 따라 리소스를 초기화하고 구성합니다. 이전 설정을 유지하면 사용자가 디바이스를 다시 열 때 모드 명령을 통해 지정된 설정을 유지할 수 있습니다. 이전 열린 작업에서 상속된 값에는 디바이스 제어 블록( DCB 구조)의 구성 설정과 I/O 작업에 사용되는 제한 시간 값이 포함됩니다. 디바이스가 열린 적이 없는 경우 시스템 기본값으로 구성됩니다.
직렬 통신 리소스의 초기 구성을 확인하기 위해 프로세스는 현재 구성 설정으로 직렬 포트 DCB 구조를 채우는 GetCommState 함수를 호출합니다. 이 구성을 수정하기 위해 프로세스는 SetCommState 함수 호출에서 DCB 구조를 지정합니다.
DCB 구조체의 멤버는 전송 속도, 바이트당 데이터 비트 수 및 바이트당 중지 비트 수와 같은 구성 설정을 지정합니다. 다른 DCB 멤버는 특수 문자를 지정하고 패리티 검사 및 흐름 제어를 사용하도록 설정합니다. 프로세스에서 이러한 구성 설정 중 일부만 수정해야 하는 경우 먼저 GetCommState 를 호출하여 DCB 구조를 현재 구성으로 채워야 합니다. 그런 다음 프로세스는 DCB 구조의 중요한 값을 조정하고 SetCommState 를 호출하고 수정된 DCB 구조를 지정하여 디바이스를 다시 구성할 수 있습니다. 이 절차는 DCB 구조체의 수정되지 않은 멤버에 적절한 값이 포함되도록 합니다. 예를 들어 일반적인 오류는 구조체의 XonChar 멤버가 XoffChar 멤버와 동일한 DCB 구조체를 사용하여 디바이스를 구성하는 것입니다.
BuildCommDCB 함수는 DCB 구조를 수정하는 또 다른 방법을 제공합니다. BuildCommDCB 는 모드 명령의 명령줄 인수와 같은 형식의 문자열을 사용하여 전송 속도, 패리티 체계, 중지 비트 수 및 데이터 비트 수를 지정합니다. 적절한 멤버가 XON/XOFF 및 하드웨어 흐름 제어를 사용하지 않도록 설정되어 있다는 점을 제외하고 DCB 의 나머지 멤버는 이 함수에 의해 변경되지 않습니다. BuildCommDCB 는 DCB 구조만 수정합니다. 디바이스를 다시 구성하지 않습니다.
프로세스는 GetCommProperties 함수를 사용하여 디바이스 드라이버에서 지원하는 구성 설정에 대한 정보를 가져와 통신 리소스를 다시 구성할 수 있습니다. 프로세스는 이 정보를 사용하여 지원되지 않는 구성을 지정하지 않도록 할 수 있습니다.
SetCommState 함수는 통신 리소스를 다시 구성하지만 지정된 드라이버의 내부 출력 및 입력 버퍼에는 영향을 주지 않습니다. 버퍼가 플러시되지 않고 보류 중인 읽기 및 쓰기 작업이 조기에 종료되지 않습니다.
프로세스는 다음 작업을 수행하는 SetupComm 함수를 사용하여 통신 리소스를 다시 초기화합니다.
- 완료되지 않은 경우에도 보류 중인 읽기 및 쓰기 작업을 종료합니다.
- 읽지 않은 문자를 삭제하고 지정된 리소스와 연결된 드라이버의 내부 출력 및 입력 버퍼를 해제합니다.
- 내부 출력 및 입력 버퍼를 다시 할당합니다.
SetupComm을 호출하는 프로세스는 필요하지 않습니다. 그렇지 않은 경우 리소스의 드라이버는 통신 리소스 핸들이 처음 사용될 때 기본 설정으로 디바이스를 초기화합니다.