Función RxPrepareToReparseSymbolicLink (rxprocs.h)

RxPrepareToReparseSymbolicLink configura el nombre del objeto de archivo para facilitar un reanálisis. Esta rutina la usan los mini-redireccionadores de red para recorrer vínculos simbólicos.

Sintaxis

NTSTATUS RxPrepareToReparseSymbolicLink(
  PRX_CONTEXT     RxContext,
  BOOLEAN         SymbolicLinkEmbeddedInOldPath,
  PUNICODE_STRING NewPath,
  BOOLEAN         NewPathIsAbsolute,
  PBOOLEAN        ReparseRequired
);

Parámetros

RxContext

Puntero a la estructura RX_CONTEXT.

SymbolicLinkEmbeddedInOldPath

Valor booleano que indica que se encontró un vínculo simbólico. Si el valor es TRUE, se encontró un vínculo simbólico como parte del recorrido de la ruta de acceso anterior.

NewPath

Puntero a una cadena Unicode que contiene el nuevo nombre de ruta de acceso que se va a recorrer.

NewPathIsAbsolute

Valor booleano que indica si la nueva ruta de acceso es absoluta. Si este valor es FALSE, \Device\Mup debe anteponerse a NewPath. Si este valor es TRUE, el parámetro NewPath es la ruta de acceso completa que se va a volver a analizar. En este caso, el búfer que contiene NewPath se usa directamente, en lugar de asignar un nuevo búfer.

ReparseRequired

Puntero a un valor booleano que indica si se requiere un reanálisis. Si este valor es TRUE, se requiere una repetición de análisis.

Valor devuelto

RxPrepareToReparseSymbolicLink devuelve STATUS_SUCCESS si se ejecuta correctamente o uno de los siguientes valores de error en caso de error:

Código devuelto Descripción
STATUS_ACCESS_DENIED
Error en una solicitud para eliminar.
STATUS_INSUFFICIENT_RESOURCES
No había recursos suficientes disponibles.
STATUS_INVALID_PARAMETER
Se pasó un parámetro no válido a la rutina. Este error se devolverá si el miembro MajorFunction de RxContext no está IRP_MJ_CREATE.

Comentarios

La rutina RxPrepareToReparseSymbolicLink solo la usaría un minidirector de red que admita vínculos simbólicos y use puntos de reanálisis para implementar vínculos simbólicos. Normalmente, una minidirectora de red llamaría a la rutina RxPrepareToReparseSymbolicLink desde su rutina de devolución de llamada MrxCreate .

El parámetro SymbolicLinkEmbeddedInOldPath pasado a esta rutina es muy importante. Para conservar la semántica correcta, debe usarse cuidadosamente. Por ejemplo, considere la ruta de acceso antigua \A\B\C\D, donde C es un vínculo simbólico. En este caso, el vínculo simbólico se incrusta en la ruta de acceso y SymbolicLinkEmbeddedInOldPath debe establecerse en TRUE. Por el contrario, esto es muy diferente del caso de que D sea un vínculo simbólico. En el caso anterior, el análisis constituye un paso intermedio. En el segundo ejemplo, el reanálisis constituye el último paso de la resolución de nombres y SymbolicLinkEmbeddedInOldPath debe establecerse en FALSE.

Si se especifica el acceso DELETE, se deniega la operación de apertura o creación para todos los casos en los que el vínculo simbólico no está incrustado. Es posible que si el acceso DELETE fuera el único especificado, el intento abierto debe realizarse correctamente sin volver a analizar. Esto ajusta la semántica de vínculos simbólicos de UNIX.

Como parte de esta rutina, RxContext también se etiqueta correctamente. Esto garantiza que el valor devuelto se pueda comprobar de forma cruzada con la invocación de esta rutina. Una vez que se invoca RxPrepareToReparseSymbolicLink , el minidirector de red tiene que devolver STATUS_REPARSE.

El valor del parámetro ReparseRequired solo supone importancia si se devuelve STATUS_SUCCESS de esta rutina. Si ReparseRequired es FALSE, esto implica que no se requiere ningún intento de reanálisis y el propio archivo de vínculo simbólico debe manipularse en lugar del destino del vínculo. Si ReparseRequired es TRUE, esto implica que se configuró correctamente un intento de reanálisis. En tales casos, es imperativo que el minidirector de red devuelva STATUS_REPARSE para la llamada MRxCreate asociada. RDBSS iniciará una comprobación de esta condición.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado rxprocs.h (incluya Rxprocs.h)
IRQL <= APC_LEVEL

Consulte también

MRxCreate