Macro FsRtlCheckOplock (rxprocs.h)

La routine FsRtlCheckOplock sincronizza l'IRP per un'operazione di I/O di file con lo stato di blocco opportunistico (oplock) corrente del file.

Sintassi

void FsRtlCheckOplock(
   A1,
   A2,
   A3,
   A4,
   A5
);

Parametri

A1

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

A2

Puntatore all'IRP per l'operazione di I/O.

A3

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

A4

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.

Questa routine viene dichiarata come segue:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      IN PVOID Context,
      IN PIRP Irp
      );

Questa routine presenta i parametri seguenti:

Contesto

Puntatore alle informazioni di contesto passato nel parametro Context a FsRtlCheckOplock.

Irp

Puntatore all'IRP per l'operazione di I/O.

A5

Puntatore a una routine di callback fornita dal chiamante da chiamare se l'operazione di I/O viene registrata in una coda di lavoro. Questo parametro è facoltativo e può essere NULL.

Questa routine viene dichiarata come segue:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      IN PVOID Context,
      IN PIRP Irp
      );

Contesto

Puntatore alle informazioni di contesto passato nel parametro Context a FsRtlCheckOplock.

Irp

Puntatore all'IRP per l'operazione di I/O.

Valore restituito

nessuno

Osservazioni

FsRtlCheckOplock sincronizza l'IRP per un'operazione di I/O con lo stato di blocco opportunistico corrente di un file in base alle condizioni seguenti:

  • Se l'operazione di I/O causerà l'interruzione del blocco opportunistico, viene avviata l'interruzione di blocco opportunistica.
  • Se l'operazione di I/O non può continuare fino al completamento dell'interruzione di blocco opportunistica, FsRtlCheckOplock restituisce STATUS_PENDING e chiama la routine di callback a cui punta il parametro PostIrpRoutine .
Se un file system o un driver di filtro usa blocchi opportunistici, deve chiamare FsRtlCheckOplock da qualsiasi routine dispatch per le operazioni di I/O che possono causare interruzioni di blocco opportunistiche. Questa regola si applica ai tipi seguenti di operazioni di I/O, perché queste operazioni possono causare interruzioni di blocco opportunistiche:

IRP_MJ_CLEANUP

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_LOCK_CONTROL

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_WRITE

Per informazioni dettagliate sui blocchi opportunistici, vedere la documentazione di Microsoft Windows SDK.

I minifiltri devono chiamare FltCheckOplock anziché FsRtlCheckOplock.

Requisiti

Requisito Valore
Client minimo supportato Questa routine è disponibile in Microsoft Windows 2000 e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Universale
Intestazione rxprocs.h (include FltKernel.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Vedi anche

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockFsctrl

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock