Corrigindo uma NTVDM quebrada

4

Problema:

Cerca de uma semana atrás, o NTVDM em uma instalação do XP quebrou.

Sintomas:

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.

Testes:

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.

Pergunta:

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.

    
por Synetech 02.05.2012 / 04:29

0 respostas