使用 NDF 功能

Microsoft 通过公共 API 提供对 NDF 功能的访问权限。 出现问题时,应用程序可以使用此 API 在特定应用程序的上下文中利用此功能。

使用 NDF 执行诊断有三个阶段:创建事件、运行诊断和修复以及关闭事件。 此概述指示哪些 NDF 函数可能与特定方案相关。 有关每个函数的详细信息,请参阅 NDF 参考 部分。

创建事件

NDF 诊断会话需要特定的事件进行诊断。 有几个函数可用于创建事件。 选择与发生故障时应用程序尝试执行的操作最匹配的函数。

运行诊断和修复

有两种方法可以启动诊断和修复功能。

  • 使用 Windows 用户界面 (推荐)

    在标准 Windows 用户界面中运行时,只需调用 NdfExecuteDiagnosis 函数。 NDF 向导将启动并帮助用户识别 (,并尽可能) 解决问题。 此过程完成后,函数将返回。 用户界面(可选)是应用程序的模式。

  • 仅) (Windows 7 及更高版本使用自定义用户界面

    在未显示用户界面或未使用标准 Windows 体验 ((如 Media Center、嵌入式应用程序和命令提示符) )的情况下,可以使用不同的函数。 此选项绕过 NDF 向导中提供的用户体验功能,该功能包括将结果限制为完全支持的根本原因,以及启发式方法,以按建议的顺序向用户提供修复。 使用这些函数时,必须自行提供任何此类功能。 还必须确保释放诊断结果使用的内存。

    若要开始诊断,请调用 NdfDiagnoseIncident 函数。 发现的任何问题都将作为描述已确定的根本原因和可能的修复的 RootCauseInfo 结构的集合返回到应用程序。

    选择修复 (或要求用户选择修复) 后,应调用 NdfRepairIncident 以尝试修复并确定问题是否已解决。

    在某些情况下,修复可能会成功执行,但无法解决问题。 在这种情况下,建议关闭现有事件,然后打开新事件。 这将确保识别初始修复取消屏蔽的任何新问题。 例如,假设没有无线网络可见。 重置适配器后,无线网络是可见的,但它们都不在首选列表中。 这是一个新问题,需要新的诊断来识别。 如果此类第二次诊断尝试无法识别其他问题,则可以尝试不同的修复来解决原始问题,或者可以通知用户无法解决问题。

    NdfDiagnoseIncidentNdfRepairIncident 是同步 API。 如果要取消这些函数启动的活动,请从另一个线程调用 NdfCancelIncident 。 函数将在诊断或修复过程中的下一个可用停止点返回。

    随时可以选择调用 NdfGetTraceFile 来检索当前诊断会话的 NDF 日志副本,并将其包含在应用程序日志中。 检索到日志后将刷新日志,后续调用将仅检索上次调用此函数后发生的事件。

关闭事件

完成事件诊断后,调用 NdfCloseIncident 以释放与对该事件执行诊断关联的系统资源。 (请注意,这不会释放 NdfDiagnoseIncident 创建的对象。