Windows Vista 호환성 점검 (2) - Application Compatibility Database

ACD

Windows Vista를 사용하시다보면, 상기와 같은 프로그램 호환성 창이 나오는 것을 보셨을 것입니다. Windows Vista의 경우, 유명 프로그램에 대해서 호환성 테스트를 Microsoft가 진행을 하고, 해당 벤더와의 협의를 거쳐, 일부 호환성에 문제가 있는 프로그램에 대해서는 이를 사용자에게 알려주고, 호환성 이슈가 발생하는 부분에 대해서 처리를 시도하면서 실행을 해주는 기능이 있습니다.

상기 프로그램이 100% Windows Vista에 맞게 작동하기 위해서는, 프로그램의 수정이 필요할 수 있습니다. 이러한 수정을 하기 전 사용자들이 기존 프로그램을 사용할 수 있도록, 관련 설정을 가지고 있는 Application Compatibility Database를 Windows Vista는 가지고 있습니다.

여기서 확장자가 SDB인 파일이 바로 해당 데이터베이스 파일입니다.

조금 생각을 확장해보는 것이 어떨까요? 현재 조직이나 개인이 사용하는 프로그램이 호환성 문제가 발생했을 때, 프로그램을 재개발해야하지 않겠냐는 생각을 가지실 수 있습니다. 그때까지 Windows Vista는 못쓴다라는 결론이 나올 수 있는 것은 당연지사입니다. 그러나 Windows Vista에서는 호환성 이슈가 발생한 프로그램에 대해서, 해당 이슈를 해결할 방법론을 저장해놓고, 이에 대한 설정을 프로그램 실행시에 확인하여, 로딩한 후 적용해는 아키텍쳐를 가지고 있습니다.

더욱 정확하게 살펴보면, 다음과 같습니다.

사용자의 Explorer.exe 프로세스에서 새로운 프로그램을 실행하려고 합니다. 이때 ShellExecute는 CreateProcess를 호출하게 되고, CreateProcess는 커널내 NTCreateProcess를 호출하게되어, 프로세스가 생성되고 응용 프로그램이 구동되게 됩니다. 이러한 방식이 기존 Lecagy O/S의 구동방식이죠.

Windows Vista는 UAC라는 보안 아키텍쳐가 추가되었습니다. 이 UAC는 다음과 같이 프로세스 구동시에 관여를 하게 됩니다.

  1. ShellExecute()CreateProcess() 를 호출합니다.
  2. CreateProcess() 는 Application Compatibility, Fusion(Manifest), Installer Detection을 호출하여, 해당 프로그램이 상승된 권한이 필요한지를 확인합니다.
  3. CreateProcess() 는 상승된 권한이 필요한 경우 ERROR_ELEVATION_REQUIRED를 리턴합니다.
  4. ShellExecute() 는 받은 에러를 확인하고, AIS를 통해 상승된 권한 획득을 시도합니다.
  5. AIS는 사용자의 권한에 따라 확인 창 or 관리자 계정 정보를 묻고, 별도의 토큰을 발행합니다. (CreateProcessAsUser())

Application Compatibility Database내 이미 Microsoft가 상당수의 응용 프로그램에 대한 정보를 넣어놓았고, 원하실 경우 추가로 넣을 수 있습니다. 이제 그림이 슬슬 그려지시나요? 조직내 응용 프로그램이 Windows Vista에서 작동되지 않는다.. 그러면, 작동하는 방법론에 대해서 Application Compatibility Database에 추가한다면... 감이 오시죠? 다음 포스팅에서 추가하는 방법론에 대해서 살펴보겠습니다.