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> :
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
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