No Windows 7 x64 Enterprise, usando uma estação de trabalho HP Z600, com dois adaptadores de porta COM diferentes, um USB e um PCI-E. Eu tive o seguinte problema.
Os dispositivos funcionaram de forma confiável por mais ou menos um ano. Agora, no gerenciador de dispositivos, todas as portas COM mostrariam um sinal de aviso de ponto de exclamação amarelo. Após uma inspeção mais aprofundada nas propriedades, cada dispositivo de porta COM declararia:
O Windows não pode carregar o driver de dispositivo para este hardware. O driver pode estar corrompido ou faltando o código 39
Sem sucesso tentei:
- Reiniciando várias vezes
- Reinstalando ambos os adaptadores de porta COM
- Reinstalando o software que interage com o segundo adaptador de porta COM
A solução foi semelhante à resolução do código 39 para dispositivos USB. A solução que finalmente funcionou foi excluir o valor multi-string UpperFilters (tipo: REG_MULTI_SZ) sob a seguinte chave:
No caso de sua chave de registro ter um nome ligeiramente diferente, você pode simplesmente passar por todas as chaves de registro em classe e verificar para que servem. Acabei de percorrer todas as chaves da classe até encontrar a certa. No padrão REG_SZ (como você pode ver na parte superior da minha captura de tela), você encontrará a que tipo de dispositivo a chave de registro se refere.
Observe que este é um UpperFilters vazio na minha captura de tela: na realidade, ele conterá um certo valor, mas, caso contrário, ficará assim.
Então, o que são esses misteriosos filtros superiores? De acordo com uma postagem no techguy.org : "UpperFilters são drivers que manipulam/filtram solicitações de acesso a dispositivos do aplicativo antes de passá-los para o driver principal do dispositivo." Em outras (minhas) palavras, se esse valor estiver errado, sua solicitação de acesso não terminará no driver do dispositivo principal e o dispositivo não funcionará. Em alguns casos, os UpperFilters são essenciais e seu dispositivo não funcionará corretamente sem eles. Portanto, é melhor certificar-se de lembrar seus UpperFilters (ou renomeá-los para UpperFiltersOld ou algo assim) antes da exclusão.