Condividi tramite


FSCTL_LOCK_VOLUME IOCTL (winioctl.h)

Blocca un volume se non è in uso. È possibile accedere a un volume bloccato solo tramite handle all'oggetto file (*hDevice) che blocca il volume. Per altre informazioni, vedere la sezione Osservazioni.

Per eseguire questa operazione, chiamare la funzione DeviceIoControl con i parametri seguenti.

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> è impostato su STATUS_SUCCESS se la richiesta ha esito positivo.

In caso contrario, stato della condizione di errore appropriata come codice NTSTATUS.

Per altre informazioni, vedere Valori NTSTATUS.

Commenti

L'handle hDevice passato a DeviceIoControl deve essere un handle a un volume aperto per l'accesso diretto. Per recuperare questo handle, chiamare CreateFile con il parametro lpFileName impostato su una stringa del modulo seguente:

\.\X:

dove X è una lettera di partizione del disco rigido, un'unità disco floppy o un'unità CD-ROM. L'applicazione deve specificare anche i flag di FILE_SHARE_READ e FILE_SHARE_WRITE nel parametro dwShareMode di CreateFile.

Se il volume specificato è un volume di sistema o contiene un file di pagina, l'operazione ha esito negativo.

Se nel volume sono presenti file aperti, questa operazione avrà esito negativo. Al contrario, l'esito positivo di questa operazione indica che non sono presenti file aperti.

Questa operazione è utile per le applicazioni che richiedono l'accesso esclusivo a un volume per un periodo di tempo, ad esempio utilità disco e programmi di backup.

Un volume bloccato rimane bloccato fino a quando non si verifica una delle operazioni seguenti:

  • L'applicazione usa il codice di controllo FSCTL_UNLOCK_VOLUME per sbloccare il volume.
  • L'handle chiude, direttamente tramite CloseHandle o indirettamente quando termina un processo.
Il sistema scarica tutti i dati memorizzati nella cache nel volume prima di bloccarlo. Ad esempio, tutti i dati contenuti in una cache di scrittura lazy sono scritti nel volume.

Il file system NTFS considera un volume bloccato come volume smontato. Il codice di controllo FSCTL_DISMOUNT_VOLUME funzioni in modo analogo, ma non verifica la presenza di file aperti prima di smontare. Si noti che senza un'operazione di blocco riuscita, un volume smontato può essere rimontato da qualsiasi processo in qualsiasi momento. Questo non sarebbe uno stato ideale per eseguire un backup del volume, ad esempio.

In Windows 8 e Windows Server 2012 questo codice è supportato dalle tecnologie seguenti.

Tecnologia Supportato
Protocollo SMB (Server Message Block) 3.0 No
Failover trasparente SMB 3.0 (TFO) No
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO) No
File system del volume condiviso del cluster (CsvFS) Vedere il commento
 

Nel volume di blocco csvfs, la notifica PNP verrà inviata solo nel nodo in cui è stata emessa la richiesta di blocco. Un blocco avrà esito positivo solo se il filtro CsvFs sopra NTFS non visualizza file aperti.

Dopo aver acquisito un blocco in un volume CSV, è necessario chiudere l'handle usato per bloccare tale volume prima di aprire un handle al volume. Sbloccare il volume usando FSCTL_UNLOCK_VOLUME non è sufficiente.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione winioctl.h (include Windows.h)

Vedi anche

Closehandle

CreateFile

Deviceiocontrol

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

Codici di controllo della gestione del volume