Partager via


Fonction IoCheckShareAccess (wdm.h)

La routine IoCheckShareAccess est appelée par les pilotes de système de fichiers (FSD) ou d’autres pilotes de niveau supérieur pour case activée si l’accès partagé à un objet de fichier est autorisé.

Syntaxe

NTSTATUS IoCheckShareAccess(
  [in]      ACCESS_MASK   DesiredAccess,
  [in]      ULONG         DesiredShareAccess,
  [in, out] PFILE_OBJECT  FileObject,
  [in, out] PSHARE_ACCESS ShareAccess,
  [in]      BOOLEAN       Update
);

Paramètres

[in] DesiredAccess

Spécifie une valeur de ACCESS_MASK qui indique le type d’accès souhaité à l’objet FileObject donné pour la requête ouverte actuelle. Les pilotes calculent la valeur de ce paramètre en prenant l’accès demandé dans la demande de IRP_MJ_CREATE , puis en appliquant SeAccessCheck pour chaque descripteur de sécurité afin de déterminer l’accès réel accordé. Si l’accès accordé est plus restrictif que l’accès souhaité, il s’agit d’une erreur, et le pilote doit terminer l’IRP actuel avec un status de STATUS_ACCESS_DENIED. (Notez que SeAccessCheck efface le bit MAXIMUM_ALLOWED dans l’accès accordé ; veillez à ne pas utiliser ce bit lors de la comparaison de l’accès souhaité à l’accès accordé.) Le pilote transmet ensuite l’accès accordé comme valeur de DesiredAccess.

[in] DesiredShareAccess

Spécifie le type d’accès partagé souhaité à FileObject pour la demande ouverte actuelle. La valeur de ce paramètre est généralement identique à celle de ShareAccess passée au système de fichiers ou au pilote de niveau supérieur par le gestionnaire d’E/S lors de l’ouverture de la demande. Cette valeur peut être égale à zéro ou à n’importe quelle combinaison des éléments suivants :

FILE_SHARE_READ

FILE_SHARE_WRITE

FILE_SHARE_DELETE

[in, out] FileObject

Pointeur vers l’objet file auquel case activée accès pour la requête ouverte actuelle.

[in, out] ShareAccess

Pointeur vers la structure de données d’accès partagé commune associée à FileObject. Les pilotes doivent traiter cette structure comme opaque.

[in] Update

Spécifie s’il faut mettre à jour le status d’accès partagé pour FileObject. Une valeur booléenne TRUE signifie que cette routine met à jour les informations d’accès de partage pour l’objet fichier si la demande ouverte est autorisée.

Valeur retournée

IoCheckShareAccess retourne STATUS_SUCCESS si l’accès du demandeur à l’objet fichier est compatible avec la façon dont il est actuellement ouvert. Si la demande est refusée en raison d’une violation de partage, STATUS_SHARING_VIOLATION est retournée.

Remarques

IoCheckShareAccess vérifie une demande d’ouverture d’objet fichier pour déterminer si les types d’accès souhaités et partagés spécifiés sont compatibles avec la façon dont l’objet fichier est actuellement accessible par d’autres ouvertures.

Les systèmes de fichiers conservent l’état des fichiers par le biais de structures appelées blocs de contrôle de fichiers (FCB). Le SHARE_ACCESS est une structure décrivant la façon dont le fichier est actuellement accessible par tous les ouvres. Cet état est contenu dans le fcb dans le cadre de l’état ouvert de chaque objet fichier. Chaque objet fichier ne doit avoir qu’une seule structure d’accès de partage. D’autres pilotes de niveau supérieur peuvent appeler cette routine pour case activée l’accès demandé lorsqu’un objet fichier représentant l’objet de périphérique d’un tel pilote est ouvert.

IoCheckShareAccess n’est pas une opération atomique. Par conséquent, les pilotes appelant cette routine doivent protéger l’objet de fichier partagé passé à IoCheckShareAccess au moyen d’un type de verrou, tel qu’un mutex ou un verrou de ressource, afin d’empêcher l’altération du nombre d’accès partagé.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport), IrqlIoPassive2(wdm), PowerIrpDDis(wdm)

Voir aussi

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess