Cerca de uma semana atrás, o NTVDM em uma instalação do XP quebrou.
O primeiro sintoma foi que um executável de 16 bits executado durante um arquivo em lote de execução automática travaria e fixaria a CPU em 100% até que ntvdm.exe
fosse eliminado, ponto no qual o arquivo em lote continua em execução (embora sem o trabalho que o executável deveria ter feito). O próximo sintoma foi que um executável de 16 bits diferente que é executado como parte de um script de lote de desligamento seria interrompido, fazendo com que o script falhasse.
Curiosamente, eles fazem algumas vezes trabalho (~ 30%). Em outras palavras, se um programa for executado (na caixa de diálogo Executar ) 10 vezes, ele poderá ser executado corretamente cerca de 2 a 4 vezes e travar o restante do tempo. Isso ocorre principalmente com programas mais simples que imprimem algo ou opõem-se a outros mais complicados com interfaces de usuário como edit.com
ou command.com
, que parecem sempre interrompidas. Alguns programas selecionados são extremamente simples (por exemplo, crlf.com
: 578 bytes, ret.com
: 1 byte, etc.) sempre parecem ser executados e retornam sem problemas.
Alguns testes mostram que o problema é com o próprio NTVDM e não apenas com os executáveis específicos (que funcionaram muito bem até recentemente). Por exemplo, a execução de edit.com
abre um console e exibe o editor, mas não responde ao teclado e deve ser eliminado. De fato, mesmo a execução de command.com
não funcionará; ele abre um console e mostra o prompt, em seguida, apenas fica lá, sem resposta.
Eu verifiquei todos os arquivos relacionados NTVDM (e vários outros arquivos do sistema operacional) e eles estão todos corretos. Eu também verifiquei vários registros relacionados e todos eles também. Os programas rodam bem em outras instalações do XP (o que não é uma surpresa, já que command.com
e edit.com
funcionam também); então é essa máquina específica. O ambiente não mudou desde que o NTVDM parou de funcionar, mas eu verifiquei de qualquer maneira e não há nada claramente problemático; temp
e tmp
apontam para diretórios existentes sem nomes LFN, sem variáveis quebradas com nulos ou semelhantes, e enquanto o path
é longo, ele existe há algum tempo.
Arquivos verificados: ntd*, ntv*, dos*, redir.exe, Mscdexnt.exe, *.sys
Inscrições do registro verificadas: *\Software\Microsoft\Command processor, *ControlSet*\Control\WoW
, *\Software\Microsoft\Windows NT\CurrentVersion\WOW*
O NTVDM e os aplicativos de 16 bits funcionam bem no modo de segurança na máquina em questão; é apenas no modo normal que eles param.
Alguém pode pensar em algo que possa quebrar o NTVDM de uma maneira que produza esses sintomas?
(Para ser claro, NÃO é o erro comum “A CPU da NTVDM encontrou uma instrução ilegal.” Além disso, não sugira usar o Dosbox ou outro software da VM porque isso não é aplicável e, além disso, , os programas em questão funcionaram antes, sem mencionar que os programas de 16 bits do Windows não funcionam.