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


Использование функциональных возможностей 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.