RxPrepareToReparseSymbolicLink, fonction (rxprocs.h)
RxPrepareToReparseSymbolicLink configure le nom de l’objet de fichier pour faciliter une analyse. Cette routine est utilisée par les mini-redirecteurs réseau pour parcourir les liens symboliques.
Syntaxe
NTSTATUS RxPrepareToReparseSymbolicLink(
PRX_CONTEXT RxContext,
BOOLEAN SymbolicLinkEmbeddedInOldPath,
PUNICODE_STRING NewPath,
BOOLEAN NewPathIsAbsolute,
PBOOLEAN ReparseRequired
);
Paramètres
RxContext
Pointeur vers la structure RX_CONTEXT.
SymbolicLinkEmbeddedInOldPath
Valeur booléenne qui indique qu’un lien symbolique a été rencontré. Si la valeur est TRUE, un lien symbolique a été rencontré dans le cadre de la traversée de l’ancien chemin.
NewPath
Pointeur vers une chaîne Unicode qui contient le nouveau nom de chemin d’accès à parcourir.
NewPathIsAbsolute
Valeur booléenne qui indique si le nouveau chemin est absolu. Si cette valeur est FALSE, \Device\Mup doit être ajouté à NewPath. Si cette valeur est TRUE, le paramètre NewPath est le chemin d’accès complet à réécrire. Dans ce cas, la mémoire tampon qui contient NewPath est utilisée directement, au lieu d’allouer une nouvelle mémoire tampon.
ReparseRequired
Pointeur vers une valeur booléenne qui indique si une analyse est requise. Si cette valeur est TRUE, une analyse est requise.
Valeur retournée
RxPrepareToReparseSymbolicLink retourne STATUS_SUCCESS en cas de réussite ou l’une des valeurs d’erreur suivantes en cas d’échec :
Code de retour | Description |
---|---|
|
Une demande de suppression a échoué. |
|
Les ressources disponibles étaient insuffisantes. |
|
Un paramètre non valide a été passé à la routine. Cette erreur est retournée si le membre MajorFunction de RxContext n’est pas IRP_MJ_CREATE. |
Remarques
La routine RxPrepareToReparseSymbolicLink ne serait utilisée que par un mini-redirecteur réseau qui prend en charge les liens symboliques et utilise des points d’analyse pour implémenter des liens symboliques. La routine RxPrepareToReparseSymbolicLink est normalement appelée par un mini-redirecteur réseau à partir de sa routine de rappel MrxCreate .
Le paramètre SymbolicLinkEmbeddedInOldPath passé à cette routine est très important. Pour conserver la sémantique correcte, elle doit être utilisée avec soin. Par exemple, considérez l’ancien chemin \A\B\C\D où C est un lien symbolique. Dans ce cas, le lien symbolique est incorporé dans le chemin et SymbolicLinkEmbeddedInOldPath doit avoir la valeur TRUE. En revanche, cela est très différent du cas où D se trouve être un lien symbolique. Dans le premier cas, l’analyse constitue une étape intermédiaire. Dans le deuxième exemple, l’analyse constitue l’étape finale de la résolution de noms et SymbolicLinkEmbeddedInOldPath doit avoir la valeur FALSE.
Si l’accès DELETE est spécifié, l’opération d’ouverture ou de création est refusée pour tous les cas où le lien symbolique n’est pas incorporé. Il est possible que si l’accès DELETE était le seul spécifié, la tentative d’ouverture doit réussir sans effectuer d’analyse. Cela est conforme à la sémantique des liens symboliques UNIX.
Dans le cadre de cette routine, RxContext est également étiqueté de manière appropriée. Cela garantit que la valeur de retour peut être vérifiée avec l’appel de cette routine. Une fois RxPrepareToReparseSymbolicLink appelé, le mini redirecteur réseau doit retourner STATUS_REPARSE.
La valeur du paramètre ReparseRequired n’est importante que si STATUS_SUCCESS est retourné à partir de cette routine. Si ReparseRequired a la valeur FALSE, cela signifie qu’aucune tentative d’analyse n’est requise et que le fichier de liaison symbolique lui-même doit être manipulé par opposition à la cible du lien. Si ReparseRequired a la valeur TRUE, cela signifie qu’une tentative d’analyse a été correctement configurée. Dans ce cas, il est impératif que le mini redirecteur réseau retourne STATUS_REPARSE pour l’appel MRxCreate associé. RDBSS lance une case activée pour cette condition.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | rxprocs.h (inclure Rxprocs.h) |
IRQL | <= APC_LEVEL |