핸들의 HPCON 소유권을 pseudoconsole에게 포기하면, 모든 클라이언트의 연결이 끊어질 때 자동으로 종료됩니다.
문법
HRESULT WINAPI ReleasePseudoConsole(
_In_ HPCON hPC
);
매개 변수
hPC [in] CreatePseudoConsole에 의해 열려 있는 활성 가상 콘솔에 대한 핸들입니다.
반환 값
형식: HRESULT
이 메서드가 성공하면 S_OK반환됩니다. 그렇지 않으면 HRESULT 오류 코드를 반환합니다. hPC 인수가 유효하지 않으면 호출이 실패하지 않을 것으로 예상되며 이 경우 E_INVALIDARG 반환합니다.
비고
경고
ReleasePseudoConsole 은 HPCON과 연결된 메모리의 할당을 취소하지 않습니다. HPCON 인스턴스 사용을 완료한 후에도 ClosePseudoConsole을 호출해야 합니다. 올바른 사용에 대한 중요한 정보는 ClosePseudoConsole 을 참조하세요.
애플리케이션이 소유한 HPCON 핸들은 기본적으로 의사console 세션을 무한정 활성 상태로 유지합니다. 이전 버전의 Windows에서는 ClosePseudoConsole 만 HPCON 핸들의 소유권을 포기했습니다. 그러나 반환하기 전에 모든 클라이언트의 연결이 끊어질 때까지 대기합니다.
이로 인해 두 가지 문제가 발생했습니다.
- 모든 클라이언트의 연결이 끊어졌는지 여부를 안정적으로 감지하지는 못했습니다. 처음에 생성된 콘솔 프로세스가 종료되었는지 테스트하는 것만으로는 충분하지 않습니다. 아직 실행 중인 추가 프로세스가 생성되었을 수 있기 때문일 수 있습니다.
- pseudoconsole과 애플리케이션 간에 수명 및 소유권 루프를 만들었습니다. 애플리케이션은 HPCON 핸들을 유지하여 의사콘솔 세션을 활성 상태로 유지하고, 의사콘솔은 모든 클라이언트의 연결이 해제되었다는 신호를 기다리며 애플리케이션을 활성 상태로 유지합니다. 모든 클라이언트 연결이 끊어지면 ClosePseudoConsole을 호출합니다.
ReleasePseudoConsole 은 이 문제를 해결합니다. 이 함수를 호출한 후 모든 클라이언트의 연결이 끊어지면 의사콘솔이 자동으로 종료됩니다. 이제 오류가 반환될 때까지 입력 및 출력 파이프 핸들에서 읽기나 쓰기만 하면 됩니다. 이는 모든 클라이언트의 연결이 끊어지고 가상 콘솔이 종료되었음을 나타냅니다. ClosePseudoConsole을 호출하여 HPCON 핸들이 보유하고 있는 나머지 비트를 해제합니다.
예시
이 함수를 사용하여 의사console 세션을 설정하는 방법에 대한 전체 연습은 Pseudoconsole 세션 만들기를 참조하세요.
요구 사항
| 지원되는 최소 클라이언트 | Windows 11 24H2(빌드 26100) [데스크톱 앱만 해당] |
| 지원되는 최소 서버 | Windows Server 2025(빌드 26100) |
| 헤더 | ConsoleApi.h(WinCon.h를 통해 Windows.h 포함) |
| 라이브러리 | 커널32.lib |
| 동적 링크 라이브러리 (DLL) | Kernel32.dll |