Una de las dudas más comunes desde la salida de Windows Vista es que tanto este sistema como Windows 7, a la hora de extraer de manera segura un dispositivo USB, la luz del dispositivo sigue encendida (el puerto sigue proporcionándole corriente) a pesar de que se nos muestra un mensaje indicándonos que podemos quitar de manera segura el dispositivo. En Windows XP al indicarle al sistema que queremos extraer de manera segura el dispositivo, este le retira la alimentación.
Este cambio se debe a que los controladores USB de Vista/7 fueron reescritos casi completamente y uno de esos cambios de comportamiento tuvo como consecuencia que los dispositivos USB no sean capaces de detectar que el puerto USB ha sido suspendido durante una extracción segura. En general, este contratiempo no causa problemas con los dispositivos durante la extracción segura, pues por lo regular si ha pasado un cierto tiempo desde la última transferencia hacia el dispositivo este ha tenido tiempo de actualizar su memoria de almacenamiento permanente a partir de los datos de su cache interna.
El problema: Algunos dispositivos solo vuelcan el contenido de su cache cuando detectan que el puerto ha sido suspendido
Uno de los dispositivos que se basan en esta suposición es el conocido Apple iPod. Por este motivo, Microsoft sacó hace unos años una actualización que evita que los datos del iPod se pierdan o corrompan pese a extraer correctamente el dispositivo. Puede leer el correspondiente artículo de la KB de Microsoft: http://support.microsoft.com/kb/936824/es
Según he podido comprobar depurando el controlador Usbstor.sys de Vista/7, el sistema “rodea” el problema antes mencionado incorporando un flag de compatibilidad al Registro del sistema operativo. Concretamente a partir de Vista SP1 podemos encontrar las claves de Registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbstor5AC12xx y HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbstor5AC13xx en cualquier instalación. Los identificadores de hardware que comienzan por 05AC hacen referencia a la compañía Apple Inc. y el resto identifica el dispositivo, que imagino que harán referencia a iPod y dispositivos similares del mismo fabricante. El valor que se lee es DeviceHackFlags, que en ambas claves contiene un 20 hexadecimal. Este flag implica que el sistema considere que el dispositivo tiene que reconocer una suspensión del puerto USB para evitar daños en el contenido del mismo al quitarlo del equipo. La manera que tiene el sistema para hacerle saber esto al dispositivo es utilizando el comando SCSI Start/Stop Unit.
¿Se podría aplicar esto a otro tipo de dispositivos USB que no sea iPod?
Me dispuse a comprobar que mi investigación estaba en lo cierto, así que preparé un dispositivo USB de Sandisk y me dispuse a modificar el Registro. Agregué la clave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbstor781xxxx, que haría referencia a cualquier dispositivo de la empresa Sandisk, y en ella agregué un valor de tipo DWORD de nombre DeviceHackFlags con contenido 20. No es necesario reiniciar el sistema, simplemente conecté el dispositivo USB y me dispuse a extraerlo de manera segura desde la interfaz de Windows 7 (concretamente haciendo clic con el botón derecho sobre el correspondiente icono del área de notificación, esto es importante). ¡Voilá! El sistema informa de que el dispositivo USB ha sido extraido correctamente y la luz del mismo se apaga.
Realmente no considero necesario aplicar esto a todos los dispositivos USB que suela conectar a su PC. A día de hoy Microsoft solo tiene constancia de que Apple iPod sufre problemas con la extracción segura de Windows Vista/7, y para ello proporcionó la correspondiente actualización. Si en el futuro se descubren nuevos dispositivos que sufran del mismo problema, probablemente Microsoft hará los cambios pertinentes en la clave de Registro antes mencionada, ya sea a través de una actualización o de un artículo técnico.