Routine MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]
La routine MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] est appelée par RDBSS pour demander à un mini-redirecteur réseau d’ouvrir un verrou exclusif sur un objet fichier.
Syntaxe
PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK];
NTSTATUS MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK](
_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_EXCLUSIVELOCK] 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_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_EXCLUSIVELOCK] en réponse à la réception d’une demande IRP_MJ_LOCK_CONTROL avec un code mineur de IRP_MN_LOCK si IrpSp-Flags> a le SL_EXCLUSIVE_LOCK défini.
Avant d’appeler MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], RDBSS modifie les membres suivants dans la structure RX_CONTEXT vers laquelle pointe le paramètre RxContext :
Le membre LowIoContext.Operation est défini sur LOWIO_OP_EXCLUSIVELOCK.
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 ce 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_EXCLUSIVELOCK] 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_EXCLUSIVELOCK], 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 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_FSCTL]
MRxLowIOSubmit[LOWIO_OP_IOCTL]
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]