Funzione FsRtlCheckUpperOplock (ntifs.h)

La routine FsRtlCheckUpperOplock fornisce il controllo del blocco opportunistico (oplock) nei file system secondari o a più livelli quando gli oplock contengono lo stato di modifica. I file system secondari, ad esempio i reindirizzamenti di rete e i servizi file di clustering, chiamano FsRtlCheckUpperOplock quando un oplock mantenuto in un file system inferiore dal file system secondario cambia stato. Una modifica dello stato può verificarsi da un'interruzione o da un aggiornamento. FsRtlCheckUpperOplock interromperà l'oplock del file system superiore, se necessario, per confermare il nuovo stato di oplock inferiore. Il chiamante può anche fornire callback facoltativi per le notifiche di conferma di interruzione e lo stato in sospeso.

Sintassi

NTSTATUS FsRtlCheckUpperOplock(
  [in]           POPLOCK                       Oplock,
  [in]           ULONG                         NewLowerOplockState,
  [in, optional] PVOID                         CompletionRoutineContext,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
                 POPLOCK_FS_PREPOST_IRP        PrePendRoutine,
  [in]           ULONG                         Flags
);

Parametri

[in] Oplock

Puntatore a oplock opaco per il file. Questo puntatore deve essere stato inizializzato da una chiamata precedente a FsRtlInitializeOplock.

[in] NewLowerOplockState

Valore che rappresenta l'oplock richiesto mantenuto in un file system inferiore da un file system secondario. Questa combinazione OR bit per bit dei seguenti elementi:

Valore Significato
OPLOCK_LEVEL_CACHE_READ Indica un tipo di lettura (R) oplock.
OPLOCK_LEVEL_CACHE_WRITE Indica un tipo di scrittura oplock (W).
OPLOCK_LEVEL_CACHE_HANDLE Indica un tipo di handle oplock (H).

[in, optional] CompletionRoutineContext

Puntatore alle informazioni sul contesto definite dal chiamante da passare alle routine di callback a cui puntano i parametri CompletionRoutine e PrePendIrpRoutine .

[in, optional] CompletionRoutine

Puntatore a una routine di callback fornita dal chiamante. Se è in corso un'interruzione di blocco opportunistica, questa routine viene chiamata al completamento dell'interruzione. Questo parametro è facoltativo e può essere NULL. Se è NULL, il chiamante viene inserito in uno stato di attesa fino al completamento dell'interruzione di blocco opportunistica.

La dichiarazione e le descrizioni dei parametri di questa routine sono le seguenti:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      _In_ PVOID Context,
      _In_opt_ PIRP Irp
      );
Parametro Descrizione
Contesto Puntatore alle informazioni di contesto passato nel parametro CompletionRoutineContext a FsRtlCheckUpperOplock.
Irp Puntatore facoltativo all'IRP per l'operazione di I/O. FsRtlCheckUpperOplock imposterà sempre questo valore su NULL.

PrePendRoutine

Puntatore a una routine di callback fornita dal chiamante da chiamare se FsRtlCheckUpperOplock restituirà STATUS_PENDING. Questo parametro è facoltativo e può essere NULL.

La dichiarazione e le descrizioni dei parametri di questa routine sono le seguenti:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      _In_ PVOID Context,
      _in_opt_ PIRP Irp
      );
Parametro Descrizione
Contesto Puntatore alle informazioni di contesto passato nel parametro CompletionRoutineContext a FsRtlCheckUpperOplock.
Irp Puntatore facoltativo all'IRP per l'operazione di I/O. FsRtlCheckUpperOplock imposterà sempre questo valore su NULL.

[in] Flags

Maschera di bit per l'operazione di I/O del file associata. Un file system o un driver di filtro imposta i bit per specificare il comportamento di FsRtlCheckUpperOplock. Il parametro Flags include le opzioni seguenti:

Valore Significato
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) Restituisce STATUS_CANNOT_BREAK_OPLOCK se il valore di NewLowerOplockState genera un'interruzione di oplock.
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) Interrompere solo gli oplock superiori di lettura (R) e notificare ai titolari R che potrebbero richiedere nuovamente R. Tutti gli altri controlli di oplock superiore restituiranno STATUS_CANNOT_BREAK_OPLOCK.

Valore restituito

FsRtlCheckUpperOplock restituisce un codice NTSTATUS appropriato, ad esempio uno dei seguenti:

Codice restituito Descrizione
STATUS_SUCCESS Un'interruzione di oplock non è obbligatoria o l'interruzione è stata riconosciuta. Se CompletionRoutine è NULL, FsRtlCheckUpperOplock si blocca mentre l'interruzione di oplock viene elaborata anziché restituire STATUS_PENDING.
STATUS_CANNOT_BREAK_OPLOCK Non è possibile eseguire l'interruzione di blocco. Vedere Flag per le condizioni che limitano un'interruzione.
STATUS_PENDING È in corso una pausa di blocco opportunistica. Se specificato, PrePendIrpRoutine viene chiamato come notifica dell'operazione in sospeso. CompletionRoutine viene chiamato al termine dell'interruzione di oplock. STATUS_PENDING è un codice riuscito.

Requisiti

Requisito Valore
Client minimo supportato Windows 8.1
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

Vedi anche

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl