El error “Windows no puede detener el dispositivo de volumen genérico…” Handles, Process Explorer y su solución

Hola a todos,
Hoy quiero compartirles un artículo un poco más corto pero que con ayuda de Process Explorer creo que nos puede ayudar en muchas ocasiones para solucionar el error típico que se presenta.
El problema
Cuando estamos trabajando con archivos dentro de un dispositivo (La mayoría de veces ocurre en este escenario) o bien con un archivo que está en el sistema operativo al tratar bien sea de expulsar el dispositivo, ó borrar el archivo local podremos tener un error similar a este:


“Windows no puede detener el dispositivo de volumen genérico porque un programa lo está usando. Cierre cualquier programa que pueda estar usando el dispositivo e intente de nuevo más tarde”
“Esta acción no se puede completar porque el archivo está siendo utilizado por otro programa”
*Nota: El mensaje de error puede variar un poco dependiendo de lo que esté bloqueando pero en general indicará que no es posible expulsar o deterner el dispositivo (o eliminar archivo por ejemplo) porque está siendo utilizado.
La causa
Realmente en la mayoría de las ocasiones la causa y la solución son bastante predecibles ya que podemos tener ventanas abiertas o archivos que teníamos dentro del dispositivo, o en el caso de cuando queremos mover o eliminar algun archivo lo teníamos abierto todavía, la solución aquí sencillamente es que cerramos todo.
El cambio está es cuando por lo menos todo lo de nuestra barra de tareas está cerrado y los mensajes continúan.. ¿Qué hacemos? Normalmente expulsar sin terminar el dispositivo del equipo.
Ahora, ¿Cuál es la razón de este error? Pues efectivamente se da porque aplicaciones o en general procesos (Que la instancia representativa de la aplicación) está haciendo uso o se está referenciando a Handles del dispositivo o archivo por lo que no se puede cerrar hasta que desaparezca la utilización de estos Handles.
*Nota: Un Handle (Desde lo que he logrado entender), lo podemos interpretar como un tipo de apuntador que Windows le entrega a los procesos que referencia a un objeto para acceder más rápidamente.
La solución
Como dije, básicamente consiste en encontrar qué está haciendo uso de estos Handles y cerrar la aplicación, pero como obviamente no es una tarea tan fácil a simple vista de los procesos que tenemos abiertos necesitamos una ayuda adicional para encontrarlos y cerrarlos.
La ayuda dentro de la cadena de últimos artículos por supuesto está en Sysinternals pero esta vez me refiero a Process Explorer que, básicamente es un “Súper” Administrador de tareas que al igualmente nos entrega información sobre procesos, y rendimiento en el equipo pero de una forma mucho más completa incluyendo información adicional como Hilos de cada proceso y el poder filtrar DLLs y Handles utilizados.
Process Explorer lo pueden descargar desde aquí:
http://download.sysinternals.com/Files/ProcessExplorer.zip
¿Cómo encuentro y cierro Handles?
Para solucionar el problema, primero ejecutamos Process Explorer, en el menú superior de View nos aseguramos que las vistas sean de Handles yendo a Lower Pane View y seleccionamos Handles

A continuación, clic en el menú Find y seleccionamos Find Handle or Dll…

En la ventana de Process Explorer Search es donde debemos buscar por el proceso que queremos borrar o bien por la unidad que queremos cerrar, para este caso el problema lo reproduje tratando de expulsar el dispositivo USB del sistema que tiene la letra asignada “M:”, así que por esta letra es que debería en este caso buscar:

*Nota: Si el implicado fuera por ejemplo Microsoft Word, buscaríamos por su proceso ejecutable “Winword.exe”, y así si los implicados son aplicaciones y no unidades; para unidades recomiendo siempre ir por la letra que la distingue.
Hacemos clic en el botón Search y la búsqueda nos arrojará todo lo que esté utilizando Handles de la unidad incluyendo por ejemplo Procesos y Sesiones:

*Nota: Para el caso de archivos que no se dejan mover, por lo general sólo aparece un proceso o servicio que esté usando ese Handle, será mucho más fácil todavía 
Para ser más exactos en la búsqueda, bastará con hacer clic en uno de los resultados, por ejemplo “M:\” y Process Explorer se pondrá sobre el proceso implicado mostrando la lista de Handles en la parte inferior:

El paso final es simplemente hacer clic derecho sobre el resultado generado al seleccionar el Handle y desde el menú contextual escoger “Close Handle”:

*Nota: Si el resultado (Como en la captura de más arriba) son varios Handles abiertos, debemos ubicarlos todos (Los de la letra M: por ejemplo) y cerrarlos uno por uno.
Una vez cerrados todos, tratamos de copiar el archivo nuevamente o expulsar el dispositivo y ahora el resultado debe ser satisfactorio:

Si el problema sigue sucediendo y al hacer la búsqueda encontramos la misma referencia ya podremos saber qué es lo que mantiene el uso el Handle, no siempre es un error puesto que por ejemplo para las Bases de datos es el proceso de “sqlexpress” que corre constantemente, pero sabiendo el causante ya sabremos qué hacer para completar la operación =)
Espero que esto les pueda ser de utilidad, y además estar compartiendo la mayor cantidad de soluciones posibles logradas con esta Suite de herramientas que no tienen igual!
¡Comentarios bienvenidos!
-Checho-