Share via


Información confidencial de Windows Forzar identificadores cerrados

Raymond Chen

¿Haya alguna vez desea eliminar un archivo pero no se pudo porque algún programa tenía el archivo abrir? Lo correcto a en este caso sería convencer al programa que tiene el archivo abrir para cerrarlo, puede, por ejemplo, solicite a la persona que editar el documento para cerrarlo. Pero a veces obtener impaciente y utilizar alguna utilidad que puede obligar a identificadores de archivo cerrados. Y, a continuación, se haya comercializado seguridad temporal de daño de los datos a largo plazo.

Forzar un controlador de cierre es equivalente a alcanzar en un programa y liberar algo de memoria. El programa considera el identificador (o memoria) sigue siendo válida y continuará usando. Pero dado que el controlador es realmente libre, se utilizarse para algo más.

Supongamos que está en la escuela secundaria y verá un libro en número de almacén 305 que desee. Forzar el almacén abierto y toma el libro. Ahora el almacén está abierto y otro usuario incluye de forma y coloca su propia bolsa de libro en él. Mientras tanto, al propietario original del almacén 305 devuelve de comida, toma la bolsa de libro y se lleva a la clase.

Ahora que tiene dos problemas: el usuario original del almacén 305 tiene la bolsa de libro erróneo y es en peligro de tomar notas en Bloc de notas del otro usuario. Mientras tanto, la persona del segundo, sólo tenía su bolsa libro robado.

Si eres muy suerte, lo siguiente que hará el programa es cerrar el identificador que se ve obligado a cerrar anteriormente. El programa obtiene un error de identificador no válido, pero ya que no hay nada que hacer, el programa sólo realiza como si el identificador se cierra correctamente. Pero esto rara vez es el caso.

Más probable, el programa finalmente se volver al controlador e intente utilizar, obtención de errores de identificador no válido. Aún más probable es que es que el controlador que fuerza cerrado se utilizará para algo más. Y eso es cuando las cosas empiezan a ir berserk completamente. Supongamos que el controlador se reutilizar como otro archivo. Ahora el programa considera de leer y escribir desde el primer archivo, pero en realidad está operativo en el segundo archivo. El resultado es daños en los datos en el primer archivo (no de datos que ya se han escrito deben) y en el segundo archivo (diseñados para el primer archivo se ha escrito en el segundo archivo de datos).

Cuando el programa de cierre del primer archivo, también cierra el identificador de reciclado. Ha creado un error en cascada: se fuerza el primer archivo cerrado, y el resultado que se ha forzado algún controlador de segundo cerrado.

Este daño de los datos puede seguir indefinidamente, como cada componente que solicita que un identificador tiene ese identificador sin darse cuenta dañado por el componente anterior. Cuando el componente anterior, por último, cierra lo piensa es un identificador válido, realmente cierra el identificador utilizado por el componente actual, que ahora procede a dañar el siguiente componente que solicita un identificador.

Supongamos que un servicio de índice de búsqueda tiene un archivo abierto para la indización, pero ha llegado bloqueado temporalmente y desea eliminar el archivo, por lo que se (unwisely) forzar el identificador de cierre. El servicio de índice de búsqueda abre el archivo de registro para grabar información y el controlador para el archivo eliminado es reciclado como el identificador en el archivo de registro. Por último, finaliza la operación atascada y el servicio de índice de búsqueda, por último, Obtiene alrededor para cerrar ese identificador tenía abrir, pero termina cierre accidentalmente el identificador de archivo de registro.

El servicio de índice de búsqueda abre otro archivo, dice un archivo de configuración para escribir para que pueda actualizar algún estado persistente. El identificador para el archivo de registro Obtiene reciclado como el identificador para el archivo de configuración. El servicio de índice de búsqueda desea iniciar una parte de la información, por lo que escribe en su archivo de registro. Por desgracia, el identificador de archivo de registro se ha cerrado y volver a utilizar el controlador para su archivo de configuración. La información registrada, que entra en el archivo de configuración, dañando.

Mientras tanto, otro controlador que fuerza cerrado se volverá a utilizar como un identificador de la exclusión mutua, que se utiliza para ayudar a evitar que está dañado datos. Cuando se cierra el identificador de archivo original, se cierra el identificador de la exclusión mutua y la protección contra daños en los datos se pierden. Cuanto más tiempo se ejecuta el servicio, más dañado convertirse en sus índices. Finalmente, alguien advierte que el índice está devolviendo resultados incorrectos. Y cuando intente reiniciar el servicio, falla porque se han dañado sus archivos de configuración.

Informar del problema a la compañía que realiza el servicio de índice de búsqueda y determinar que el índice se ha dañado, Misteriosamente ha detenido el archivo de registro en registro, y el archivo de configuración se sobrescribe con elementos no utilizados. Algunos técnico deficiente se ha asignado la tarea hopeless de saber por qué el servicio daña sus índices y archivos de configuración, que el origen de los daños es que fuerza un controlador de cerrado.

Raymond Chen Sitio Web de " Old New Thing" y libro idéntico título (Addison-Wesley, 2007) tratar Windows histórico, programación de Win32 y misreading los titulares de estilo periodístico.