다음을 통해 공유


통신 리소스 설정 수정

CreateFile 함수가 직렬 통신 리소스에 대한 핸들을 열면 시스템은 리소스를 마지막으로 열었을 때 설정한 값에 따라 리소스를 초기화하고 구성합니다. 이전 설정을 유지하면 디바이스를 다시 열 때 사용자가 모드 명령을 통해 지정된 설정을 유지할 수 있습니다. 이전 열린 작업에서 상속된 값에는 디바이스 제어 블록의 구성 설정(DCB 구조)과 I/O 작업에 사용된 제한 시간 값이 포함됩니다. 디바이스가 열린 적이 없는 경우 시스템 기본값으로 구성됩니다.

직렬 통신 리소스의 초기 구성을 확인하기 위해 프로세스는 GetCommState 함수를 호출합니다. 이 함수는 직렬 포트 DCB 구조를 현재 구성 설정으로 채웁니다. 이 구성을 수정하기 위해 프로세스는 SetCommState 함수에 대한 호출에서 DCB 구조를 지정합니다.

DCB 구조체의 멤버는 전송 속도, 바이트당 데이터 비트 수 및 바이트당 중지 비트 수와 같은 구성 설정을 지정합니다. 다른 DCB 멤버는 특수 문자를 지정하고 패리티 검사 및 흐름 제어를 사용하도록 설정합니다. 프로세스에서 이러한 구성 설정 중 일부만 수정해야 하는 경우 먼저 GetCommState 호출하여 DCB 구조를 현재 구성으로 채워야 합니다. 그런 다음 프로세스는 DCB 구조의 중요한 값을 조정하고 SetCommState 호출하고 수정된 DCB 구조를 지정하여 디바이스를 다시 구성할 수 있습니다. 이 절차는 DCB 구조체의 수정되지 않은 멤버가 적절한 값을 포함하도록 합니다. 예를 들어 일반적인 오류는 구조체의 XonChar 멤버가 XoffChar 멤버와 같은 DCB 구조로 디바이스를 구성하는 것입니다.

BuildCommDCB 함수는 DCB 구조를 수정하는 또 다른 방법을 제공합니다. BuildCommDCB모드 명령의 명령줄 인수와 같은 형식의 문자열을 사용하여 전송 속도, 패리티 구성표, 중지 비트 수 및 데이터 비트 수를 지정합니다. 적절한 멤버가 XON/XOFF 및 하드웨어 흐름 제어를 사용하지 않도록 설정되어 있다는 점을 제외하고 DCB 나머지 멤버는 이 함수에 의해 변경되지 않습니다. BuildCommDCBDCB 구조만 수정합니다. 디바이스를 다시 구성하지 않습니다.

프로세스는 GetCommProperties 함수를 사용하여 디바이스 드라이버에서 지원하는 구성 설정에 대한 정보를 가져와서 통신 리소스를 다시 구성할 수 있습니다. 이 프로세스는 이 정보를 사용하여 지원되지 않는 구성을 지정하지 않도록 할 수 있습니다.

SetCommState 함수는 통신 리소스를 다시 구성하지만 지정된 드라이버의 내부 출력 및 입력 버퍼에는 영향을 주지 않습니다. 버퍼가 플러시되지 않고 보류 중인 읽기 및 쓰기 작업이 조기에 종료되지 않습니다.

프로세스는 다음 작업을 수행하는 SetupComm 함수를 사용하여 통신 리소스를 다시 초기화합니다.

  • 완료되지 않은 경우에도 보류 중인 읽기 및 쓰기 작업을 종료합니다.
  • 읽지 않은 문자를 삭제하고 지정된 리소스와 연결된 드라이버의 내부 출력 및 입력 버퍼를 해제합니다.
  • 내부 출력 및 입력 버퍼를 다시 할당합니다.

SetupComm호출하는 프로세스는 필요하지 않습니다. 그렇지 않은 경우 리소스의 드라이버는 통신 리소스 핸들을 처음 사용할 때 기본 설정으로 디바이스를 초기화합니다.