Compartir a través de


FSCTL_LOCK_VOLUME IOCTL (winioctl.h)

Bloquea un volumen si no está en uso. Solo se puede acceder a un volumen bloqueado a través de identificadores para el objeto de archivo (*hDevice) que bloquea el volumen. Para obtener más información, vea la sección Comentarios.

Para realizar esta operación, llame a la función DeviceIoControl con los siguientes parámetros.

BOOL DeviceIoControl(
  (HANDLE) hVolume,            // handle to a volume
  (DWORD) FSCTL_LOCK_VOLUME,   // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  (LPDWORD) lpBytesReturned,   // number of bytes returned
  NULL                         // OVERLAPPED structure
);

Irp-IoStatus.Status> se establece en STATUS_SUCCESS si la solicitud se realiza correctamente.

De lo contrario, estado de la condición de error adecuada como código NTSTATUS.

Para obtener más información, vea Valores NTSTATUS.

Comentarios

El identificador hDevice pasado a DeviceIoControl debe ser un identificador de un volumen abierto para el acceso directo. Para recuperar este identificador, llame a CreateFile con el parámetro lpFileName establecido en una cadena del siguiente formulario:

\.\X:

donde X es una letra de partición de unidad de disco duro, una unidad de disquete o una unidad de CD-ROM. La aplicación también debe especificar las marcas FILE_SHARE_READ y FILE_SHARE_WRITE en el parámetro dwShareMode de CreateFile.

Si el volumen especificado es un volumen del sistema o contiene un archivo de página, se produce un error en la operación.

Si hay archivos abiertos en el volumen, se producirá un error en esta operación. Por el contrario, el éxito de esta operación indica que no hay archivos abiertos.

Esta operación es útil para las aplicaciones que necesitan acceso exclusivo a un volumen durante un período de tiempo, por ejemplo, programas de copia de seguridad y utilidad de disco.

Un volumen bloqueado permanece bloqueado hasta que se produzca una de las siguientes acciones:

  • La aplicación usa el código de control FSCTL_UNLOCK_VOLUME para desbloquear el volumen.
  • El identificador se cierra, ya sea directamente a través de CloseHandle o indirectamente cuando finaliza un proceso.
El sistema vacía todos los datos almacenados en caché en el volumen antes de bloquearlos. Por ejemplo, los datos contenidos en una caché diferida de escritura se escriben en el volumen.

El sistema de archivos NTFS trata un volumen bloqueado como un volumen desmontado. El código de control FSCTL_DISMOUNT_VOLUME funciona de forma similar, pero no comprueba si hay archivos abiertos antes de desmontar. Tenga en cuenta que, sin una operación de bloqueo correcta, cualquier proceso puede volver a montar un volumen desmontado en cualquier momento. Esto no sería un estado ideal para realizar una copia de seguridad de volumen, por ejemplo.

En Windows 8 y Windows Server 2012, este código es compatible con las siguientes tecnologías.

Tecnología Compatible
Protocolo Bloque de mensajes del servidor (SMB) 3.0 No
Conmutación por error transparente (TFO) de SMB 3.0 No
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO) No
Sistema de archivos de Volumen compartido de clúster (CsvFS) Ver comentario
 

En csvFs Lock Volume (Volumen de bloqueo de csvFs), la notificación PNP se enviará solo en el nodo en el que se emitió la solicitud de bloqueo. Un bloqueo solo se realizará correctamente si el filtro CsvFs encima de NTFS no ve ningún archivo abierto.

Después de adquirir un bloqueo en un volumen CSV, debe cerrar el identificador usado para bloquear ese volumen antes de abrir un identificador al volumen. Desbloquear el volumen mediante FSCTL_UNLOCK_VOLUME no es suficiente.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado winioctl.h (incluye Windows.h)

Consulte también

CloseHandle

CreateFile

DeviceIoControl

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

Códigos de control de administración del volumen