
Problema:
Cerca de uma semana atrás, o NTVDM em uma instalação do XP quebrou.
Sintomas:
O primeiro sintoma era que um executável de 16 bits executado durante um arquivo em lote de execução automática travaria e travaria a CPU em 100% até ntvdm.exe
ser eliminado, momento em que o arquivo em lote continuaria em execução (embora sem o trabalho que o executável foi deveria ter feito). O próximo sintoma era que um executável diferente de 16 bits executado como parte de um script em lote de desligamento seria interrompido, causando falha no script.
Curiosamente, eles fazemàs vezestrabalho (~30%). Em outras palavras, se um programa for executado (a partir doCorrercaixa de diálogo) 10 vezes, ele pode ser executado corretamente cerca de 2 a 4 vezes e travar no resto do tempo. Isso ocorre principalmente com programas mais simples que imprimem algo ou algo semelhante, em oposição a programas mais complicados com UIs como edit.com
ou command.com
que parecemsemprependurar. Alguns programas selecionados que são extremamente simples (por exemplo,: crlf.com
578 bytes,: ret.com
1 byte, etc.)sempreparecem correr e retornar sem problemas.
Testes:
Alguns testes mostram que o problema está no próprio NTVDM e não apenas nos executáveis específicos (que funcionavam bem até recentemente). Por exemplo, executar edit.com
abre um console e exibe o editor, mas não responde ao teclado e deve ser eliminado. Na verdade, mesmo correr command.com
não funciona; ele abre um console e mostra o prompt e fica parado, sem responder.
Verifiquei todos os arquivos NTVDM relacionados (e vários outros arquivos do sistema operacional) e todos estão corretos. Também verifiquei vários registros de registro relacionados e todos eles também foram verificados. Os programas funcionam bem em outras instalações do XP (o que não é uma surpresa, pois command.com
também edit.com
funcionam); então é aquela máquina específica. O ambiente não mudou desde que o NTVDM parou de funcionar, mas verifiquei mesmo assim e não há nada abertamente problemático; temp
e tmp
apontam para diretórios existentes sem nomes LFN, sem variáveis quebradas com nulos ou algo assim, e embora seja path
longo, já existe há algum tempo.
Arquivos verificados:ntd*, ntv*, dos*, redir.exe, Mscdexnt.exe, *.sys
Inteiros do registro verificados: *\Software\Microsoft\Command processor, *ControlSet*\Control\WoW
,*\Software\Microsoft\Windows NT\CurrentVersion\WOW*
Os aplicativos NTVDM e de 16 bits funcionam bem no modo de segurança na máquina em questão; é apenas no modo normal que eles travam.
Pergunta:
Alguém consegue 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 NTVDM encontrou uma instrução ilegal.”Além disso, não sugira o uso do Dosbox ou outro software 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 próprio Windows não funcionarão.)