Partager via


Fonction FsRtlOplockFsctrl (ntifs.h)

FsRtlOplockFsctrl effectue diverses opérations de verrouillage opportuniste (oplock) pour le compte d’un système de fichiers ou d’un pilote de filtre.

Syntaxe

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

Paramètres

[in] Oplock

Pointeur oplock opaque pour le fichier. Ce pointeur doit avoir été initialisé par un appel précédent à FsRtlInitializeOplock.

[in] Irp

Pointeur vers l’IRP pour l’opération d’E/S. Ce paramètre est obligatoire et ne peut pas avoir la valeur NULL.

[in] OpenCount

Nombre de handles utilisateur pour le fichier, si un oplock exclusif est demandé. La définition d’une valeur différente de zéro pour une requête oplock de niveau 2, R ou RH indique qu’il existe des verrous de plage d’octets sur le fichier. Pour plus d’informations sur les types oplock, consultez Vue d’ensemble d’Oplock.

Valeur retournée

FsRtlOplockFsctrl retourne l’une des valeurs NTSTATUS suivantes :

Code de retour Description
STATUS_SUCCESS Pour une demande de IRP_MJ_CREATE, STATUS_SUCCESS indique que l’oplock de filtre demandé a été accordé. Pour une opération FSCTL, la signification de STATUS_SUCCESS dépend du code FSCTL. Pour plus d’informations, consultez les pages de référence pour les codes FSCTL répertoriés dans la section Remarques suivante.
STATUS_CANCELLED L’opération d’E/S a été annulée. STATUS_CANCELLED est un code d’erreur.
STATUS_INVALID_PARAMETER Le code FSCTL pour l’opération d’E/S n’était pas l’une des valeurs valides répertoriées dans la section Remarques suivante. STATUS_INVALID_PARAMETER est un code d’erreur.
STATUS_OPLOCK_NOT_GRANTED L’oplock n’a pas pu être accordé. STATUS_OPLOCK_NOT_GRANTED est un code d’erreur.
STATUS_PENDING Utilisé uniquement pour les opérations FSCTL. La signification de STATUS_PENDING dépend du code FSCTL. Pour plus d’informations, consultez les pages de référence pour les codes FSCTL répertoriés dans la section Remarques suivante. STATUS_PENDING est un code de réussite.
STATUS_CANNOT_BREAK_OPLOCK Un nouvel oplock n’a pas pu être accordé. L’IRP est une requête IRP_MJ_CREATE et FILE_OPEN_REQUIRING_OPLOCK a été spécifié dans le paramètre create options pour l’opération. STATUS_CANNOT_BREAK_OPLOCK est un code de réussite.

Remarques

Les systèmes de fichiers et les pilotes de filtre hérités appellent FsRtlOplockFsctrl pour effectuer diverses opérations oplock pour une opération d’E/S de création ou de contrôle du système de fichiers. Les minifiltres doivent appeler FltOplockFsctrl au lieu de FsRtlOplockFsctrl.

L’IRP pointé vers par le paramètre Irp doit être un IRP valide pour une opération IRP_MJ_FILE_SYSTEM_CONTROL ou IRP_MJ_CREATE .

Si l’IRP est une requête IRP_MJ_FILE_SYSTEM_CONTROL, FsRtlOplockFsctrl peut être utilisé avec l’un des codes FSCTL suivants, qui est défini dans IrpSp-Parameters.FileSystemControl.FsControlCode> :

Pour plus d’informations sur ces FSCTL et sur les verrous opportunistes en général, consultez la documentation Microsoft Windows SDK.

Si l’IRP est une requête IRP_MJ_CREATE , FsRtlOplockFsctrl peut être utilisé pour demander un oplock de filtre en attente si toutes les conditions suivantes sont remplies :

  • La valeur du paramètre OpenCount doit être 1.
  • La valeur du paramètre DesiredAccess pour la requête IRP_MJ_CREATE doit être FILE_READ_ATTRIBUTES.
  • La valeur du paramètre ShareAccess pour la demande de IRP_MJ_CREATE doit être FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.

Si la demande d’un oplock de filtre en attente est accordée, FsRtlOplockFsctrl retourne STATUS_SUCCESS. Pour plus d’informations sur les paramètres de création, consultez l’entrée de référence pour IRP_MJ_CREATE.

Les filtres et les systèmes de fichiers qui appellent cette fonction doivent synchroniser les appels dans le package oplock fourni par le système. Pour plus d’informations, consultez Synchronisation Oplock .

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête ntifs.h (inclure Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Voir aussi

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