了解扩展错误信息

扩展错误信息是记录数组,每个记录指示通过系统或应用程序中的特定层传递错误代码。 如果计算机 C 上发生错误,因为从计算机 B 调用,而计算机 B 又从计算机 A 调用,则计算机 C 上的 RPC 运行时将生成一条或多条描述错误的记录,并将其传递给计算机 B。计算机 B 可以将一条或多条记录添加到现有链的头, 并将完整链传递给 A。可以添加一条或多条记录,并显示或记录信息。 实际上,扩展的错误链表示错误的历史记录。

扩展错误信息不会替换 (RPC_S_* 状态代码) 的错误代码。 无论生成多少错误信息或是否生成扩展错误信息,错误代码都保持不变。

每个扩展的错误信息记录都包含以下内容。 有关详细信息 ,请参阅RPC_EXTENDED_ERROR_INFO

  • ComputerName - 这是发生错误的计算机的非限定 DNS 名称。 只有计算机边界上的记录才包含此信息。 例如,在前面所述的计算机 A、B 和 C 方案中,ComputerName 是为以下字段定义的:

    记录 ComputerName 字段
    记录 #1 由计算机 C 生成 -
    记录 #2 由计算机 C 生成 -
    记录 #3 由计算机 C 生成 C
    记录 #1 由计算机 B 生成 -
    记录 #2 由计算机 B 生成 -
    记录 #3 由计算机 B 生成 B
    记录 #1 由计算机 A 生成 -
    记录 #2 由计算机 A 生成 -
    记录 #3 由计算机 A 生成 -
    链头  

     

  • ProcessID - 生成错误的进程的进程标识符。

  • TimeStamp - 错误发生的时间,以 UTC 格式表示。

  • 生成组件 - 生成错误的逻辑组件的整数代码定义。 当前定义了以下组件:

    代码 名称 说明
    1 应用程序 拥有特定 RPC 调用的管理器例程的组件
    2 运行时 RPC 运行时
    3 安全提供程序 此调用的安全提供程序。
    4 NPFS NPFS 文件系统
    5 Rdr 重定向程序
    6 Nmp 命名管道系统。 这可以是 NPFS 或 RDR,但在许多情况下,RPC 运行时不知道谁执行了请求的操作,在这种情况下,将返回 NMP。
    7 IO IO 系统或 IO 系统使用的驱动程序。 这可以是 NPFS、RDR 或 Winsock 提供程序。
    8 Winsock Winsock 提供程序
    9 Authz 代码 授权 API。
    10 Lpc 本地过程调用设施。

     

  • 状态 - 层生成或返回的错误代码
  • DetectionLocation - 标识检测到错误的代码位置的唯一编号。 此字段与代码相关联,并将因版本而变化。 将发布最常遇到的检测位置的单独列表。
  • 标志 - 指定记录相关信息的标志。 当前定义的标志是 EEInfoPreviousRecordsMissing 和 EEInfoNextRecordsMissing,分别对应于数值 1 和 2。 如果设置了 EEInfoPreviousRecordsMissing,则缺少该记录之前的一条或多条记录。 如果设置了 EEInfoNextRecordsMissing,则缺少该记录后面的一条或多条记录。 有关记录可能缺失的原因的说明,请参阅 扩展错误信息的可靠性
  • 最多四个错误参数。 error 参数是一种轻型变体结构,提供有关错误的其他信息。 其他信息取决于错误和检测位置。 参数可以是 ANSI 字符串类型 (LPSTR) 、Unicode String (LPWSTR) 、long value (long) 、short value (short) 、pointer (int64) 或 none。