IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL (ntifs.h)
El código de control IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES se envía para forzar un vaciado de un sistema de archivos antes de que se produzca una instantánea de volumen. Este IOCTL se emite como una solicitud de IRP_MJ_DEVICE_CONTROL que se envía solo al objeto de dispositivo de volumen de un sistema de archivos local y a los controladores de filtro del sistema de archivos que pueden haberse asociado a ese volumen. Este IOCTL se envía normalmente por el servicio de instantáneas de volumen, pero también puede ser emitido por otras aplicaciones o procesos en modo de usuario. También es posible, en circunstancias especiales, que el controlador de instantáneas de volumen (volsnap.sys) envíe este IOCTL durante una solicitud de hibernación o antes de un volcado de memoria. Este IOCTL se envía a los controladores de filtro del sistema de archivos, los controladores del sistema de archivos y otros controladores de dispositivo (controladores de filtro de almacenamiento y controladores de almacenamiento, por ejemplo) ubicados debajo de los sistemas de archivos.
Cuando un sistema de archivos como NTFS recibe IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES, el sistema de archivos debe vaciar el volumen en el disco, lo que obliga a las estructuras de disco del sistema de archivos a un estado coherente y actualizado. El sistema de archivos debe bloquear el sistema de archivos en un estado montable de solo lectura, bloqueando los cambios nuevos del sistema de archivos para evitar que las páginas de disco almacenadas en caché se desfasen. Una vez que el sistema de archivos ha colocado el sistema de archivos en tal estado, debe pasar el IRP con la IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL por la pila al siguiente controlador mientras continúa manteniendo el sistema de archivos en un estado montable de solo lectura hasta que los controladores siguientes completen el IRP. Cuando el IRP se completa o se cancela, el sistema de archivos vuelve a habilitar la E/S en el volumen y devuelve.
Código principal
Búfer de entrada
IrpSp->Parameters.DeviceIoControl.IoControlCode se establece en IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES.
Búfer de salida
None
Bloque de estado
El miembro Status se establece en STATUS_SUCCESS si se ejecuta correctamente o en un valor NTSTATUS adecuado, como uno de los siguientes:
STATUS_FILE_LOCK_CONFLICT
Se encontró un conflicto de bloqueo de archivos. El administrador de filtros puede devolver este error.
STATUS_VOLUME_DISMOUNTED
El volumen se desmontó.
Comentarios
Una instantánea de un volumen es una copia a un momento dado de ese volumen. La instantánea se usa principalmente en una aplicación de copia de seguridad para que pueda realizar copias de seguridad de archivos de forma coherente, aunque los archivos realmente cambien durante el tiempo para completar la operación de copia de seguridad. También se puede usar una instantánea para preparar un volumen para una hibernación resultante de una solicitud PNP y para volcados de memoria.
Windows XP y versiones posteriores del sistema operativo incluyen un marco para orquestar el tiempo de una instantánea, así como un controlador de filtro de almacenamiento (no un controlador de filtro del sistema de archivos) que usa una técnica de copia en escritura para crear una instantánea. El Servicio de instantáneas de volumen (VSS) organiza la instantánea. El controlador de instantáneas de volumen, volsnap.sys, es un controlador de filtro de almacenamiento que se carga sobre la pila de almacenamiento debajo de los sistemas de archivos.
Un IOCTL importante relacionado con instantáneas que afecta a los sistemas de archivos es IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES. Este IOCTL está pensado realmente para la interpretación por parte de los sistemas de archivos, aunque es un IOCTL. Esto se debe a que todos los sistemas de archivos deben pasar el IOCTL a un controlador de nivel inferior que está esperando a procesar el IOCTL después del sistema de archivos.
IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES solo se envía al objeto de dispositivo de volumen de un sistema de archivos local y a los controladores de filtro del sistema de archivos que pueden haberse asociado a ese volumen. El objeto de dispositivo de almacenamiento que está vinculado al volumen a través del miembro RealDevice de la estructura Bloque de parámetros de volumen (VPB) siempre tendrá uno de los siguientes tipos de dispositivo:
FILE_DEVICE_DISK
FILE_DEVICE_VIRTUAL_DISK
Este IOCTL no se envía a sistemas de archivos remotos.
Cuando un sistema de archivos local recibe IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES, el controlador debe crear una imagen coherente de los metadatos del sistema de archivos. El controlador no debe tener ninguna página que sea incoherente entre sí. El controlador debe vaciar cualquier parte de sus metadatos y búferes de caché asignados que no haya vaciado en el disco y mantener las escrituras hasta que los controladores de nivel inferior hayan completado el IOCTL.
En el caso de los controladores del sistema de archivos de minifiltro, el administrador de filtros recibe este IOCTL y emite una devolución de llamada al controlador de minifiltro si el controlador se ha registrado para recibir este IRP. Cuando un controlador de minifiltro o un controlador de filtro del sistema de archivos heredado recibe este IOCTL, el controlador debe vaciar cualquier parte de sus metadatos que no haya vaciado en el disco. Si el controlador de filtro usa búferes de caché asignados para escribir sus metadatos, el sistema de archivos se encargará de todo el vaciado. El controlador de filtro solo tiene que asegurarse de que no escribe en ninguno de sus búferes de caché asignados mientras el sistema de archivos intenta vaciar los cambios en el disco. Un controlador de filtro del sistema de archivos heredado debe pasar irP al siguiente controlador de la pila.
Un controlador puede optar por vaciar los datos mientras mantiene este IRP que contiene el IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES IOCTL antes de pasarlos a controladores de nivel inferior. Los datos vaciados en el disco mientras mantienen este IOCTL antes de enviar el IRP al siguiente controlador de nivel inferior estarán disponibles en la instantánea resultante.
Si se trata de un volumen de solo lectura, normalmente no hay nada que un controlador de filtro del sistema de archivos o del sistema de archivos necesite hacer al recibir este IOCTL, excepto enviarlo al siguiente controlador de nivel inferior.
Requisitos
Requisito | Valor |
---|---|
Header | ntifs.h (incluya Ntifs.h, Fltkernel.h) |