Présentation du projet
winevdm est une version modifiée de l’émulateur winevdm original, adaptée pour fonctionner sur les systèmes d’exploitation Windows 64 bits. Le dépôt GitHub otya128/winevdm fournit le code source ainsi que les instructions de compilation. L’objectif principal est de permettre le lancement direct d’exécutables Win16 (Windows 1.x à 3.1) en les traduisant en appels Win32, sans recourir à une machine virtuelle complète.
Installation et exigences
Le processus d’installation repose sur deux prérequis matériels et logiciels clairement identifiés : la présence du fichier VCRUNTIME140.dll et le package Microsoft Visual C++ Redistributable 2017 (32 bits). En l’absence de ce DLL, le programme échoue immédiatement, ce qui impose l’installation du redistributable. L’utilisateur peut ensuite glisser‑déposer un exécutable Win16 sur otvdm.exe ou lancer otvdmw.exe. Le dépôt propose également un script d’installation via le fichier install.inf, et la désinstallation se fait simplement en exécutant uninstall.reg. Si la base de registre a été initialisée par Windows Update, il faut répéter la procédure, ce qui indique que le projet dépend d’une configuration de registre stable.
Architecture technique
Le cœur de winevdm repose sur un émulateur CPU 64 bits qui contourne l’impossibilité de modifier le segment LDT sous Windows 64 bits ; l’appel système NtSetInformationProcess(...,ProcessLdtInformation,...) renvoie systématiquement une erreur, ce qui empêche l’utilisation du modèle de segmentation 16 bits natif. Pour pallier cette contrainte, le projet traduit chaque appel 16 bits en son équivalent 32 bits via des routines générées automatiquement par l’outil convspec. Un exemple de conversion est présenté ci‑dessous :
BOOL16 WINAPI DestroyWindow16( HWND16 hwnd ) {
return DestroyWindow( WIN_Handle32(hwnd) );
}Cette fonction montre comment un handle 16 bits (HWND16) est mappé à un handle 32 bits (WIN_Handle32) avant d’appeler l’API Win32 native DestroyWindow. Le même mécanisme s’applique à l’ensemble des API graphiques, système et de gestion de fenêtres, assurant une compatibilité fonctionnelle sans modification du code source des applications Win16.
Émulation DOS et limites
En plus du support Win16, winevdm intègre une couche d’émulation DOS permettant d’exécuter des binaires DOS via la variable d’environnement VDMDOSVER. Cependant, la documentation précise que l’émulation DOS reste incomplète ; les développeurs recommandent l’usage de DOSBox ou de MS‑DOS Player pour les programmes nécessitant un environnement DOS complet. Un autre point critique concerne la gestion des fichiers de configuration : les anciennes applications Win16 écrivent souvent leurs paramètres dans %WINDIR%\.ini. Sous les versions récentes de Windows, l’écriture directe dans %WINDIR% est bloquée, et winevdm redirige ces accès vers un répertoire accessible, préservant ainsi la fonctionnalité sans violer les politiques de sécurité du système.