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 aplicativo usa o código de controle FSCTL_UNLOCK_VOLUME para desbloquear o volume.
- O identificador é fechado, diretamente por meio de CloseHandle ou indiretamente, quando um processo é encerrado.
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) |