Usando a funcionalidade NDF
A Microsoft fornece acesso à funcionalidade NDF por meio de uma API pública. Quando ocorre um problema, o aplicativo pode usar essa API para aproveitar essa funcionalidade no contexto de um aplicativo específico.
Há três estágios de execução do diagnóstico com o NDF: criação de um incidente, execução de diagnóstico e reparos e fechamento do incidente. Essa visão geral indica quais funções NDF podem ser relevantes para um cenário específico. Informações detalhadas sobre cada função podem ser encontradas na seção Referência do NDF .
Criando um incidente
Uma sessão de diagnóstico do NDF requer um incidente específico para diagnosticar. Há várias funções que podem ser usadas para criar um incidente. Escolha a função que corresponde mais de perto ao que o aplicativo estava tentando fazer quando a falha ocorreu.
- NdfCreateConnectivityIncident: problemas gerais de conectividade com a Internet que não precisam de informações adicionais.
- NdfCreateWebIncident/NdfCreateWebIncidentEx: conectando-se a uma URL HTTP ou HTTPS.
- NdfCreateSharingIncident: acessando um caminho UNC ou compartilhamento de arquivos.
- NdfCreateDNSIncident: resolvendo um nome de host DNS.
- NdfCreatePnrpIncident: resolvendo um nome de par PNRP.
- NdfCreateGroupingIncident: ingressar em um grupo ponto a ponto.
- NdfCreateWinSockIncident: conectando-se a um destino usando um soquete (quando nenhuma das outras funções se aplica especificamente).
- NdfCreateIncident: usado quando nenhum outro cenário é apropriado e a classe auxiliar NDF específica a ser invocada é conhecida (juntamente com os argumentos necessários). Usado principalmente para fins de teste por desenvolvedores de aplicativos que escreveram sua própria classe auxiliar.
Executando diagnóstico e reparos
Há duas maneiras de iniciar a funcionalidade de diagnóstico e reparo.
Usando a interface do usuário do Windows (recomendado)
Ao executar na interface do usuário padrão do Windows, você pode simplesmente chamar a função NdfExecuteDiagnosis . O Assistente do NDF iniciará e ajudará o usuário a identificar (e, se possível, e resolver) o problema. A função retornará após a conclusão desse processo. Opcionalmente, a interface do usuário é modal para seu aplicativo.
Usando uma interface do usuário personalizada (somente Windows 7 e posterior)
Funções diferentes estão disponíveis para uso em cenários em que nenhuma interface do usuário está sendo mostrada ou em que a experiência padrão do Windows não está sendo usada (como Central de Mídia, aplicativos inseridos e o prompt de comando). Essa opção ignora a funcionalidade de experiência do usuário fornecida no Assistente do NDF, que inclui limitar os resultados a causas raiz totalmente compatíveis, bem como heurística para apresentar reparos ao usuário em ordem recomendada. Ao usar essas funções, você deve fornecer qualquer funcionalidade desse tipo por conta própria. Você também deve certificar-se de liberar a memória usada pelos resultados do diagnóstico.
Para iniciar o diagnóstico, chame a função NdfDiagnoseIncident . Todos os problemas encontrados serão retornados ao aplicativo como uma coleção de estruturas RootCauseInfo que descrevem causas raiz identificadas e possíveis reparos.
Depois de selecionar um reparo (ou pedir ao usuário para selecionar um reparo), NdfRepairIncident deve ser chamado para tentar o reparo e determinar se o problema foi resolvido.
Em alguns casos, um reparo pode ser executado com êxito, mas não resolve o problema. Nesses casos, é recomendável fechar o incidente existente e abrir um novo. Isso garantirá que quaisquer novos problemas desmascarados pelo reparo inicial sejam identificados. Por exemplo, suponha que nenhuma rede sem fio tenha sido visível. Depois de redefinir o adaptador, as redes sem fio ficam visíveis, mas nenhuma delas está na lista preferencial. Esse é um novo problema que exigiria um novo diagnóstico para identificar. Se essa segunda tentativa de diagnóstico não identificar problemas adicionais, um reparo diferente poderá ser tentado resolve o problema original ou o usuário poderá ser informado de que o problema não pôde ser resolvido.
NdfDiagnoseIncident e NdfRepairIncident são APIs síncronas. Se você quiser cancelar a atividade iniciada por essas funções, chame NdfCancelIncident de outro thread. A função retornará no próximo ponto de interrupção disponível no processo de diagnóstico ou reparo.
A qualquer momento, você pode, opcionalmente, chamar NdfGetTraceFile para recuperar uma cópia do log do NDF para a sessão de diagnóstico atual e incluí-la com os logs do aplicativo. O log é liberado uma vez recuperado e as chamadas subsequentes só recuperarão eventos que ocorreram após a última chamada para essa função.
Fechando um incidente
Quando terminar de diagnosticar um incidente, chame NdfCloseIncident para liberar recursos do sistema associados à execução de diagnóstico nesse incidente. (Observe que isso não libera objetos criados por NdfDiagnoseIncident.