Windows의 "호환 모드"는 어떻게 작동합니까?


답변:


31

호환성 모드는 소위 심을 사용하여 수행됩니다. TechNet 에는 이러한 작동 방식을 설명하는 좋은 기사가 있습니다.

Windows 응용 프로그램 파일에는 응용 프로그램 로더에 응용 프로그램에 필요한 DLL과 그 기능을 알려주는 가져 오기 테이블이 있습니다. 예를 참조하기위한 프로세스 힘 GetVersionEx에서 kernel32.dll. 프로그램 호환성 모드에서 실행해야하는 경우, 다음 심 응용 프로그램과 심을 대체 사이에 넣어 GetVersionEx응용 프로그램이 호출하지 않습니다 그래서, 기능 GetVersionEx에서 kernel32.dll하지만 GetVersionEx심에. 그런 다음 shimmed 함수는 이전 Windows 버전의 동작을 구현합니다. GetVersionEx쉬운 샘플입니다. 각 Windows 버전은에서 자체 버전 번호를 반환 GetVersionEx하므로 이전 Windows를 가짜로GetVersionEx함수는 이제 Windows 7 버전 번호가 아니라 Windows XP 버전 번호를 반환합니다. 따라서 응용 프로그램은 Windows XP에서 실행되고 있다고 생각합니다.

Windows 버전에서 Windows 버전으로의 다른 변경 사항도 있습니다. 예를 들어, 이전 버전에서 프로그램이 DLL을로드 한 경우 DLL의 검색 경로에도 현재 디렉토리가 포함되었습니다. 이것은 보안 문제이므로 기본적으로 최신 버전의 Windows는 현재 디렉토리에서 검색하지 않습니다. 적절한 심으로 오래된 행동을 시뮬레이션 할 수 있습니다.

shim은 응용 프로그램과 Windows API 사이의 계층이므로 응용 프로그램 자체가 수행 할 수있는 작업 만 수행 할 수 있습니다. 예를 들어 심은 UAC를 우회하거나 보호 된 파일에 액세스하는 데 사용할 수 없습니다.

더 알고 싶다면 다음 링크를 참조하십시오.

특히 Microsoft Application Compatibility Toolkit은 살펴볼 가치가 있습니다. 이 도구는 알려진 문제가있는 응용 프로그램, 사용 가능한 모든 호환성 수정 및 모드 및 각 응용 프로그램에 적용되는 수정 프로그램에 대한 개요를 제공합니다.


1
구체적인 예에 ​​대한 나의 호기심을 성공적으로 만족 시켰습니다. 감사합니다!
Kale Muscarella

6

나는 많은 다른 일들이 일어난다 고 생각합니다. 간단한 예는 프로그램이 Windows 버전을 확인할 수 있지만 새 운영 체제의 반환 값과 혼동 될 수 있다는 것입니다. 따라서 호환성 모드를 사용하면 창에 잘못된 버전이보고됩니다. Raymond Chen은 몇 가지 더 언급했습니다. http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx#45590


4

호환성 모드에 대한 내 지식은 여러 Windows 시스템 호출이 프로그램에 속한다는 것입니다.

한 가지 확실한 예는 실제 버전 대신 지정된 Windows 버전을보고하는 GetVersionExGetVersion 함수 입니다.

호환성 모드의 프로그램이 잘 알려진 시스템 폴더의 파일을 참조하면 구식 파일 경로도 자동으로 변환됩니다. 예를 들어 Windows 7에서 XP 호환 모드로 프로그램을 실행할 때 C:\Documents and Settings변환 C:\Users\<user>\Documents됩니다.


-5

이 기사는 그것을 잘 설명합니다.

http://arstechnica.com/information-technology/2010/01/windows-xp-mode/

그러나 Windows 7에서는 Redmond가 Windows XP Mode라는 문제에 대한 해결책을 제공했습니다. Windows XP Mode는 가상화 기술을 사용하여 가상화 된 Windows XP 복사본에서 실행되는 응용 프로그램이 Windows 7 시작 메뉴와 Windows 7 바탕 화면에 표시되도록합니다.


4
Windows XP Mode! = 호환 모드
Kevin Mark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.