가상 채널 클라이언트 DLL
가상 채널 애플리케이션의 클라이언트는 클라이언트 컴퓨터에서 원격 데스크톱 서비스를 초기화하는 동안 로드되는 DLL입니다. DLL은 클라이언트 컴퓨터에 등록되어야 합니다. 자세한 내용은 가상 채널 클라이언트 등록을 참조하세요.
클라이언트 DLL은 초기화 중에 원격 데스크톱 서비스가 호출하는 VirtualChannelEntry 함수를 내보내야 합니다. VirtualChannelEntry 진입점은 CHANNEL_ENTRY_POINTS 구조체에 대한 포인터를 받습니다. 이 구조에는 클라이언트 DLL이 가상 채널에 액세스하기 위해 호출하는 함수에 대한 포인터가 포함되어 있습니다.
함수 | Description |
---|---|
VirtualChannelInit |
클라이언트에서 사용할 가상 채널의 이름을 등록하고 원격 데스크톱 서비스가 클라이언트 연결에 영향을 주는 이벤트에 대해 클라이언트에 알릴 수 있는 VirtualChannelInitEvent 콜백 함수를 제공합니다. |
VirtualChannelOpen |
지정된 가상 채널의 클라이언트 끝을 열고 원격 데스크톱 서비스가 가상 채널에 영향을 주는 이벤트에 대해 클라이언트에 알릴 수 있는 VirtualChannelOpenEvent 콜백 함수를 제공합니다. |
VirtualChannelWrite |
가상 채널에 데이터를 씁니다. 원격 데스크톱 서비스는 이 데이터를 가상 채널의 서버 끝으로 보냅니다. 서버 끝은 WTSVirtualChannelRead 함수를 호출하여 데이터를 읽습니다. |
VirtualChannelClose |
가상 채널을 닫습니다. |
DLL의 VirtualChannelEntry 함수는 VirtualChannelInit 함수를 호출하여 가상 채널에 대한 액세스를 초기화해야 합니다. VirtualChannelInit를 호출할 때 VirtualChannelInitEvent 콜백 함수에 대한 포인터를 전달해야 합니다. 원격 데스크톱 서비스는 초기화가 완료되면 이 콜백 함수를 호출하고 RD 세션 호스트(원격 데스크톱 세션 호스트) 서버와 연결이 설정되었을 때 다시 호출합니다.
연결이 설정되면 VirtualChannelOpen 함수를 호출하여 VirtualChannelInit 호출에 의해 등록된 가상 채널을 열 수 있습니다. VirtualChannelOpen 호출은 VirtualChannelOpenEvent 콜백 함수에 대한 포인터를 지정합니다.
VirtualChannelOpen 호출이 반환된 후 VirtualChannelWrite 함수를 호출하여 가상 채널에 쓸 수 있습니다. 쓰기 작업은 비동기적이므로 원격 데스크톱 서비스가 VirtualChannelOpenEvent 함수를 호출하여 쓰기 작업이 완료되었음을 나타낼 때까지 VirtualChannelWrite에 전달된 버퍼를 해제하거나 다시 사용하지 않아야 합니다. VirtualChannelWrite를 호출할 때 쓰기 작업을 식별하는 사용자 데이터 조각을 전달할 수 있습니다. 원격 데스크톱 서비스는 VirtualChannelOpenEvent 를 호출할 때 이 사용자 데이터를 다시 전달하여 작업이 완료되었음을 알립니다. 가상 채널의 서버 끝에서 서버 추가 기능은 WTSVirtualChannelRead 함수를 호출하여 데이터를 읽습니다.
또한 원격 데스크톱 서비스는 서버 모듈을 통해 가상 채널에 데이터를 쓸 때 VirtualChannelOpenEvent 함수를 호출합니다. 서버 모듈은 WTSVirtualChannelWrite 함수를 호출하여 가상 채널의 서버 끝에 데이터를 씁니다.
클라이언트 및 서버 모듈은 모든 크기의 데이터 블록을 가상 채널에 쓸 수 있습니다. 그러나 데이터를 보내기 전에 원격 데스크톱 서비스는 데이터를 CHANNEL_CHUNK_LENGTH 바이트 청크로 분할합니다. 원격 데스크톱 서비스는 데이터를 원래 크기의 블록으로 다시 빌드하는 대신 각 데이터 청크에 대해 VirtualChannelOpenEvent 함수를 한 번 호출합니다. VirtualChannelOpenEvent에 대한 각 호출은 청크의 크기, 서버에서 작성한 총 크기 및 데이터가 서버에서 작성한 블록의 시작, 중간 또는 끝을 구성하는지 여부를 나타냅니다.
VirtualChannelClose 함수를 호출하여 채널을 닫을 수 있습니다. 그러나 원격 데스크톱 서비스는 클라이언트가 서버에서 연결을 끊을 때 모든 채널을 자동으로 닫기 때문에 호출할 필요가 없습니다.