FSCTL_LOCK_VOLUME IOCTL (winioctl.h)

Bloqueia um volume se ele não estiver em uso. Um volume bloqueado só pode ser acessado por meio de identificadores para o objeto de arquivo (*hDevice) que bloqueia o volume. Para obter mais informações, consulte a seção Comentários.

Para executar essa operação, chame a função DeviceIoControl com os parâmetros a seguir.

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 será definido como STATUS_SUCCESS se a solicitação for bem-sucedida>.

Caso contrário, Status para a condição de erro apropriada como um código NTSTATUS.

Para obter mais informações, consulte Valores NTSTATUS.

Comentários

O identificador hDevice passado para DeviceIoControl deve ser um identificador para um volume, aberto para acesso direto. Para recuperar esse identificador, chame CreateFile com o parâmetro lpFileName definido como uma cadeia de caracteres do seguinte formulário:

\.\X:

em que X é uma letra de partição de disco rígido, unidade de disquete ou unidade CD-ROM. O aplicativo também deve especificar os sinalizadores FILE_SHARE_READ e FILE_SHARE_WRITE no parâmetro dwShareMode de CreateFile.

Se o volume especificado for um volume do sistema ou contiver um arquivo de página, a operação falhará.

Se houver arquivos abertos no volume, essa operação falhará. Por outro lado, o sucesso dessa operação indica que não há arquivos abertos.

Essa operação é útil para aplicativos que precisam de acesso exclusivo a um volume por um período de tempo, por exemplo, utilitário de disco e programas de backup.

Um volume bloqueado permanece bloqueado até que ocorra um dos seguintes procedimentos:

O sistema libera todos os dados armazenados em cache para o volume antes de bloqueá-los. Por exemplo, todos os dados mantidos em um cache de gravação lenta são gravados no volume.

O sistema de arquivos NTFS trata um volume bloqueado como um volume desmontado. O código de controle FSCTL_DISMOUNT_VOLUME funciona da mesma forma, mas não marcar para arquivos abertos antes de desmontar. Observe que, sem uma operação de bloqueio bem-sucedida, um volume desmontado pode ser remontado por qualquer processo a qualquer momento. Esse não seria um estado ideal para executar um backup de volume, por exemplo.

Em Windows 8 e Windows Server 2012, esse código é compatível com as tecnologias a seguir.

Tecnologia Com suporte
Protocolo SMB (SMB) 3.0 No
TFO (Failover transparente) do SMB 3.0 No
SMB 3.0 com compartilhamentos de arquivos de expansão (SO) No
Sistema de arquivos de Volume Compartilhado Clusterizado (CsvFS) Ver comentário
 

No Volume de Bloqueio de CsvFs, a notificação PNP será enviada somente no nó em que a solicitação de bloqueio foi emitida. Um bloqueio só terá êxito se o filtro CsvFs na parte superior do NTFS não vir nenhum arquivo aberto.

Depois de adquirir um bloqueio em um volume CSV, você deve fechar o identificador usado para bloquear esse volume antes de abrir um identificador para o volume. Desbloquear o volume usando FSCTL_UNLOCK_VOLUME não é suficiente.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho winioctl.h (inclua Windows.h)

Confira também

CloseHandle

CreateFile

DeviceIoControl

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

Códigos de controle de gerenciamento de volume