O armazenamento de certificados na minha caixa Win7 está constantemente pendurado. Observe:
C:\>1.cmd
C:\>certutil -? | findstr /i ping
-ping -- Ping Active Directory Certificate Services Request interface
-pingadmin -- Ping Active Directory Certificate Services Admin interface
C:\>set PROMPT=$P($t)$G
C:\(13:04:28.57)>certutil -ping
CertUtil: -ping command FAILED: 0x80070002 (WIN32: 2)
CertUtil: The system cannot find the file specified.
C:\(13:04:58.68)>certutil -pingadmin
CertUtil: -pingadmin command FAILED: 0x80070002 (WIN32: 2)
CertUtil: The system cannot find the file specified.
C:\(13:05:28.79)>set PROMPT=$P$G
C:\>
Explicações:
- O primeiro comando mostra que há
–ping
e –pingadmin
parâmetros para certutil
- Tentando qualquer parâmetro de ping falhar com 30 segundos de tempo limite (a hora atual é vista no prompt)
Este é um problema sério. Ele parafusa toda a comunicação segura no meu aplicativo. Se alguém souber como isso pode ser corrigido - por favor, compartilhe.
Obrigado.
P.S.
1.cmd é simplesmente um lote desses comandos:
certutil -? | findstr /i ping
set PROMPT=$P($t)$G
certutil -ping
certutil -pingadmin
set PROMPT=$P$G
EDIT1
Consegui definir a única API do Windows que causa o problema - DsGetDcName
De acordo com o windbg, o certutil -ping invoca da seguinte forma:
PDOMAIN_CONTROLLER_INFO pdci;
DWORD ret = ::DsGetDcName(NULL, NULL, NULL, NULL, DS_DIRECTORY_SERVICE_PREFERRED, &pdci);
Na minha estação de trabalho, ele expira por 30 segundos e retorna o código de erro 1355, que é ERROR_NO_SUCH_DOMAIN
Nenhum controlador de domínio está disponível para o domínio especificado ou o domínio não existe.
Em outra máquina, que é acidentalmente um servidor Windows 2003, ela retorna quase imediatamente com o nome correto do controlador de domínio dentro da estrutura DOMAIN_CONTROLLER_INFO
retornada.
Agora, a questão é o que está faltando na minha estação de trabalho para que a API encontre o controlador de domínio correto?