Partager via


Routine MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]

La routine MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] est appelée par RDBSS pour demander à un redirecteur réseau d’ouvrir un verrou partagé sur un objet fichier.

Syntaxe

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK];

NTSTATUS MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK](
  _Inout_ PRX_CONTEXT RxContext
)
{ ... }

Paramètres

RxContext [in, out]
Pointeur vers la structure RX_CONTEXT. Ce paramètre contient l’IRP qui demande l’opération.

Valeur retournée

MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] retourne STATUS_SUCCESS sur la réussite ou une valeur NTSTATUS appropriée, telle que l’une des suivantes :

Code de retour Description
STATUS_CONNECTION_DISCONNECTED

La connexion a été déconnectée.

STATUS_INSUFFICIENT_RESOURCES

Les ressources étaient insuffisantes pour terminer la demande.

STATUS_INVALID_BUFFER_SIZE

La taille de la mémoire tampon demandée était trop grande.

STATUS_INVALID_NETWORK_RESPONSE

Une réponse non valide a été reçue du serveur distant.

STATUS_INVALID_PARAMETER

Un paramètre non valide a été spécifié dans RxContext.

STATUS_LINK_FAILED

Échec de la tentative de reconnexion à un serveur distant pour terminer la demande.

STATUS_NOT_IMPLEMENTED

Cette routine n’est pas implémentée.

STATUS_SHARING_VIOLATION

Une violation de partage s’est produite.

STATUS_UNSUCCESSFUL

L’appel a échoué.

Remarques

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] en réponse à la réception d’une demande de IRP_MJ_LOCK_CONTROL avec un code mineur de IRP_MN_LOCK si IrpSp-Flags> n’a pas le bit SL_EXCLUSIVE_LOCK défini.

Avant d’appeler MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK], RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée par le paramètre RxContext :

Le membre LowIoContext.Operation est défini sur LOWIO_OP_SHAREDLOCK.

Le membre LowIoContext.ResourceThreadId est défini sur le thread du processus qui a lancé l’opération dans RDBSS.

Le membre LowIoContext.ParamsFor.Locks.ByteOffset est défini sur la valeur de IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Le membre LowIoContext.ParamsFor.Locks.Key est défini sur la valeur de IrpSp-Parameters.LockControl.Key>.

Le membre LowIoContext.ParamsFor.Locks.Flags est défini sur la valeur de IrpSp-Flags>.

Le membre LowIoContext.ParamsFor.Locks.Length est défini sur la valeur de IrpSp-Parameters.LockControl.Length.QuadPart>.

Le membre LowIoContext.Operation de la structure RX_CONTEXT spécifie l’opération d’E/S faible à effectuer. Il est possible que plusieurs routines d’E/S faibles pointent vers la même routine dans un mini-redirecteur réseau, car le membre LowIoContext.Operation peut être utilisé pour différencier l’opération d’E/S faible demandée. Par exemple, tous les appels d’E/S liés aux verrous de fichier peuvent appeler la même routine d’E/S faible dans le mini-redirecteur réseau et cette routine peut utiliser le membre LowIoContext.Operation pour faire la différence entre l’opération de verrouillage et de déverrouillage demandée.

Si la routine MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] peut prendre beaucoup de temps, le pilote de mini-redirecteur réseau doit libérer la structure FCB avant de lancer la communication réseau. La structure FCB peut être libérée en appelant RxReleaseFcbResourceForThreadInMRx. Pendant le traitement de la routine MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK], le membre LowIoContext.ResourceThreadId de RX_CONTEXT est garanti pour indiquer le thread du processus qui a lancé l’opération dans RDBSS.

Le membre LowIoContext.ResourceThreadId de la structure RX_CONTEXT peut être utilisé pour libérer la structure FCB pour le compte d’un autre thread. Lorsqu’une routine asynchrone se termine, la structure FCB qui a été acquise à partir du thread initial peut être libérée.

Configuration requise

Plateforme cible

Desktop (Expérience utilisateur)

En-tête

Mrx.h (inclure Mrx.h)

Voir aussi

MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]

MRxLowIOSubmit[LOWIO_OP_FSCTL]

MRxLowIOSubmit[LOWIO_OP_IOCTL]

MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]

MRxLowIOSubmit[LOWIO_OP_READ]

MRxLowIOSubmit[LOWIO_OP_UNLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]

MRxLowIOSubmit[LOWIO_OP_WRITE]

RxReleaseFcbResourceForThreadInMRx