Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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) |