호환성 수정 이해 및 사용

호환성 수정 인프라의 작동 방식

Windows(R) 운영 체제가 업데이트되어 새로운 기술과 기능을 지원함에 따라 일부 함수의 구현이 변경될 수 있습니다. 이로 인해 원래 구현과 관련된 응용 프로그램에 문제가 발생할 수 있습니다. Microsoft Windows 응용 프로그램 호환성(호환성 수정) 인프라를 사용하여 특정 버전의 응용 프로그램에 대한 특정 응용 프로그램 수정을 만들면 호환성 문제를 방지할 수 있습니다. 호환성 수정 인프라는 API의 연결 기능을 사용하여 응용 프로그램을 Windows 코드에서 호환성 수정을 구현하는 대체 코드로 직접 리디렉션합니다.

Windows 이식 가능 파일 형식에는 응용 프로그램과 연결된 파일 간에 간접 참조 계층을 제공하는 데 사용되는 데이터 디렉터리가 포함된 헤더가 들어 있습니다. 외부 이진 파일에 대한 API 호출은 IAT(가져오기 주소 테이블)를 통해 수행되며, 그런 다음 바로 Windows 운영 체제를 호출합니다(다음 그림 참조).

ACT 앱에서 IAT를 통해 운영 체제 호출

특히 이 프로세스는 IAT에서 영향 받는 Windows 함수의 주소가 호환성 수정 코드를 가리키도록 수정합니다(다음 그림 참조).

ACT 호환성 수정으로 앱 리디렉션

참고

정적으로 연결된 DLL의 경우 응용 프로그램이 로드될 때 코드 리디렉션이 발생합니다. GetProcAddress API를 연결하여 동적으로 연결된 DLL을 수정할 수도 있습니다.

호환성 수정 인프라 디자인에 내포된 의미

호환성 수정 인프라의 일부 특징으로 인해 응용 프로그램 수정 전략을 결정할 때는 몇 가지 중요한 사항을 고려해야 합니다.

  • 호환성 수정은 Windows 운영 체제에 포함된 구성 요소가 아닙니다(이전 그림 참조). 따라서 호환성 수정에는 응용 프로그램 코드에 적용되는 것과 동일한 보안 제한 사항이 적용됩니다. 즉, 호환성 수정을 사용하여 운영 체제의 보안 메커니즘을 무시할 수 없습니다. 그러므로 호환성 수정은 보안 노출 가능성을 높이지 않으며, 호환성 수정에 맞춰 보안 설정을 낮출 필요도 없습니다.

  • 호환성 수정 인프라는 응용 프로그램이 운영 체제를 호출하기 전에 응용 프로그램에 추가 코드를 삽입합니다. 즉, 호환성 수정을 통해 해결할 수 있는 문제는 응용 프로그램 코드를 수정하여 해결할 수도 있습니다.

  • 호환성 수정은 사용자 모드 응용 프로그램 프로세스 내에서 사용자 모드 코드로 실행됩니다. 따라서 호환성 수정을 사용하여 커널 모드 코드 문제를 해결할 수는 없습니다. 예를 들어 호환성 수정을 사용하여 장치 드라이버 문제를 해결할 수 없습니다.

    참고

    일부 바이러스 백신, 방화벽 및 스파이웨어 방지 코드는 커널 모드에서 실행됩니다.

호환성 수정을 사용할 시기 결정

호환성 문제 해결을 위해 호환성 수정을 사용할지를 결정하는 데는 단순히 기술적인 문제 이상의 것이 관련될 수 있습니다. 다음 시나리오에서는 호환성 수정을 사용하는 다른 일반적인 이유를 보여줍니다.

시나리오 1

공급업체에서 더 이상 지원하지 않는 응용 프로그램에 호환성 문제가 있습니다.

다른 여러 회사와 마찬가지로 공급업체가 지원을 중단한 응용 프로그램을 실행할 수 있습니다. 이 경우 해당 공급업체에 수정을 만들도록 요청하거나 소스 코드에 직접 액세스하여 문제를 수정할 수 없습니다. 대신 호환성 수정을 사용하여 호환성 문제를 해결할 수는 있습니다.

시나리오 2

내부에서 작성한 응용 프로그램에 호환성 문제가 있습니다.

응용 프로그램 코드를 수정하여 문제를 해결하는 것이 좋지만 상황에 따라 가능하지 않을 수 있습니다. 새 운영 체제를 배포하기 전에 내부 팀에서 일부 문제를 해결하지 못할 수도 있습니다. 대신 가능한 곳에서 호환성 수정을 사용하도록 선택할 수 있습니다. 그런 다음 이 방법으로 해결할 수 없는 문제에 대해서만 코드를 수정할 수 있습니다. 이 방법을 통해 내부 팀은 새 운영 체제 배포를 늦추지 않고 허용된 시간 내에 응용 프로그램을 수정할 수 있습니다.

시나리오 3

머지않아 호환되는 버전이 배포될 예정인 응용 프로그램 또는 버전에 관계없이 조직에 중요하지 않은 응용 프로그램에 호환성 문제가 있습니다.

응용 프로그램이 조직에 중요하지 않거나 호환되는 새 버전이 곧 배포될 예정인 경우에는 일시적인 해결 방법으로 호환성 수정을 사용할 수 있습니다. 즉, 새 버전이 배포되는 즉시 구성을 업데이트할 목적으로 새 운영 체제의 배포를 늦추지 않고 응용 프로그램을 계속 사용할 수 있습니다.

수정할 응용 프로그램의 버전 결정

"up to or including" 절을 사용하거나 해당 특정 버전을 선택하여 호환성 수정을 특정 응용 프로그램 버전에 적용할 수 있습니다. 즉, 다음 버전의 응용 프로그램에는 호환성 수정이 자동으로 적용되지 않습니다. 이러한 이유로 응용 프로그램을 계속 사용할 수 있으며 반면 공급업체는 응용 프로그램을 수정해야 할 동기를 부여받습니다.

호환성 수정 지원

호환성 수정은 Windows 운영 체제의 일부로 제공되며 Windows 업데이트를 사용하여 업데이트됩니다. 따라서 호환성 수정은 Windows와 동일한 수준의 지원을 받습니다.

모든 응용 프로그램에 호환성 수정을 적용할 수 있지만, Microsoft는 호환성 수정 인프라를 사용하여 자체 사용자 지정 수정을 만들 수 있는 도구는 제공하지 않습니다.

참고 항목

기타 리소스

응용 프로그램 호환성 수정 및 사용자 지정 수정 데이터베이스 관리