원문 캡처 · github.com
원문 캡처 · github.com

winevdm은 64비트 Windows에서 Windows 1.x, 2.x, 3.0, 3.1 등 16비트 Windows 프로그램을 실행하도록 포팅한 winevdm 변형이다.

안정 버전은 GitHub 릴리스 페이지에서, 최신 불안정 버전은 AppVeyor에서 받을 수 있다.

Win16 실행 파일을 otvdm.exe에 끌어다 놓거나 otvdmw.exe를 실행하면 된다. VCRUNTIME140.dll이 없다는 오류가 나오면 Visual Studio 2017용 Microsoft Visual C++ 재배포 가능 패키지(32비트)를 설치해야 한다.

설치하려면 프로그램을 내려받거나 직접 컴파일한 뒤, install 바로가기를 실행하거나 install.inf를 마우스 오른쪽 버튼으로 눌러 ‘설치’를 선택한다. 설치가 끝나면 Win16 바이너리를 직접 실행할 수 있다. Windows Update가 레지스트리를 초기화한 경우에는 설치 절차를 다시 수행해야 한다. 제거할 때는 uninstall.reg를 실행한다. 설정은 otvdm.ini에서 확인할 수 있다.

Visual Studio로 컴파일하려면 Visual Studio 2017을 설치하고 PropertySheet.props를 수정한 뒤 컴파일한다. CMake를 사용하는 절차는 다음과 같다.

git clone https://github.com/otya128/winevdm.git
cd winevdm
mkdir build
cd build
cmake ..
make

이 프로그램에는 CPU 에뮬레이터, Wine 기반 Win16에서 Win32로의 변환 코드, Win16용 DOS 에뮬레이션, 16비트와 네이티브 HANDLE 간 변환 기능이 포함된다. 64비트 Windows에서는 LDT를 수정할 수 없어 NtSetInformationProcess(,ProcessLdtInformation,,)가 항상 오류를 반환하며, 이 프로그램은 이를 처리하기 위해 CPU 에뮬레이터를 포함한다.

install.inf를 이용하는 방식은 64비트 Windows가 16비트 설치 프로그램을 감지했을 때 16비트가 아닌 대체 설치 프로그램을 시작하는 기능을 활용한다. 일부 Win16 프로그램은 설정을 %WINDIR%<filename>.ini에 저장하려 하지만, 최근 Windows에서는 해당 위치에 저장할 수 없어 다른 위치로 리디렉션된다.

winevdm.exe는 DOS 실행 파일도 실행할 수 있지만 DOS 에뮬레이션은 완전하지 않다. DOS 버전은 VDMDOSVER 환경 변수로 설정할 수 있으며, 프로젝트는 DOS 실행에 DOSBox 또는 MS-DOS Player 사용을 권장한다.