Eu tenho um cartão inteligente CAC e um leitor de cartão USB SCM Microsystems SCR3310 . Estou executando o Windows 7 Ultimate com SP1.
Essa configuração costumava funcionar muito bem. Quando eu inseria meu CAC, meus certificados se propagavam imediatamente para o armazenamento de certificados (conforme evidenciado pelo Gerenciador de Certificados certmgr.msc
) e eu podia fazer logon em sites que exigiam um CAC para acesso.
Recentemente, parei de acessar os sites. Observando o Gerenciador de Certificados, vejo que apenas um ou, às vezes, dois dos meus certificados estão presentes. Se eu excluí-los e reinserir meu cartão, um certificado diferente pode aparecer.
Acabei de voltar e substituir o leitor pelo mesmo modelo, então sei que não é o culpado.
Finalmente pensei em examinar o log do sistema e notei os seguintes erros na inserção do cartão inteligente:
Os erros, em ordem cronológica:
Smart Card Service Event ID: 610
Smart Card Reader 'SCM Microsystems SCR33xx v2.0 USB SC Reader 0' rejected
IOCTL TRANSMIT: Incorrect function. If this error persists, your smart card
or reader may not be functioning correctly.
Command Header: 00 c0 00 00
WudfUsbccidDrv Event ID: 11
A Request has returned failure.
MsgType: 0x80
ICCStatus: 0x0
CmdStatus: 0x1
Error: 0xf6 // ICC_PROTOCOL_NOT_SUPPORTED
SW1: 0x0
SW2: 0x0
WudfUsbccidDrv Event ID: 11
An operation has failed (0x0, 0x0, 0x0, 0x0).
ScT0Transmit: Failed to send request at TPDU level.
HResult: The specified request is not a valid operation for the target device.
// Note: this one comes from WUDFUsbccidDriver.dll CMyDevice::UsbScT0Transmit+7D0h
WudfUsbccidDrv Event ID: 10
Request[0](CLS=0x0,INS=0xc0,P1=0x0,P2=0x0,Lc=0,Le=256,.NETServiceMethod=0x0)
Parece que o hardware indicou uma falha durante o IOCTL TRANSMIT
, que passou pela estrutura do driver no modo de usuário.
Edit: Consultando as especificações do CCID, parece que o cartão está respondendo novamente
bmCommandStatus = 1 - Failed (error code provided by the error register)
. E Error = ICC_PROTOCOL_NOT_SUPPORTED -10 (F6h)
. Presumo que o driver traduza esse erro no "HResult: a solicitação especificada não é uma operação válida para o dispositivo de destino". mensagem.
Além disso, o comando enviado foi INS = 0xC0, que é GET RESPONSE .
Como se pode dizer que o protocolo não é suportado? O que o motorista está fazendo de maneira diferente do que quando funcionou? Observe que também tentei isso com um novo CAC e estou vendo um comportamento semelhante. Um problema com o leitor de cartão ou driver?
Considerando que acabei de substituir o leitor (e reinstalar drivers, reinicializados etc.), há algo errado com o meu cartão inteligente? Estou assumindo que não, porque ele faz o trabalho com outro leitor em outro sistema. Eu não tentei um leitor diferente no mesmo sistema.
De fato, o mesmo leitor conectado a uma VM do Windows 7 na mesma máquina física funciona muito bem! Algo está claramente quebrado, e isso está me deixando louco tentando descobrir o que.
Então qual é o problema?
Respostas:
Apenas para o caso de alguém ficar com esse problema - estou tentando corrigi-lo há um dia inteiro.
Aqui está a solução:
Para Windows de 64 bits - vá para a chave do registro em
Já deve haver alguns leitores. Caso contrário, é por isso que você pode ter todos os drivers instalados, mas ainda não está funcionando.
Ir para
Device Manager
, encontrar o leitor em questão, em seguida, olhar para esta corda no separador Detalhes:Bus reported device description
.Crie uma subchave para a chave acima. O nome deve ser exatamente o mesmo
Bus reported device description
. Em seguida, adicione um contador no final. Portanto, a chave deve ser assim:Agora crie alguns valores de sequência: primeiro com o nome do dispositivo e segundo para grupos. Aqui está o meu exemplo:
É isso aí. Para fazê-lo funcionar, desconecte o leitor e conecte-o novamente. No caso de dispositivos internos, pode ser necessário reiniciar a máquina. E aqui está o
.reg
exemplo do arquivo (altere o nome e o número do dispositivo para seus próprios valores):fonte