Winapi: Obtenga el proceso que tiene un controlador específico de un archivo

Actualmente tengo un software que tiene un controlador de filtro de archivos, durante la instalación del software, el controlador se inicia como servicio de esta manera:

CreateService(serviceManager, name, displayName,
                          SERVICE_START | DELETE | SERVICE_QUERY_STATUS | SERVICE_STOP,
                              SERVICE_FILE_SYSTEM_DRIVER, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE,
                                  path, NULL, NULL, NULL, NULL, NULL);

Donde esta el caminoC:\Program Files(x86)\TSU\driver\TSUfsd.sys.

El problema que tengo es durante la desinstalación del software. Me da acceso denegado cuando el software intenta eliminarTSUfsd.sys archivo.

He comprobado cómo el software elimina el controlador y resulta que lo elimina conDeleteService función, y espera a que el servicio cambie su estado deSERVICE_STOP_PENDING aSERVICE_STOPPED y si no sucede después de un tiempo, recibe el servicioPID y lo mata conProcessTerminate y luego intenta eliminar el archivo conrmdir /S /Q C:\Program Files(x86)\TSU\.

Intenté encontrar el proceso que podría haber tenido el identificador del archivo (con Process Explorer) pero no pude encontrar ninguno. Entonces pensé que tal vez el servicio todavía está vivo, así que escribísc query TSUfsd pero el servicio también se fue.

También intenté cambiar los permisos y otorgar permisos completos a mi usuario, pero aún se produjo el mismo error.

Entonces mis preguntas son:

¿Hay alguna otra forma de verificar qué proceso (o cualquier otra cosa) puede retener un archivo?

También he notado que, cada vez que intento eliminar el archivo con Cygwin (rm TSUfsd.sys) elimina el archivo sin problemas. ¿Cuál es la diferencia entre eliminar un archivo con cmd (del /f <filename>) y con cygwin?

Respuestas a la pregunta(1)

Su respuesta a la pregunta