Поделиться через


Использование функций NDF

Корпорация Майкрософт предоставляет доступ к функциям NDF через общедоступный API. При возникновении проблемы приложение может использовать этот API для использования этой функции в контексте конкретного приложения.

Существует три этапа выполнения диагностики с помощью NDF: создание инцидента, диагностика и ремонт, а также закрытие инцидента. В этом обзоре указано, какие функции NDF могут быть релевантными для конкретного сценария. Подробная информация о каждой функции доступна в разделе справочника NDF.

Создание инцидента

Сеансу диагностики NDF требуется конкретный инцидент для выполнения диагностики. Существует несколько функций, которые можно использовать для создания инцидента. Выберите функцию, которая наиболее тесно соответствует тому, что приложение пыталось сделать, когда произошел сбой.

  • NdfCreateConnectivityIncident: общие проблемы с подключением к Интернету, которые не требуют дополнительной информации.
  • NdfCreateWebIncident/NdfCreateWebIncidentEx: подключение к URL-адресу HTTP или HTTPS.
  • NdfCreateSharingIncident: доступ к пути UNC или общей папке.
  • NdfCreateDNSIncident: разрешение имени узла DNS.
  • NdfCreatePnrpIncident: разрешение имени однорангового узла PNRP.
  • NdfCreateGroupingIncident: присоединение к одноранговой группе.
  • NdfCreateWinSockIncident: подключение к месту назначения с помощью сокета (если ни одна из других функций специально не применяется).
  • NdfCreateIncident: используется, если другой сценарий не подходит, а вызывающий вспомогательный класс NDF известен (вместе с аргументами, которые требуется). В основном используется для тестирования разработчиками приложений, которые написали свой вспомогательный класс.

Выполнение диагностики и восстановления

Существует два способа запуска функции диагностики и восстановления.

  • Использование пользовательского интерфейса Windows (рекомендуется)

    При запуске в стандартном пользовательском интерфейсе Windows можно просто вызвать функцию NdfExecuteDiagnosis. Мастер NDF запустит и поможет пользователю определить проблему (и, если это возможно, и устранить проблему). Функция возвращается после завершения этого процесса. Пользовательский интерфейс может быть опционально модальным для вашего приложения.

  • Использование пользовательского интерфейса (только для Windows 7 и более поздних версий)

    Различные функции доступны для использования в сценариях, где не отображается пользовательский интерфейс или где не используется стандартный интерфейс Windows (например, Media Center, внедренные приложения и командная строка). Этот параметр обходит функционал взаимодействия с пользователем, предоставляемый мастером NDF, который ограничивает результаты только полностью поддерживаемыми первопричинами, а также использует эвристику для предоставления исправлений пользователю в рекомендуемом порядке. При использовании этих функций необходимо самостоятельно обеспечить любую подобную функциональность. Кроме того, необходимо освободить память, используемую результатами диагностики.

    Чтобы начать диагностику, вызовите функцию NdfDiagnoseIncident. Все обнаруженные проблемы будут возвращены приложению в виде коллекции RootCauseInfo структур, описывающих выявленные первопричины и возможные исправления.

    После выбора восстановления (или запроса пользователя выбрать ремонт), NdfRepairIncident необходимо вызвать, чтобы попытаться восстановить и определить, была ли устранена проблема.

    В некоторых случаях восстановление может быть успешно выполнено, но не устранит проблему. В таких случаях рекомендуется закрыть существующий инцидент, а затем открыть новый. Это обеспечит выявление любых новых проблем, незамеченных первоначальным ремонтом. Например, предположим, что беспроводные сети не были видимы. После сброса адаптера беспроводные сети видны, но ни одна из них нет в предпочтительном списке. Это новая проблема, которая потребует нового диагноза для выявления. Если такая вторая попытка диагностики не выявляет дополнительные проблемы, можно попытаться устранить исходную проблему или сообщить пользователю, что проблема не может быть решена.

    NdfDiagnoseIncidentи NdfRepairIncident являются синхронными API. Если вы хотите отменить действие, инициированное этими функциями, вызовите NdfCancelIncident из другого потока. Функция возвращается в следующей доступной точке остановки в процессе диагностики или восстановления.

    В любом случае можно вызвать NdfGetTraceFile, чтобы получить копию журнала NDF для текущего сеанса диагностики и включить его в журналы приложений. Журнал очищается после получения, а последующие вызовы будут получать только события, которые произошли после последнего вызова этой функции.

Закрытие инцидента

Завершив диагностику инцидента, вызовите NdfCloseIncident для освобождения системных ресурсов, связанных с выполнением диагностики этого инцидента. (Обратите внимание, что это не освобождает объекты, созданные NdfDiagnoseIncident.