“第三方模块” Ping

此 Ping 包含有关将第三方模块加载到 Firefox 进程中的事件的信息。

{
  "type": "third-party-modules",
  ... common ping data
  "clientId": <UUID>,
  "profileGroupId": <UUID>,
  "environment": { ... },
  "payload": {
    "structVersion": 1,
    // List of DLL filenames that are on the dynamic blocklist
    "blockedModules": [<string>],
    "modules": [
      {
        // The sanitized name of the module as resolved by the Windows loader.
        "resolvedDllName": <string>,
        // Version of the DLL as contained in its resources's fixed version information.
        "fileVersion": <string>,
        // The value of the CompanyName field as extracted from the DLL's version information. This property is only present when such version info is present, and when the 'signedBy' property is absent.
        "companyName": <string>,
        // The organization whose certificate was used to sign the DLL. Only present for signed modules.
        "signedBy": <string>,
        // Flags that indicate this module's level of trustworthiness. This corresponds to one or more mozilla::ModuleTrustFlags OR'd together.
        "trustFlags": <unsigned int>
      },
      ... Additional modules (maximum 100)
    ],
    "processes": {
      <string containing processType and pid, formatted as `${processType}.0x${pid}">`: {
        // Except for Default (which is remapped to "browser"), one of the process string names specified in xpcom/build/GeckoProcessTypes.h.
        "processType": <string>,
        // Elapsed time since process creation that this object was generated, in seconds.
        "elapsed": <number>,
        // Time spent loading xul.dll in milliseconds.
        "xulLoadDurationMS": <number>,
        // Number of dropped events due to failures sanitizing file paths.
        "sanitizationFailures": <int>,
        // Number of dropped events due to failures computing trust levels.
        "trustTestFailures": <int>,
        // Array of module load events for this process. The entries of this array are ordered to be in sync with the combinedStacks.stacks array (see below)
        "events": [
          {
            // Elapsed time since process creation that this event was generated, in milliseconds.
            "processUptimeMS": <int>,
            // Time spent loading this module, in milliseconds.
            "loadDurationMS": <number>,
            // Thread ID for the thread that loaded the module.
            "threadID": <int>,
            // Name of the thread that loaded the module, when applicable.
            "threadName": <string>,
            // The sanitized name of the module that was requested by the invoking code. Only exists when it is different from resolvedDllName.
            "requestedDllName": <string>,
            // The base address to which the loader mapped the module.
            "baseAddress": <string formatted as "0x%x">,
            // Index of the element in the modules array that contains details about the module that was loaded during this event.
            "moduleIndex": <int>,
            // True if the module is included in the executable's Import Directory Table.
            "isDependent": <bool>,
            // The status of DLL load. This corresponds to enum ModuleLoadInfo::Status.
            "loadStatus": <int>
          },
          ... Additional events (maximum 50)
        ],
        "combinedStacks": [
          "memoryMap": [
            [
              // Name of the module symbol file, e.g. ``xul.pdb``
              <string>,
              // Breakpad identifier of the module, e.g. ``08A541B5942242BDB4AEABD8C87E4CFF2``
              <string>
            ],
            ... Additional modules
          ],
          // Array of stacks for this process. These entries are ordered to be in sync with the events array
          "stacks": [
            [
              [
                // The module index or -1 for invalid module indices
                <integer>,
                // The program counter relative to its module base, or an absolute pc if the module index is -1
                <unsigned integer>
              ],
              ... Additional stack frames (maximum 512)
            ],
            ... Additional stack traces (maximum 50)
          ]
        ]
      },
      ... Additional processes (maximum 100)
    }
  }
}

payload.processes[…].events[…].resolvedDllName

模块文件的有效路径,已进行清理以删除任何可能敏感的信息。在大多数情况下,目录路径会被移除,只保留文件名,例如 foo.dll。有三个例外情况

  • %ProgramFiles% 下的路径会保留,例如 %ProgramFiles%\FooApplication\foo.dll

  • %SystemRoot% 下的路径会保留,例如 %SystemRoot%\System32\DriverStore\FileRepository\nvlt.inf_amd64_97992900c592012e\nvinitx.dll

  • 临时路径下的路径会保留,例如 %TEMP%\bin\foo.dll

payload.processes[…].events[…].requestedDllName

从操作系统请求的模块名称。此字符串也以类似于 resolvedDllName 的方式进行清理。当此字符串与 resolvedDllName 相同的时候,此字符串会被从 Ping 中省略。

备注

  • 客户端 ID 和配置文件组 ID 会与该 Ping 一起提交。

  • 此 Ping 中会提交 遥测环境

  • payload 中的字符串字段长度限制为 260 个字符。

  • 此 Ping 每天发送一次。

  • 如果没有要报告的事件,则不会发送此 Ping。

版本历史

  • Firefox 110:添加了 blockedModules (bug 1808158)。

  • Firefox 77:添加了 isDependent (bug 1620118)。

  • Firefox 71:将 untrustedModules 重命名为 third-party-modules,并修改了模式 (bug 1542830)。

  • Firefox 70:添加了 %SystemRoot% 作为路径清理的例外情况 (bug 1573275)。

  • Firefox 66
    • 添加了 Windows 并排目录信任标志 (bug 1514694)。

    • 添加了模块加载时间 (xulLoadDurationMSloadDurationMS) 和 xul.dll 信任标志 (bug 1518490)。

    • 添加了 SysWOW64 信任标志 (bug 1518798)。

  • Firefox 65:初始支持 (bug 1435827)。