다음을 통해 공유


콘솔 버퍼 보안 및 액세스 권한

Windows 보안 모델을 사용하면 콘솔 입력 버퍼 및 콘솔 화면 버퍼에 대한 액세스를 제어할 수 있습니다. 보안에 대한 자세한 내용은 Access-Control 모델을 참조 하세요.

Console 개체 보안 설명자

CreateFile 또는 CreateConsoleScreenBuffer 함수를 호출할 때 콘솔 입력 및 콘솔 화면 버퍼에 대한 보안 설명자를 지정할 수 있습니다. NULL을 지정하면 개체가 기본 보안 설명자를 가져옵니다. 콘솔 버퍼에 대한 기본 보안 설명자의 ACL은 작성자의 기본 또는 가장 토큰에서 가져옵니다.

CreateFile, CreateConsoleScreenBuffer GetStdHandle에서 반환된 핸들에는 GENERIC_READGENERIC_WRITE 액세스 권한이 있습니다.

유효한 액세스 권한에는 GENERIC_READGENERIC_WRITE 일반 액세스 권한이 포함됩니다.

의미
GENERIC_READ(0x80000000L) 콘솔 화면 버퍼에 대한 읽기 액세스를 요청하여 프로세스가 버퍼에서 데이터를 읽을 수 있도록 합니다.
GENERIC_WRITE(0x40000000L) 콘솔 화면 버퍼에 대한 쓰기 액세스를 요청하여 프로세스가 버퍼에 데이터를 쓸 수 있도록 합니다.

참고 항목

콘솔 앱 유니버설 Windows 플랫폼 연결된 콘솔보다 무결성 수준이 낮은 사용자는 위의 보안 설명자가 일반적으로 허용하는 경우에도 출력 버퍼를 읽고 입력 버퍼에 쓰는 것이 금지됩니다. 자세한 내용은 아래의 잘못된 방법 동 사 토론을 참조하세요.

잘못된 방향 동사

개체에 읽기 또는 쓰기를 특별히 허용하는 보안 설명자가 있는 경우에도 콘솔 개체에 대한 일부 작업이 거부됩니다. 이는 특히 명령줄 애플리케이션이 더 관대한 컨텍스트에서 만든 콘솔 세션을 공유하는 권한 감소 컨텍스트에서 실행되는 명령줄 애플리케이션과 관련이 있습니다.

"잘못된 동사"라는 용어는 콘솔 개체 중 하나에 대한 일반 흐름의 반대인 작업에 적용하기 위한 것입니다. 특히 출력 버퍼에 대한 일반 흐름이 작성되고 입력 버퍼의 일반 흐름이 읽습니다. 따라서 "잘못된 방법"은 출력 버퍼를 읽거나 입력 버퍼를 쓰는 것입니다. 이러한 함수는 하위 수준 콘솔 I/O 함수 설명서에 설명되어 있습니다 .

이를 찾을 수 있는 두 가지 시나리오는 다음과 같습니다.

  1. 콘솔 앱을 유니버설 Windows 플랫폼. 이러한 애플리케이션은 다른 유니버설 Windows 플랫폼 애플리케이션의 사촌이므로 다른 애플리케이션과 격리되고 작업 효과에 대한 사용자 보장을 제공한다는 약속을 유지합니다.
  2. CreateProcess 중에 레이블 지정 또는 토큰 조작으로 수행할 수 있는 기존 세션보다 낮은 무결성 수준으로 의도적으로 시작된 모든 콘솔 애플리케이션.

이러한 시나리오 중 하나가 감지되면 콘솔은 명령줄 애플리케이션 연결에 "잘못된 동사" 플래그를 적용하고 다음 API에 대한 호출을 거부하여 수준 간의 통신 표면을 줄입니다.

거부된 호출은 개체의 보안 설명자에 의해 읽기 또는 쓰기 권한이 거부된 것과 같은 액세스 거부 오류 코드를 받습니다.