Routine MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]
La routine MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] est appelée par RDBSS pour demander que le mini-redirecteur réseau supprime plusieurs verrous conservés sur un objet fichier.
Syntaxe
PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE];
NTSTATUS MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE](
_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_UNLOCK_MULTIPLE] 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_UNLOCK_MULTIPLE] en réponse à la réception d’une demande IRP_MJ_LOCK_CONTROL avec un code mineur de IRP_MN_UNLOCK_ALL ou IRP_MN_UNLOCK_ALL_BY_KEY.
Avant d’appeler MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], 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_UNLOCK_MULTIPLE.
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.LockList est défini sur une liste d’éléments LOWIO_LOCK_LIST. Chaque élément spécifie une plage à déverrouiller.
Les plages d’octets à déverrouiller sont spécifiées dans le membre LowIoContext.ParamsFor.Locks.LockList de la structure RX_CONTEXT. La structure LOWIO_LOCK_LIST est la suivante :
typedef struct _LOWIO_LOCK_LIST {
struct _LOWIO_LOCK_LIST *Next;
ULONG LockNumber;
RXVBO ByteOffset;
LONGLONG Length;
ULONG Key;
BOOLEAN ExclusiveLock;
} LOWIO_LOCK_LIST, *PLOWIO_LOCK_LIST;
Le membre LowIoContext.Operation de 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_UNLOCK_MULTIPLE] 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_UNLOCK_MULTIPLE], le membre LowIoContext.ResourceThreadId de RX_CONTEXT est assuré d’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_EXCLUSIVELOCK]
MRxLowIOSubmit[LOWIO_OP_FSCTL]
MRxLowIOSubmit[LOWIO_OP_IOCTL]
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK]