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 |