"QueryDosDevice failed" NERO - CÓmo deshabilitar dispositivos desde la lÍnea de comandos

 

Antecedentes del Problema

En ciertas combinaciones de hardware, al arrancar cualquier producto Nero de la versión 6 y anterior a la versión 6.3.0.0, daba un problema con la wnaspi32.dll del propio Nero y la aplicación no arrancaba.
Desde la versión 6.3.0.0, en las máquinas en que sucedía dicho problema, saca una ventana con el mensaje "QueryDosDevice failed", y el producto Nero arranca sin "ver" las grabadoras.

Investigando en Google, no veo documentado este problema.
Puesto al habla con el fabricante, me solicita unas imágenes de las pantallas y sigue sin solucionar el problema.
Igualmente reviso la función QueryDosDevice la cual pertenece al API de Windows, y probándola mediante un vbs no se recibe de ella ningún código de retorno que no esté documentado, por lo cual se deduce que el problema está en el propio Nero, en la forma de llamar o tratar a dicha función, y en combinación con hardware especifico ya que sucede en muy pocas máquinas.

Investigando en dichas máquinas, -en las cuales el problema sucede en instalación limpia del sistema + Nero, lo único que se ve en común entre ellas es que tienen muchas unidades de medios removibles USB (ZIP 100, >IP 250, USB Pen, lectores de tarjetas de memoria USB, etc...). Igualmente se comprueba que desenchufando todos los dispositivos USB de medios removibles funciona. Enchufando uno a uno, deja de funcionar y no hay uno de ellos que sea responsable en particular de la situación. Se cambia todo el hardware USB y sigue pasando por lo que parece una incompatibilidad por mal tratamiento de los códigos de retorno de la función QueryDosDevice por parte de Nero.

Soluciones

O bien, desconectar los dispositivos de medios removibles para usar Nero, o bien desactivarlos desde el Administrador de dispositivos.

En cualquier caso, ambas cosas son una incomodidad .
La segunda pasaría por una alternativa: si pudiésemos crearnos un enlace directo a "algo" que nos desactivase los dispositivos que quisiésemos sin necesidad de ir uno por uno en el Administrador de dispositivos, podríamos hacerlo, arrancar Nero, y posteriormente con otro acceso directo, volver a activar los dispositivos.

DEVCON - Utilidad de comando de línea

Existe una herramienta de Microsoft, que permite ver, activar, desactivar (tanto en local como en máquinas remotas de las cuales seamos administradores) documentado en este articulo:

http://support.microsoft.com/default.aspx?scid=kb;en-us;311272

Del link anterior, nos podemos bajar el programa devcon (sólo funciona en 32 bits, no funciona en el XP de 64 bits tal y como documenta el articulo).

La sintaxis del comando, básicamente consiste (para nuestras necesidades) en:

devcon disable CLAVE_DEL_REGISTRO_A_DESACTIVAR
devcon enable CLAVE_DEL_REGISTRO_A_ACTIVAR

Las claves del registro, son las que definen el dispositivo correspondiente en

HKEY_LOCAL_MACHINE\CurrentControlSet\ENUM.

Pero... el propio comando nos da una facilidad para no tener que localizar una a una las claves en el registro, y además, evitar la posibilidad de confusiones de dónde debe apuntar dicha clave.
De una manera sencilla, en el propio Administrador de dispositivos, si pinchamos cualquier dispositivo con el botón derecho, propiedades, y pinchamos la pestaña de "detalles", podemos ver la clave completa que cuelga de HKEY_LOCAL_MACHINE\CurrentControlSet\ENUM.

El texto: HKEY_LOCAL_MACHINE\CurrentControlSet\ENUM podemos sustituirlo en el comando "devcon" por una @. Por tanto, sería:

devcon disable @lo_que_se_ve_en_pestaña_detalle

De esta manera..."casi" tenemos solucionado el problema.
Digo "casi", porque aparece un problema añadido: la mayoría de los dispositivos tiene un "and" (un "&") en su descripción, y Windows entiende el & como un concatenador de comandos y no como como un símbolo. Pero el propio Windows nos da la solución: simplemente añadiendo a cualquier símbolo reservado (y el & lo es), el carácter"^" por delante, lo tomará como literal en la cadena y no como concatenador de comandos en este caso.

Por tanto, imaginemos que tenemos un dispositivo que lo vemos en la pestaña detalles del Administrador de dispositivos como:

USB\VID_0C76&PID_0005\6&38F94657&0&3

La manera de desactivarlo, sería entonces:

devcon disable @USB\VID_0C76^&PID_0005\6^&38F94657^&0^&3

(fijarse en el carácter"^" antes de cada "&")

Con esto, ya estamos en disposición de crearnos un fichero .bat para desactivar los dispositivos que queramos y otro para activarlos.

Con un simple enlace directo a dicha batería o fichero BAT quedaría solucionado el problema.

--

José Manuel Tella Llop
jmtella@compuserve.com

Multinglés/JMT        

11 - abril - 2005