Condividi tramite


Funzione FsRtlOplockFsctrl (ntifs.h)

FsRtlOplockFsctrl esegue varie operazioni di blocco opportunistico (oplock) per conto di un file system o di un driver di filtro.

Sintassi

NTSTATUS FsRtlOplockFsctrl(
  [in] POPLOCK Oplock,
  [in] PIRP    Irp,
  [in] ULONG   OpenCount
);

Parametri

[in] Oplock

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

[in] Irp

Puntatore all'IRP per l'operazione di I/O. Questo parametro è obbligatorio e non può essere NULL.

[in] OpenCount

Numero di handle utente per il file, se viene richiesto un oplock esclusivo. L'impostazione di un valore diverso da zero per una richiesta di 2, R o RH oplock indica che nel file sono presenti blocchi di intervallo di byte. Per informazioni sui tipi di oplock, vedere Panoramica di Oplock.

Valore restituito

FsRtlOplockFsctrl restituisce uno dei valori NTSTATUS seguenti:

Codice restituito Descrizione
STATUS_SUCCESS Per una richiesta di IRP_MJ_CREATE, STATUS_SUCCESS indica che è stato concesso l'oplock del filtro richiesto. Per un'operazione FSCTL, il significato di STATUS_SUCCESS dipende dal codice FSCTL. Per altre informazioni, vedere le pagine di riferimento per i codici FSCTL elencati nella sezione Osservazioni seguenti.
STATUS_CANCELLED L'operazione di I/O è stata annullata. STATUS_CANCELLED è un codice di errore.
STATUS_INVALID_PARAMETER Il codice FSCTL per l'operazione di I/O non è uno dei valori validi elencati nella sezione Osservazioni seguenti. STATUS_INVALID_PARAMETER è un codice di errore.
STATUS_OPLOCK_NOT_GRANTED Impossibile concedere il blocco. STATUS_OPLOCK_NOT_GRANTED è un codice di errore.
STATUS_PENDING Usato solo per le operazioni FSCTL. Il significato di STATUS_PENDING dipende dal codice FSCTL. Per altre informazioni, vedere le pagine di riferimento per i codici FSCTL elencati nella sezione Osservazioni seguenti. STATUS_PENDING è un codice riuscito.
STATUS_CANNOT_BREAK_OPLOCK Impossibile concedere un nuovo oplock. L'IRP è una richiesta di IRP_MJ_CREATE e FILE_OPEN_REQUIRING_OPLOCK è stata specificata nel parametro delle opzioni di creazione per l'operazione. STATUS_CANNOT_BREAK_OPLOCK è un codice riuscito.

Commenti

I file system e i driver di filtro legacy chiamano FsRtlOplockFsctrl per eseguire varie operazioni di oplock per un'operazione di I/O di creazione o file system. I minifilter devono chiamare FltOplockFsctrl anziché FsRtlOplockFsctrl.

L'IRP indicato dal parametro Irp deve essere un'operazione di IRP valida per un'operazione di IRP_MJ_FILE_SYSTEM_CONTROL o di IRP_MJ_CREATE .

Se l'IRP è una richiesta di IRP_MJ_FILE_SYSTEM_CONTROL, è possibile usare FsRtlOplockFsctrl con uno dei codici FSCTL seguenti, impostato in IrpSp-Parameters.FileSystemControl.FsControlCode>:

Per informazioni dettagliate su questi LOCKTLS e sui blocchi opportunistici in generale, vedere la documentazione Microsoft Windows SDK.

Se l'IRP è una richiesta di IRP_MJ_CREATE , è possibile usare FsRtlOplockFsctrl per richiedere un oplock di filtro in sospeso se tutte le condizioni seguenti sono vere:

  • Il valore del parametro OpenCount deve essere 1.
  • Il valore del parametro DesiredAccess per la richiesta di IRP_MJ_CREATE deve essere FILE_READ_ATTRIBUTES.
  • Il valore del parametro ShareAccess per la richiesta di IRP_MJ_CREATE deve essere FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.

Se viene concessa la richiesta di un oplock di filtro in sospeso, FsRtlOplockFsctrl restituisce STATUS_SUCCESS. Per altre informazioni sui parametri di creazione, vedere la voce di riferimento per IRP_MJ_CREATE.

I filtri e i file system che chiamano questa funzione devono sincronizzare le chiamate nel pacchetto oplock fornito dal sistema. Per altre informazioni, vedere Sincronizzazione di Oplock .

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione ntifs.h (include 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

FltOplockFsctrl

FsRtlCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL