Partager via


PMRX_CALLDOWN fonction de rappel (mrx.h)

Ce rappel est appelé par RDBSS pour demander que le mini-redirecteur réseau effectue une action basée sur l’IRP fourni.

Syntaxe

PMRX_CALLDOWN PmrxCalldown;

NTSTATUS PmrxCalldown(
  [in, out] IN OUT PRX_CONTEXT RxContext
)
{...}

Paramètres

[in, out] RxContext

Pointeur vers la structure RX_CONTEXT. Ce paramètre contient l’IRP qui demande l’opération.

Valeur retournée

Ce rappel retourne STATUS_SUCCESS en cas de réussite ou une valeur NTSTATUS appropriée, par exemple :

Code de retour Description
STATUS_ACCESS_DENIED Une demande d’arrêt ou de démarrage du mini-redirecteur réseau a été effectuée, mais l’appelant n’avait pas la sécurité appropriée pour cette opération.
STATUS_BUFFER_OVERFLOW La mémoire tampon pour recevoir les informations d’attribut étendu était trop petite. Cette valeur de retour doit être considérée comme réussie et le plus grand nombre de données valides possible doivent être retournées dans le membre Info.Buffer de la structure RX_CONTEXT pointée par le paramètre RxContext .
STATUS_BUFFER_TOO_SMALL La mémoire tampon est trop petite pour recevoir les données demandées. Si cette valeur est retournée, le membre InformationToReturn de la structure RX_CONTEXT pointée par le paramètre RxContext doit être défini sur la taille minimale de la mémoire tampon attendue pour que l’appel réussisse.
STATUS_CONNECTION_DISCONNECTED La connexion a été déconnectée.
STATUS_EA_CORRUPT_ERROR Des informations d’attribut étendu non valides ont été reçues du serveur distant.
STATUS_EA_TOO_LARGE Les informations d’attribut étendu qui sont passées sont supérieures à la taille prise en charge par le partage distant.
STATUS_FILE_CLOSED La structure FCB a été acquise, mais la structure SRV_OPEN associée a été fermée.
STATUS_INSUFFICIENT_RESOURCES Les ressources étaient insuffisantes pour terminer l’opération.
STATUS_INTERNAL_ERROR Une erreur interne s’est produite dans le mini-redirecteur réseau.
STATUS_INVALID_BUFFER_SIZE La taille de la mémoire tampon demandée était trop grande.
STATUS_INVALID_DEVICE_REQUEST Une demande d’appareil non valide a été envoyée au mini-redirecteur réseau.
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_MORE_PROCESSING_REQUIRED Un mini-redirecteur réseau retourne cette valeur pour désactiver la réduction de cette requête ouverte.
STATUS_NETWORK_ACCESS_DENIED L’accès réseau a été refusé. Cette erreur peut être retournée si le mini-redirecteur réseau a été invité à ouvrir un nouveau fichier sur un partage en lecture seule.
STATUS_NETWORK_NAME_DELETED Un nom réseau a été supprimé.
STATUS_NONEXISTENT_EA_ENTRY Il n’existe aucun attribut étendu sur l’objet file et l’utilisateur a fourni un index d’attribut étendu.
STATUS_NOT_IMPLEMENTED Une fonctionnalité demandée, telle qu’un démarrage à distance ou un fichier de page distante, n’est pas implémentée.
STATUS_NOT_SUPPORTED Une fonctionnalité demandée, telle que les attributs étendus, n’est pas prise en charge.
STATUS_OBJECT_NAME_COLLISION Le mini-redirecteur réseau a été invité à créer un fichier qui existe déjà.
STATUS_OBJECT_NAME_NOT_FOUND Le nom de l’objet est introuvable. Cette erreur peut être retournée si le mini-redirecteur réseau a été invité à ouvrir un fichier qui n’existe pas.
STATUS_OBJECT_PATH_NOT_FOUND Le chemin d’accès de l’objet est introuvable. Cette erreur peut être retournée si un objet de flux NTFS a été demandé et que le système de fichiers distant ne prend pas en charge les flux.
STATUS_ONLY_IF_CONNECTED La structure SRV_OPEN n’est pas connectée.
STATUS_REDIRECTOR_HAS_OPEN_HANDLES Il s’agissait d’une demande d’arrêt du mini-redirecteur réseau, mais le redirecteur a des handles ouverts qui l’empêchent de s’arrêter pour l’instant.
STATUS_REDIRECTOR_NOT_STARTED Il s’agissait d’une demande d’arrêt du mini-redirecteur réseau, mais le redirecteur n’a pas été démarré.
STATUS_REDIRECTOR_STARTED Il s’agissait d’une demande de démarrage du mini-redirecteur réseau, mais le redirecteur était déjà démarré.
STATUS_REPARSE Une analyse est nécessaire pour gérer un lien symbolique.
STATUS_REQUEST_ABORTED La requête réseau a été abandonnée.
STATUS_RETRY L’opération doit être retentée. Cette erreur peut être retournée si le mini-redirecteur réseau a rencontré une violation de partage ou une erreur d’accès refusé.
STATUS_SHARING_VIOLATION Une violation de partage s’est produite.
STATUS_UNSUCCESSFUL L’appel a échoué.

Remarques

La routine MRxCloseSrvOpen est appelée par RDBSS pour demander au mini-redirecteur réseau de fermer une structure SRV_OPEN.

MRxCloseSrvOpen est appelé par RDBSS dans le cadre des opérations de nettoyage et de fermeture sur un objet fichier. Il est supposé que le mini-redirecteur réseau fermera un fichier sur le réseau.

Avant d’appeler MRxCloseSrvOpen, RDBSS modifie les membres suivants dans la structure RX_CONTEXT, pointés par le paramètre RxContext :

MajorFunction est défini sur IRP_MJ_CLOSE

pFcb est défini sur la structure FCB pour laquelle le traitement de fermeture doit être lancé

pFobx est défini sur la structure FOBX pour laquelle le traitement de fermeture doit être lancé

RDBSS et un mini-redirecteur réseau ne ferment pas nécessairement les structures SRV_OPEN lorsque l’utilisateur ferme un fichier. Pour améliorer les performances dans certains cas, un mini-redirecteur réseau peut essayer de réutiliser le SRV_OPEN et les données mises en cache sans aucun contact avec le serveur. Certaines applications Microsoft Windows présentent un comportement qui ouvre, lit et ferme un fichier, puis rouvert rapidement le même fichier. Dans ce cas, la réutilisation des structures SRV_OPEN peut améliorer les performances.

RDBSS appelle MRxCloseSrvOpen pour un traitement de fermeture différé lors de la récupération d’une structure FOBX. Cela se produit lorsque le traitement de clôture a été retardé en prévision d’une demande ouverte et qu’aucune demande ouverte n’était à venir.

MRxCloseSrvOpen ne peut pas retourner une valeur de STATUS_RETRY indiquant que l’appel doit être retenté. Si une boucle de nouvelle tentative est nécessaire, elle doit être gérée en interne dans la routine MRxCloseSrvOpen par le mini-redirecteur réseau.

La routine MRxCollapseOpen est appelée par RDBSS pour demander que le mini-redirecteur réseau réduise une requête de système de fichiers ouvert sur une structure de SRV_OPEN existante.

MRxCollapseOpen est appelé par RDBSS pour réduire une structure SRV_OPEN localement. Le mini-redirecteur réseau est consulté pour déterminer si un effondrement est possible, de sorte qu’il n’y a aucune raison d’appeler le mini-redirecteur réseau deux fois. Si le mini-redirecteur réseau décide de réduire la structure SRV_OPEN, il le fait et transmet une status retournable. Une valeur de retour de STATUS_SUCCESS est une valeur de retour de fin. Une autre valeur de retour, par exemple, STATUS_MORE_PROCESSING_REQUIRED, est considérée comme une valeur de retour qui ne se termine pas.

Avant d’appeler MRxCollapseOpen, RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée vers le paramètre RxContext :

pRelevantSrvOpen est défini sur la structure SRV_OPEN à réduire.

Create.pSrvCall est défini sur la structure SRV_CALL associée au SRV_OPEN.

Si le mini-redirecteur réseau décide de réduire la structure SRV_OPEN, le membre SrvOpen de la structure RX_CONTEXT doit être défini sur la structure SRV_OPEN réduite.

La routineMRxCreate est appelée par RDBSS pour demander que le mini-redirecteur réseau crée un objet de système de fichiers.

MRxCreate est appelé par RDBSS pour demander que le mini-redirecteur réseau ouvre un objet de système de fichiers sur le réseau. Cet appel est émis par RDBSS en réponse à la réception d’une demande de IRP_MJ_CREATE .

Avant d’appeler MRxCreate, RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée vers le paramètre RxContext :

pRelevantSrvOpen est défini sur la structure SRV_OPEN.

Create.pSrvCall est défini sur la structure SRV_CALL.

Create.NtCreateParameters est défini sur le NT_CREATE_PARAMETERS demandé.

Dans le contexte d’un mini-redirecteur réseau, un objet fichier fait référence aux structures de bloc de contrôle de fichier (FCB) et d’extension d’objet de fichier (FOBX) associées. Il existe une correspondance un-à-un entre les objets de fichier et les FOBX. De nombreux objets de fichier font référence au même fcb, qui représente un seul fichier sur un serveur distant. Un client peut avoir plusieurs requêtes ouvertes différentes (requêtes NtCreateFile) sur le même fcb et chacune d’elles crée un objet de fichier. RDBSS et les mini-redirecteurs réseau peuvent choisir d’envoyer moins de demandes MRxCreate que les requêtes NtCreateFile reçues, ce qui permet de partager une structure SRV_OPEN entre plusieurs FOBX.

Si la demande MRxCreate concerne un remplacement de fichier et que MRxCreate est retourné STATUS_SUCCESS, RDBSS acquiert la ressource d’E/S de pagination et tronque le fichier. Si le fichier est mis en cache par le gestionnaire de cache, RDBSS met à jour les tailles du gestionnaire de cache avec celles qui viennent d’être reçues du serveur.

Avant de retourner, MRxCreate doit définir le membre CurrentIrp-IoStatus.Information> de la structure RX_CONTEXT pointée vers le paramètre RxContext.

La routine MRxDevFcbXXXControlFile est appelée par RDBSS pour transmettre une demande de contrôle FCB d’appareil (une requête IOCTL ou FSCTL) au mini-redirecteur réseau.

MRxDevFcbXXXControlFile gère les requêtes IOCTL et FSCTL liées à l’appareil FCB envoyées au mini-redirecteur réseau.

Avant d’appeler MRxDevFcbXXXControlFile, RDBSS modifie le membre suivant dans la structure RX_CONTEXT pointée vers le paramètre RxContext :

MajorFunction est défini sur la fonction principale de l’IRP

S’il s’agit d’une requête IRP_MJ_FILE_SYSTEM_CONTROL, RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée vers le paramètre RxContext :

LowIoContext.ParamsFor.FsCtl.MinorFunction est défini sur le code de fonction secondaire pour le code FSCTL

LowIoContext.ParamsFor.FsCtl.FsControlCode est défini sur le code FSCTL pour l’IRP

S’il s’agit d’une requête IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL, RDBSS modifie le membre suivant dans la structure RX_CONTEXT pointée vers le paramètre RxContext :

LowIoContext.ParamsFor.FsCtl.FsControlCode est défini sur le code de contrôle pour l’IRP.

Si MRxDevFcbXXXControlFile retourne STATUS_SUCCESS, la routine a réussi. Toute autre valeur de retour indique qu’une erreur s’est produite.

La routine MRxFlush est appelée par RDBSS pour demander qu’un mini-redirecteur réseau écrive le contenu d’un objet de système de fichiers dans le stockage. RDBSS émet cet appel en réponse à la réception d’une demande de IRP_MJ_FLUSH_BUFFERS .

MRxFlush gère les demandes réseau pour le vidage des fichiers.

La routine MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] est appelée par RDBSS pour demander qu’un mini-redirecteur réseau ouvre un verrou exclusif sur un objet fichier.

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] 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> a le SL_EXCLUSIVE_LOCK bit défini.

Avant d’appeler MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée vers 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 a la valeur IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

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

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

Le membre LowIoContext.ParamsFor.Locks.Length a la valeur IrpSp-Parameters.LockControl.Length.QuadPart>.

Le membre LowIoContext.Operation de la structure RX_CONTEXT spécifie l’opération d’E/S faible à effectuer. Plusieurs des routines d’E/S à faible niveau peuvent pointer 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 fichiers 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 différencier 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 acquise à partir du thread initial peut être libérée.

La routine MRxLowIOSubmit[LOWIO_OP_FSCTL] est appelée par RDBSS pour demander qu’un mini-redirecteur réseau émette une demande de contrôle du système de fichiers sur un fichier distant.

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_FSCTL] en réponse à la réception d’une demande de IRP_MJ_FILE_SYSTEM_CONTROL .

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

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

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

Le membre LowIoContext.ParamsFor.FsCtl.FsControlCode est défini sur le code de contrôle principal FSCTL.

Le membre LowIoContext.ParamsFor.FsCtl.MinorFunction est défini sur le code de contrôle secondaire FSCTL.

Le membre LowIoContext.ParamsFor.FsCtl.pInputBuffer est défini sur la mémoire tampon d’entrée.

Le membre LowIoContext.ParamsFor.FsCtl.InputBufferLength est défini sur la longueur de la mémoire tampon d’entrée.

Le membre LowIoContext.ParamsFor.FsCtl.pOutputBuffer est défini sur la mémoire tampon de sortie.

Le membre LowIoContext.ParamsFor.FsCtl.OutputBufferLength est défini sur la longueur de la mémoire tampon de sortie.

Les demandes de code de contrôle du système de fichiers (FSCTL) gérées par un mini-redirecteur réseau peuvent être classées dans l’une des catégories suivantes :

  • FSCTL implémentés et utilisés par RDBSS et le mini redirecteur réseau

  • FSCTL implémentées et utilisées uniquement par le mini-redirecteur réseau

  • FSCTLs qui ne doivent jamais être vus par le mini-redirecteur réseau. Ces FSCTL sont uniquement destinés à aider au débogage.

Pendant le traitement de la routine MRxLowIOSubmit[LOWIO_OP_FSCTL], 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 ressource d’entrée pour le compte d’un autre thread. Lorsqu’une routine asynchrone se termine, la ressource d’entrée qui a été acquise à partir du thread initial peut être libérée.

La routine MRxLowIOSubmit[LOWIO_OP_IOCTL] est appelée par RDBSS pour émettre une demande de contrôle système d’E/S au mini-redirecteur réseau.

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_IOCTL] en réponse à la réception d’un IRP_MJ_DEVICE_CONTROL ou d’une demande de IRP_MJ_INTERNAL_DEVICE_CONTROL .

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

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

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

Le membre LowIoContext.ParamsFor.IoCtl.IoControlCode est défini sur le code de contrôle IOCTL.

Le membre LowIoContext.ParamsFor.IoCtl.pInputBuffer est défini sur la mémoire tampon d’entrée.

Le membre LowIoContext.ParamsFor.IoCtl.InputBufferLength est défini sur la longueur de la mémoire tampon d’entrée.

Le membre LowIoContext.ParamsFor.IoCtl.pOutputBuffer est défini sur la mémoire tampon de sortie.

Le membre LowIoContext.ParamsFor.IoCtl.OutputBufferLength est défini sur la longueur de la mémoire tampon de sortie.

Pendant le traitement de la routine MRxLowIOSubmit[LOWIO_OP_IOCTL], 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 ressource d’entrée pour le compte d’un autre thread. Lorsqu’une routine asynchrone se termine, la ressource d’entrée qui a été acquise à partir du thread initial peut être libérée.

La routine MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] est appelée par RDBSS pour émettre une demande au mini-redirecteur réseau pour une opération de notification de changement d’annuaire.

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] en réponse à la réception d’une demande de IRP_MJ_DIRECTORY_CONTROL .

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

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

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

Le membre LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree a la valeur TRUE si les indicateurs IrpSp-Flags> ont le SL_WATCH_TREE bit défini.

Le membre LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter a la valeur IrpSp-Parameters.NotifyDirectory.CompletionFilter>.

Le membre LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength est défini sur la valeur IrpSp-Parameters.NotifyDirectory.Length>.

Le membre LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer est défini sur la valeur retournée en appelant MmGetSystemAddressForMdlSafe en passant par Irp-MdlAddress> et NormalPagePriority. La mémoire tampon utilisateur est également sondée et verrouillée pour l’accès en écriture.

Une opération de notification de changement d’annuaire est normalement implémentée par un mini-redirecteur réseau en tant qu’opération asynchrone, car elle peut prendre beaucoup de temps. L’opération consiste généralement à envoyer une demande réseau au serveur distant demandant une notification de modification. La réponse est obtenue lorsque la modification souhaitée est affectée sur le serveur. Il s’agit d’un exemple d’opération pour laquelle le mini-redirecteur réseau peut avoir besoin d’inscrire une valeur de contexte unique pour gérer les annulations lancées localement.

Pendant le traitement de la routine MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY], 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 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. La structure FCB peut être libérée en appelant RxReleaseFcbResourceForThreadInMRx.

La routine MRxLowIOSubmit[LOWIO_OP_READ] est appelée par RDBSS pour émettre une demande de lecture au mini-redirecteur réseau.

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_READ] en réponse à la réception d’une demande de IRP_MJ_READ .

Avant d’appeler MRxLowIOSubmit[LOWIO_OP_READ], 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_READ.

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

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

Le membre ParamsFor.ReadWrite.Flags a le LOWIO_READWRITEFLAG_PAGING_IO bit est défini sur si Irp-Flags> a le IRP_PAGING_IO bit activé.

Le membre ParamsFor.ReadWrite.Buffer est défini sur la mémoire tampon utilisateur verrouillée pour IoReadAccess.

Le membre LowIoContext.ParamsFor.ReadWrite.ByteCount a la valeur IrpSp-Parameters.Read.Length>.

Une demande de lecture est normalement implémentée par un mini-redirecteur réseau en tant qu’opération asynchrone, car elle peut prendre beaucoup de temps. L’opération consiste généralement à envoyer une requête réseau au serveur distant. La réponse est obtenue lorsque la demande de lecture est terminée sur le serveur. Il s’agit d’un exemple d’opération pour laquelle le mini-redirecteur réseau peut avoir besoin d’inscrire un contexte pour gérer les annulations initiées localement.

Pendant le traitement de la routine MRxLowIOSubmit[LOWIO_OP_READ], 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 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. La structure FCB peut être libérée en appelant RxReleaseFcbResourceForThreadInMRx.

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.

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 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.

La routine MRxLowIOSubmit[LOWIO_OP_UNLOCK] est appelée par RDBSS pour demander à un mini-redirecteur réseau de supprimer un verrou unique sur un objet fichier.

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_UNLOCK] en réponse à la réception d’une demande IRP_MJ_LOCK_CONTROL avec un code mineur de IRP_MN_UNLOCK_SINGLE.

Avant d’appeler MRxLowIOSubmit[LOWIO_OP_UNLOCK], 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.

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.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_UNLOCK] 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], le membre LowIoContext.ResourceThreadId de RX_CONTEXT est garanti 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.

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.

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] en réponse à la réception d’une demande de IRP_MJ_LOCK_CONTROL avec un code mineur de IRP_MN_UNLOCK_ALL ou de 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.

La routine MRxLowIOSubmit[LOWIO_OP_WRITE] est appelée par RDBSS pour émettre une demande d’écriture au mini-redirecteur réseau.

RDBSS appelle MRxLowIOSubmit[LOWIO_OP_WRITE] en réponse à la réception d’une demande de IRP_MJ_WRITE .

Avant d’appeler MRxLowIOSubmit[LOWIO_OP_WRITE], 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_WRITE.

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

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

Le membre ParamsFor.ReadWrite.Flags a le LOWIO_READWRITEFLAG_PAGING_IO bit est défini sur si Irp-Flags> a le IRP_PAGING_IO bit activé.

Le membre ParamsFor.ReadWrite.Buffer est défini sur la mémoire tampon utilisateur verrouillée pour IoWriteAccess.

Le membre LowIoContext.ParamsFor.ReadWrite.ByteCount est défini sur la valeur de IrpSp-Parameters.Write.Length>.

Une demande d’écriture est normalement implémentée par un mini-redirecteur réseau en tant qu’opération asynchrone, car elle peut prendre beaucoup de temps. L’opération consiste généralement à envoyer une requête réseau au serveur distant. La réponse est obtenue lorsque la demande d’écriture est terminée sur le serveur. Il s’agit d’un exemple d’opération pour laquelle le mini-redirecteur réseau peut avoir besoin d’inscrire un contexte pour gérer les annulations initiées localement.

Pendant le traitement de la routine MRxLowIOSubmit[LOWIO_OP_WRITE], 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 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. La structure FCB peut être libérée en appelant RxReleaseFcbResourceForThreadInMRx.

La routine MRxQueryDirectory est appelée par RDBSS pour demander qu’un mini-redirecteur réseau interroge les informations sur un répertoire de fichiers.

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

Le membre Info.FileInformationClass est défini sur IrpSp-Parameters.QueryDirectory.FileInformationClass>.

Le membre Info.Buffer est défini sur la mémoire tampon de l’utilisateur à partir du paquet de requête d’E/S. Cette mémoire tampon a déjà été verrouillée par RDBSS si nécessaire.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.QueryDirectory.Length>.

Le membre QueryDirectory.FileIndex est défini sur IrpSp-Parameters.QueryDirectory.FileIndex>.

Le membre QueryDirectory.RestartScan est défini sur une valeur différente de zéro si IrpSp-Flags> a le bit SL_RESTART_SCAN activé.

Le membre QueryDirectory.ReturnSingleEntry est défini sur une valeur différente de zéro si IrpSp-Flags> a le SL_RETURN_SINGLE_ENTRY bit activé.

Le membre QueryDirectory.IndexSpecified est défini sur une valeur différente de zéro si IrpSp-Flags> a le SL_INDEX_SPECIFIED bit activé.

Le membre QueryDirectory.InitialQuery est défini sur une valeur différente de zéro si le membre UnicodeQueryTemplate.Buffer du FOBX associé a la valeur NULL et que le membre Flags du FOBX n’a pas le FOBX_FLAG_MATCH_ALL bit activé.

Pour une requête de carte générique (« . », par exemple), RDBSS définit le membre UnicodeQueryTemplate.Buffer du FOBX associé sur la requête de carte générique passée.

Si le membre PostRequest de la structure RX_CONTEXT a la valeur TRUE au retour de MRxQueryDirectory, RDBSS appelle RxFsdPostRequest en transmettant la structure RX_CONTEXT à une file d’attente worker pour traitement par le processus du système de fichiers (FSP).

La routine MRxQueryEaInfo est appelée par RDBSS pour demander qu’un mini-redirecteur réseau interroge des informations d’attribut étendues sur un objet de système de fichiers.

RDBSS émet un appel à MRxQueryEaInfo en réponse à la réception d’une demande de IRP_MJ_QUERY_EA .

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

Le membre Info.Buffer est défini sur la mémoire tampon de l’utilisateur à partir du paquet de demande d’E/S. Cette mémoire tampon a déjà été verrouillée par RDBSS si nécessaire.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.QueryEa.Length>.

Le membre QueryEa.UserEaList est défini sur IrpSp-Parameters.QueryEa.EaList>.

Le membre QueryEa.UserEaListLength est défini sur IrpSp-Parameters.QueryEa.EaListLength>.

Le membre QueryEa.UserEaIndex est défini sur IrpSp-Parameters.QueryEa.EaIndex>.

Le membre QueryEa.RestartScan est défini sur une valeur différente de zéro si IrpSp-Flags> a le SL_RESTART_SCAN bit activé.

Le membre QueryEa.ReturnSingleEntry est défini sur une valeur différente de zéro si IrpSp-Flags> a le SL_RETURN_SINGLE_ENTRY bit activé.

Le membre QueryEa.IndexSpecified est défini sur une valeur différente de zéro si IrpSp-Flags> a le SL_INDEX_SPECIFIED bit activé.

En cas de réussite, MRxQueryEaInfo doit définir le membre Info.LengthRemaininging de la structure RX_CONTEXT sur la longueur des informations d’attribut étendues retournées et mettre également à jour le membre Fobx-OffsetOfNextEaToReturn>. Si l’appel à MRxQueryEaInfo a réussi, RDBSS définit le membre IoStatus.Information de l’IRP sur IrpSp-Parameters.QueryEa.Length> moins le membre Info.LengthRemaining de RX_CONTEXT.

La routine MRxQueryFileInfo est appelée par RDBSS pour demander qu’un mini-redirecteur réseau interroge des informations sur un objet de système de fichiers.

RDBSS émet un appel à MRxQueryFileInfo en réponse à la réception d’une demande de IRP_MJ_QUERY_INFORMATION .

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

Le membre Info.FileInformationClass est défini sur IrpSp-Parameters.QueryFile.FileInformationClass>, la valeur FILE_INFORMATION_CLASS demandée.

Le membre Info.Buffer est défini sur la mémoire tampon de l’utilisateur à partir du paquet de requête d’E/S.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.QueryFile.Length>.

Le membre QueryDirectory.FileIndex est défini sur IrpSp-Parameters.QueryDirectory.FileIndex>.

Le membre QueryDirectory.RestartScan est défini si IrpSp-Flags> a le SL_RESTART_SCAN bit défini.

Le membre QueryDirectory.ReturnSingleEntry est défini si IrpSp-Flags> a SL_RETURN_SINGLE_ENTRY jeu de bits.

Le membre QueryDirectory.InitialQuery est défini si Fobx-UnicodeQueryTemplate.Buffer> a la valeur NULL et si Fobx-Flags> n’a pas le FOBX_FLAG_MATCH_ALL défini.

En cas de réussite, le mini-redirecteur réseau doit affecter au membre Info.LengthRemaining de la structure RX_CONTEXT le membre Info.Length moins la longueur des informations de fichier retournées. Si l’appel à MRxQueryFileInfo a réussi, RDBSS définit le membre IoStatus.Information de l’IRP sur IrpSp-Parameters.QueryFile.Length> moins le membre Info.LengthRemaining de RX_CONTEXT.

RDBSS ne prend pas en charge les demandes avec le bit SL_INDEX_SPECIFIED des indicateurs IrpSp-Flags> définis. Un mini-redirecteur réseau ne reçoit pas d’appels à MRxQueryFileInfo avec le bit SL_INDEX_SPECIFIED d’IrpSp-Flags> défini.

La routine MRxQueryQuotaInfo est appelée par RDBSS pour demander qu’un mini-redirecteur réseau interroge les informations de quota sur un objet de système de fichiers.

RDBSS émet un appel à MRxQueryQuotaInfo en réponse à la réception d’une demande de IRP_MJ_QUERY_QUOTA .

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

Le membre Info.Buffer est défini sur la mémoire tampon de l’utilisateur à partir du paquet de requête d’E/S. Cette mémoire tampon a déjà été verrouillée par RDBSS si nécessaire.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.QueryQuota.Length>.

Le membre QueryQuota.SidList est défini sur IrpSp-Parameters.QueryQuota.SidList>.

Le membre QueryQuota.SidListLength est défini sur IrpSp-Parameters.QueryQuota.SidListLength>.

Le membre QueryQuota.StartSid est défini sur IrpSp-Parameters.QueryQuota.StartSid>.

Le membre QueryQuota.Length est défini sur IrpSp-Parameters.QueryQuota.Length>.

Le membre QueryQuota.RestartScan est défini sur une valeur différente de zéro si IrpSp-Flags> a le SL_RESTART_SCAN bit défini.

Le membre QueryQuota.ReturnSingleEntry est défini sur une valeur différente de zéro si IrpSp-Flags> a le SL_RETURN_SINGLE_ENTRY bit défini.

Le membre QueryQuota.IndexSpecified est défini sur une valeur différente de zéro si IrpSp-Flags> a le SL_INDEX_SPECIFIED bit défini.

En cas de réussite, le mini-redirecteur réseau doit définir le membre Info.LengthRemaining de la structure RX_CONTEXT sur la longueur des informations de quota à retourner. Si l’appel à MRxQueryQuotaInfo a réussi, RDBSS définit le membre IoStatus.Information de l’IRP sur le membre Info.LengthRemaining de RX_CONTEXT.

Si l’appel à MRxQueryQuotaInfo réussit, le membre InformationToReturn de la structure RX_CONTEXT doit être défini sur la longueur des informations de quota retournées. Si l’appel échoue, le membre InformationToReturn de RX_CONTEXT doit être défini sur zéro.

La routine MRxQuerySdInfo est appelée par RDBSS pour demander qu’un mini-redirecteur réseau interroge les informations de descripteur de sécurité sur un objet de système de fichiers.

RDBSS émet un appel à MRxQuerySdInfo en réponse à la réception d’une demande de IRP_MJ_QUERY_SECURITY .

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

Le membre QuerySecurity.SecurityInformation est défini sur IrpSp-Parameters.QuerySecurity.SecurityInformation>.

Le membre Info.Buffer est défini sur la mémoire tampon de l’utilisateur à partir du paquet de requête d’E/S. Cette mémoire tampon a déjà été verrouillée par RDBSS si nécessaire.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.QuerySecurity.Length>.

En cas de réussite, le mini-redirecteur réseau doit définir le membre InformationToReturn de la structure RX_CONTEXT sur la longueur des informations de sécurité retournées. Si l’appel à MRxQuerySdInfo a réussi, RDBSS définit le membre IoStatus.Information de l’IRP sur le membre InformationToReturn de RX_CONTEXT.

La routine MRxQueryVolumeInfo est appelée par RDBSS pour demander qu’un mini-redirecteur réseau interroge les informations de volume.

RDBSS émet un appel à MRxQueryVolumeInfo dans l’un des cas suivants :

Avant d’appeler MRxQueryVolumeInfo dans le cas d’une demande IRP_MJ_QUERY_VOLUME_INFORMATION, RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée par le paramètre RxContext :

Le membre Info.FsInformationClass est défini sur IrpSp-Parameters.QueryVolume.FsInformationClass>.

Le membre Info.Buffer est défini sur Irp-AssociatedIrp.SystemBuffer>.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.QueryVolume.Length>.

Pour une demande de IRP_MJ_QUERY_VOLUME_INFORMATION, si le membre PostRequest de la structure RX_CONTEXT a la valeur TRUE au retour de MRxQueryVolumeInfo, RDBSS appelle RxFsdPostRequest pour publier la demande. Dans ce cas, la demande de IRP_MJ_QUERY_VOLUME_INFORMATION transmet la structure de RX_CONTEXT pour mettre en file d’attente RX_CONTEXT à une file d’attente worker pour traitement par le processus de système de fichiers (FSP).

Si le membre PostRequest de la structure RX_CONTEXT a la valeur FALSE au retour de MRxQueryVolumeInfo, le mini-redirecteur réseau doit définir le membre Info.LengthRemaining de la structure RX_CONTEXT sur la longueur des informations de volume retournées. RDBSS définit le membre IoStatus.Information de l’IRP sur IrpSp-Parameters.QueryVolume.Length> moins le membre Info.LengthRemaining de la structure RX_CONTEXT.

Si l’appel à MRxQueryVolumeInfo réussit, le mini-redirecteur réseau doit définir le membre Info.LengthRemaining de la structure RX_CONTEXT sur le membre Info.Length moins la longueur des informations de volume retournées. Si l’appel à MRxQueryVolumeInfo a réussi, RDBSS définit le membre IoStatus.Information de l’IRP sur IrpSp-Parameters.QueryVolume.Length> moins le membre Info.LengthRemaining de la structure RX_CONTEXT.

Pour une requête IRP_MJ_QUERY_VOLUME_INFORMATION avec le membre Info.FsInformationClass défini sur FileFsDeviceInformation, le mini-redirecteur réseau retourne les informations suivantes dans la structure RX_CONTEXT pointée par le paramètre RxContext :

Le membre Info.Buffer contient une structure FILE_FS_DEVICE_INFORMATION

Le membre Info.Buffer.Characteristics est défini sur les caractéristiques du volume, qui doivent inclure FILE_REMOTE_DEVICE comme l’une des options.

Le membre Info.Buffer.DeviceType est défini sur le membre DeviceType de la structure NET_ROOT associée. Si le membre Type du NET_ROOT associé est NET_ROOT_PIPE, le membre Info.Buffer.DeviceType est défini sur FILE_DEVICE_NAMED_PIPE.

Pour une requête IRP_MJ_QUERY_VOLUME_INFORMATION avec le membre Info.FsInformationClass défini sur FileFsVolumeInformation, le mini-redirecteur réseau retourne les informations suivantes dans la structure RX_CONTEXT pointée vers le paramètre RxContext :

Le membre Info.Buffer contient une structure FILE_FS_VOLUME_INFORMATION.

Le membre Info.Buffer est défini sur le membre VolumeInfo de la structure NET_ROOT associée.

Le membre Info.LengthRemaining est défini sur le membre VolumeInfoLength de la structure NET_ROOT associée.

Un appel MRxQueryVolumeInfo à partir de RDBSS pour IRP_MJ_FILE_SYSTEM_CONTROL est une demande d’informations de suivi des liens. Avant d’appeler MRxQueryVolumeInfo pour IRP_MJ_FILE_SYSTEM_CONTROL, RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée par le paramètre RxContext :

Le membre Info.FsInformationClass est défini sur FileFsObjectIdInformation.

Le membre Info.Buffer est défini sur une structure FILE_FS_OBJECTID_INFORMATION.

Le membre Info.LengthRemaining est défini sur sizeof(FILE_FS_OBJECTID_INFORMATION).

Dans ce cas de requête IRP_MJ_FILE_SYSTEM_CONTROL, le membre AssociatedIrp.SystemBuffer de l’IRP pointe vers une structure LINK_TRACKING_INFORMATION.

Si une demande est lancée en tant que IRP_MJ_FILE_SYSTEM_CONTROL à MRxQueryVolumeInfo avec une valeur de retour STATUS_SUCCESS ou STATUS_BUFFER_OVERFLOW, RDBSS copie le membre ObjectId de la structure FILE_FS_OBJECTID_INFORMATION passée dans le membre Info.Buffer de RX_CONTEXT structure vers le membre NetRoot-DiskParameters.VolumeId> de la structure FCB et vers le membre AssociatedIrp.SystemBuffer.VolumeId de l’IRP. Si l’appel à MRxQueryVolumeInfo a réussi, RDBSS définit le membre Type de la structure LINK_TRACKING_INFORMATION. Si le membre NetRoot-Flags> de la structure FCB a le NETROOT_FLAG_DFS_AWARE_NETROOT jeu de bits, le membre Type est défini par RDBSS sur DfsLinkTrackingInformation. Si le membre NetRoot-Flags> de la structure FCB n’a pas le NETROOT_FLAG_DFS_AWARE_NETROOT bit défini, le membre Type est défini par RDBSS sur NtfsLinkTrackingInformation. En cas de réussite, RDBSS définit le membre IoStatus.Information de l’IRP sur la taille d’une structure LINK_TRACKING_INFORMATION.

La routine MRxSetEaInfo est appelée par RDBSS pour demander à un mini-redirecteur réseau de définir des informations d’attribut étendues sur un objet de système de fichiers.

RDBSS émet un appel à MRxSetEaInfo en réponse à la réception d’une demande de IRP_MJ_SET_EA .

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

Le membre Info.Buffer est défini sur la mémoire tampon de l’utilisateur à partir du paquet de demande d’E/S. Cette mémoire tampon a déjà été verrouillée par RDBSS si nécessaire.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.QueryEa.Length>.

La routine MRxSetFileInfo est appelée par RDBSS pour demander qu’un mini-redirecteur réseau définisse les informations de fichier sur un objet de système de fichiers.

RDBSS émet un appel à MRxSetFileInfo en réponse à la réception d’une demande de IRP_MJ_SET_INFORMATION .

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

Le membre Info.FileInformationClass est défini sur IrpSp-Parameters.SetFile.FileInformationClass>, la valeur FILE_INFORMATION_CLASS spécifiée.

Le membre Info.Buffer est défini sur Irp-AssociatedIrp.SystemBuffer>.

Le membre Info.Length est défini sur IrpSp-Parameters.SetFile.Length>.

La routine MRxSetFileInfoAtCleanup est appelée par RDBSS pour demander qu’un mini redirecteur réseau définisse les informations de fichier sur un objet de système de fichiers lors du nettoyage.

RDBSS émet un appel à MRxSetFileInfoAtCleanup pendant le nettoyage, lorsque le dernier handle d’un objet de fichier est fermé. Cela est différent de l’opération de fermeture qui est appelée lorsque la dernière référence à un objet fichier est supprimée.

MRxSetFileInfoAtCleanup est appelé par RDBSS si les horodatages d’un fichier ou la taille d’un fichier ont changé. Les appels à MRxSetFileInfoAtCleanup par RDBSS sont effectués séparément pour chacune de ces modifications. Si la taille du fichier et les horodatages ont changé, RDBSS effectue deux appels à MRxSetFileInfoAtCleanup.

Avant d’appeler MRxSetFileInfoAtCleanup, RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée par le paramètre RxContext si les horodatages d’un fichier ont changé :

Le membre Info.FileInformationClass est défini sur une valeur FILE_INFORMATION_CLASS de FileBasicInformation.

Le membre Info.Buffer est défini sur une structure FILE_BASIC_INFORMATION allouée sur la pile.

Le membre Info.Length est défini sur la taille d’une structure FILE_BASIC_INFORMATION.

Avant d’appeler MRxSetFileInfoAtCleanup, RDBSS modifie les membres suivants dans la structure RX_CONTEXT pointée par le paramètre RxContext si la taille d’un fichier a changé :

Le membre Info.FileInformationClass est défini sur une valeur FILE_INFORMATION_CLASS de FileEndOfFileInformation.

Le membre Info.Buffer est défini sur une structure FILE_END_OF_FILE_INFORMATION allouée sur la pile.

Le membre Info.Length est défini sur sizeof(FILE_END_OF_FILE_INFORMATION).

RDBSS ignore la valeur de retour de MRxSetFileInfoAtCleanup.

Un mini-redirecteur réseau peut choisir de ne rien faire dans cette routine et de retourner STATUS_SUCCESS. Toute modification apportée à la taille du fichier ou aux horodatages sera gérée pendant l’opération de nettoyage.

La routine MRxSetQuotaInfo est appelée par RDBSS pour demander qu’un mini-redirecteur réseau définisse les informations de quota sur un objet de système de fichiers.

RDBSS émet un appel à MRxSetQuotaInfo en réponse à la réception d’une demande de IRP_MJ_SET_QUOTA .

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

Le membre Info.Buffer est défini sur la mémoire tampon de l’utilisateur à partir du paquet de demande d’E/S. Cette mémoire tampon a déjà été verrouillée par RDBSS si nécessaire.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.SetQuota.Length>.

La routine MRxSetSdInfo est appelée par RDBSS pour demander à un mini-redirecteur réseau de définir les informations de descripteur de sécurité sur un objet de système de fichiers.

RDBSS émet un appel à MRxSetSdInfo en réponse à la réception d’une demande de IRP_MJ_SET_SECURITY .

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

Le membre SetSecurity.SecurityInformation est défini sur IrpSp-Parameters.SetSecurity.SecurityInformation>.

Le membre SetSecurity.SecurityDescriptor est défini sur IrpSp-Parameters.SetSecurity.SecurityDescriptor>.

La routine MRxSetVolumeInfo est appelée par RDBSS pour demander qu’un mini-redirecteur réseau définisse les informations de volume.

RDBSS émet un appel à MRxSetVolumeInfo en réponse à la réception d’une demande de IRP_MJ_SET_VOLUME_INFORMATION .

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

Le membre Info.FsInformationClass est défini sur IrpSp-Parameters.SetVolume.FsInformationClass>.

Le membre Info.Buffer est défini sur Irp-AssociatedIrp.SystemBuffer>.

Le membre Info.LengthRemaining est défini sur IrpSp-Parameters.SetVolume.Length>.

La routine MRxShouldTryToCollapseThisOpen est appelée par RDBSS pour demander qu’un mini-redirecteur réseau indique si RDBSS doit essayer de réduire une requête ouverte sur un objet de système de fichiers existant.

MRxShouldTryToCollapseThisOpen est appelé pour déterminer si une requête ouverte ne doit pas être réduite.

Avant d’appeler MRxShouldTryToCollapseThiseOpen, RDBSS modifie le membre suivant dans la structure RX_CONTEXT pointée par le paramètre RxContext :

Le membre pRelevantSrvOpen est défini sur le SRV_OPEN.

L’appel à MRxShouldTryToCollapseThiseOpen peut être une demande de notification de modification pour un annuaire. Par conséquent, le mini-redirecteur réseau peut ne pas autoriser la réduction des demandes ouvertes afin que la notification de modification fonctionne correctement.

RdBSS interdit la réduction s’ouvre si le membre Create.NtCreateParameters.CreateOptions de la structure RX_CONTEXT a l’option FILE_OPEN_FOR_BACKUP_INTENT ou l’option FILE_DELETE_ON_CLOSE définie.

La routine MRxTruncate est appelée par RDBSS pour demander qu’un mini-redirecteur réseau tronque le contenu d’un objet de système de fichiers.

MRxTruncate est appelé dans le cadre d’opérations de nettoyage si les deux conditions suivantes sont remplies :

  • L’objet file correspond à un fichier de disque ou un répertoire

  • Il s’agit du dernier appel de nettoyage et l’objet file a été marqué pour troncation.

L’objet file est marqué pour troncation si le membre fcbstate de la structure FCB a le FCB_STATE_TRUNCATE_ON_CLOSE bit défini. RDBSS annulera l’initialisation de la carte du cache ultérieurement.

Un appel à MRxTruncate sera suivi d’un appel à MRxCleanupFobx dans le cadre de l’opération de nettoyage.

RDBSS ignore la valeur de retour de MRxTruncate.

La routine MRxZeroExtend est appelée par RDBSS pour demander qu’un mini-redirecteur réseau tronque le contenu d’un objet de système de fichiers.

MRxZeroExtend est appelé dans le cadre des opérations de nettoyage si l’objet fichier n’a pas été marqué pour suppression et que l’objet fichier n’est pas un fichier de pagination. MRxZeroExtend est appelé pour garantir que la partie entre la longueur de données valide et la taille de fichier est étendue à zéro. Après avoir appelé MRxZeroExtend, RDBSS définit le membre Header.ValidDataLength.QuadPart de la structure d’une structure FCB égal au membre Header.FileSize.QuadPart de la structure FCB.

Un appel à MRxZeroExtend sera suivi d’un appel à MRxCleanupFobx dans le cadre de l’opération de nettoyage.

RDBSS ignore la valeur de retour de MRxZeroExtend.

La routine MRxCleanupFobx est appelée par RDBSS pour demander au mini-redirecteur réseau de fermer une extension d’objet de système de fichiers. RDBSS émet cet appel en réponse à la réception d’une demande de IRP_MJ_CLEANUP sur un objet fichier.

MRxCleanupFobx est appelé par RDBSS dans le cadre des opérations de nettoyage et de fermeture sur un objet fichier.

MRxCleanupFobx ne peut pas retourner une valeur de STATUS_RETRY indiquant que l’appel doit être retenté. Si une boucle de nouvelle tentative est nécessaire, elle doit être gérée en interne dans la routine MRxCleanupFobx par le mini-redirecteur réseau.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête mrx.h (inclure Mrx.h)

Voir aussi

MRxAreFilesAliased

MRxCleanupFobx

MRxCollapseOpen

MRxCreate

MRxDeallocateForFobx

MRxDeallocateForFobx

MRxExtendForCache

MRxExtendForNonCache

MRxFlush

MRxForceClosed

MRxIsLockRealizable

MRxShouldTryToCollapseThiseOpen

MRxTruncate

MRxZeroExtend

RxFinalizeNetFCB