RxPrepareToReparseSymbolicLink 函数 (rxprocs.h)

RxPrepareToReparseSymbolicLink 设置文件对象名称以方便重新分析。 网络微型重定向程序使用此例程遍历符号链接。

语法

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

参数

RxContext

指向RX_CONTEXT结构的指针。

SymbolicLinkEmbeddedInOldPath

一个布尔值,指示遇到符号链接。 如果值为 TRUE,则表示在遍历旧路径过程中遇到符号链接。

NewPath

指向包含要遍历的新路径名称的 Unicode 字符串的指针。

NewPathIsAbsolute

一个布尔值,指示新路径是否为绝对路径。 如果此值为 FALSE,应将 \Device\Mup 追加到 NewPath。 如果此值为 TRUE,则 NewPath 参数是要重新分析的完整路径。 在这种情况下,将直接使用包含 NewPath 的缓冲区,而不是分配新缓冲区。

ReparseRequired

指向布尔值的指针,该值指示是否需要重新分析。 如果此值为 TRUE,则需要重新分析。

返回值

RxPrepareToReparseSymbolicLink 在成功时返回STATUS_SUCCESS或失败时返回以下错误值之一:

返回代码 说明
STATUS_ACCESS_DENIED
删除请求失败。
STATUS_INSUFFICIENT_RESOURCES
可用资源不足。
STATUS_INVALID_PARAMETER
向例程传递了无效参数。 如果未IRP_MJ_CREATE RxContext MajorFunction 成员,将返回此错误。

注解

RxPrepareToReparseSymbolicLink 例程只能由支持符号链接并使用重分析点来实现符号链接的网络微型重定向程序使用。 RxPrepareToReparseSymbolicLink 例程通常由网络微型重定向程序从其 MrxCreate 回调例程调用。

传递给此例程 的 SymbolicLinkEmbeddedInOldPath 参数非常重要。 若要保留正确的语义,应谨慎使用该语义。 例如,请考虑旧路径 \A\B\C\D,其中 C 恰好是符号链接。 在这种情况下,符号链接嵌入路径中, 并且 SymbolicLinkEmbeddedInOldPath 应设置为 TRUE。 相比之下,这与 D 恰好是符号链接的情况大不相同。 在前一种情况下,重新分析是一个中间步骤。 第二个示例中,重新分析构成名称解析的最后一步, 并且应将 SymbolicLinkEmbeddedInOldPath 设置为 FALSE

如果指定了 DELETE 访问,则对于未嵌入符号链接的所有情况,将拒绝打开或创建操作。 如果 DELETE 访问权限是唯一指定的,则打开的尝试必须成功而不进行重新分析。 这符合 UNIX 符号链接语义。

作为此例程的一部分,还相应地标记 了 RxContext 。 这可确保返回值可以通过调用此例程进行交叉检查。 调用 RxPrepareToReparseSymbolicLink 后,网络微型重定向程序必须返回STATUS_REPARSE。

仅当从此例程返回STATUS_SUCCESS时, ReparseRequired 参数的值才具有意义。 如果 ReparseRequiredFALSE,则表示不需要重新分析尝试,应操作符号链接文件本身而不是链接的目标。 如果 ReparseRequiredTRUE,则表示已成功设置重新分析尝试。 在这种情况下,网络微型重定向程序必须返回关联的 MRxCreate 调用STATUS_REPARSE。 RDBSS 将针对这种情况启动检查。

要求

要求
目标平台 桌面
标头 rxprocs.h (包括 Rxprocs.h)
IRQL <= APC_LEVEL

另请参阅

MRxCreate