2012-01-11 2 views

답변

4

Windows가 호환 모드에서 실행될 때 응용 프로그램에 어떤 영향을 줍니까?

오래된 동작이나 버그를 모방 한 몇 가지 호환성 심을 삽입합니다. 때로는 이것이 필요합니다. 일부 프로그램의 동작은 수정 된 오래된 버그에 달려 있습니다. 또는 문서화되지 않은 기능을 사용했습니다.

조엘의 블로그 항목, How Microsoft Lost the API War 그의 좋은 예를 제공합니다 내가 먼저 자신의 애플리케이션에서 중요한 버그가 있다고 얘기 히트 게임 심시티의 개발자 중 하나 이것에 대해 들어 본

을 : 메모리를 해제 한 직후에 메모리를 사용했는데 DOS에서는 정상적으로 작동하지만 Windows에서는 작동하지 않는 메모리가 해제되었습니다. 해제 된 메모리가 다른 실행중인 응용 프로그램에 즉시 영향을받을 수 있습니다. Windows 팀의 테스터는 여러 가지 인기있는 응용 프로그램을 거치면서 제대로 작동하는지 테스트했지만 SimCity는 계속 충돌했습니다. 그들은 SimCity를 해체 한 Windows 개발자에게이 사실을 알려주고 디버거에서 단계별로 실행 한 다음 버그를 발견하고 SimCity가 실행 중인지 확인하는 특수 코드를 추가했습니다.이 경우 SimCity가 실행되는 특수 모드로 메모리 할당자가 실행되었습니다. 메모리를 확보 한 후에도 메모리를 사용할 수 있습니다.

호환성 shim이 의미하는 바입니다. 기존 동작을 삽입하십시오. 다른 버전의 Windows를보고할지 여부. 특정 API 동작을 다른 방식으로 만드십시오. 또는 Aero와 같은 문제를 일으킬 수있는 Windows의 다른 기능을 비활성화하십시오.

심의 기술적 세부 사항은 here입니다.

심 인프라 스트럭처는 API (Application Programming Interface) 후킹 양식을 구현합니다. 특히 Windows의 API 호출을 대체 코드 (예 : 심 자체)로 리디렉션하기 위해 연결의 특성을 활용합니다. Windows Portable Executable (PE) 및 COFF (공용 개체 파일 형식) 사양에는 여러 헤더가 포함되어 있으며이 헤더의 데이터 디렉터리는 응용 프로그램과 연결된 파일 간의 간접 계층을 제공합니다. 외부 바이너리 파일에 대한 호출은 IAT (Import Address Table)를 통해 이루어집니다.

내가 .NET에서 호환성 모드 설정을 검색 할 수있는 방법이 있나요?

질문 Is a Program Running in Compatibility Mode은 관련 답변을 제공하는 것으로 보입니다.

관련 문제