J'ai une carte à puce CAC , et un lecteur de carte USB SCM Microsystems SCR331 . J'utilise Windows 7 Ultimate avec SP1.
Cette configuration fonctionnait très bien. Lorsque j'inscrivais mon CAC, mes certificats se propageaient immédiatement dans le magasin de certificats (comme en témoigne le Gestionnaire de certificats, certmgr.msc
), et je pouvais me connecter aux sites Web nécessitant un CAC pour y accéder.
Récemment, j'ai cessé d'accéder aux sites Web. En regardant dans Certificate Manager, je constate qu’un seul, voire parfois deux de mes certificats sont présents. Si je les supprime et que je réinsère ma carte, un autre certificat peut apparaître.
Je viens de rentrer et j'ai remplacé le lecteur par le même modèle, donc je sais que ce n'est pas le coupable.
J'ai finalement pensé à consulter le journal système et j'ai remarqué les erreurs suivantes lors de l'insertion de la carte à puce:
Les erreurs, dans l'ordre chronologique:
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)
Il semble que le matériel ait indiqué une défaillance lors de IOCTL TRANSMIT
, ce qui s'est répercuté sur l'infrastructure du pilote en mode utilisateur.
Edit: En consultant la spécification CCID, il semble que la carte réponde avec bmCommandStatus = 1 - Failed (error code provided by the error register)
. Et Error = ICC_PROTOCOL_NOT_SUPPORTED -10 (F6h)
. Je suppose que le pilote traduit cette erreur en "HResult: la demande spécifiée n'est pas une opération valide pour le périphérique cible". message.
En outre, la commande envoyée était INS = 0xC0, ce qui est GET RESPONSE .
Comment peut-il dire protocole non pris en charge? Qu'est-ce que le pilote fait différemment que lorsqu'il fonctionnait? Notez également que je viens d’essayer cela avec un nouveau CAC et que je constate un comportement similaire. Un problème avec le lecteur de carte ou le pilote?
Considérant que je viens de remplacer le lecteur (et les pilotes réinstallés, redémarré, etc.), y a-t-il un problème avec ma carte à puce? Je suppose que non, car fonctionne avec un autre lecteur sur un autre système. Je n'ai pas essayé un lecteur différent sur le même système.
En fait, le même lecteur connecté à un ordinateur Windows 7 VM sur la même machine physique fonctionne parfaitement! Quelque chose est clairement cassé, et ça me rend fou d'essayer de trouver quoi.
Alors quel est le problème?
Juste au cas où quelqu'un resterait coincé avec ce problème - j'essaie de le résoudre depuis environ une journée.
Voici la solution:
Pour Windows 64 bits, passez à la clé de registre à l'adresse
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers
Il devrait déjà y avoir des lecteurs. Et si ce n’est pas le cas, c’est la raison pour laquelle tous les pilotes sont installés mais ne fonctionnent toujours pas du tout.
Allez à Device Manager
, trouvez le lecteur en question, puis cherchez cette chaîne dans l’onglet Détails: Bus reported device description
.
Créez une sous-clé pour la clé ci-dessus. Le nom doit être exactement identique à celui Bus reported device description
. Ensuite, ajoutez un compteur à la fin. Donc, la clé devrait être comme celle-ci:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers\O2Micro CCID SC Reader 0
Créez maintenant deux valeurs de chaîne: la première avec le nom de l’appareil et la seconde pour les groupes. Voici mon exemple:
Device = O2Micro CCID SC Reader 0
Groups = SCard$DefaultReaders
C'est tout. Pour que cela fonctionne, déconnectez le lecteur et reconnectez-le. Dans le cas de périphériques internes, vous devrez peut-être redémarrer la machine. Et voici l'exemple de fichier .reg
(remplacez le nom et le numéro du périphérique par vos propres valeurs):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers\O2Micro CCID SC Reader 0]
"Device"="O2Micro CCID SC Reader 0"
"Groups"=hex(7):53,00,43,00,61,00,72,00,64,00,24,00,44,00,65,00,66,00,61,00,75,\
00,6c,00,74,00,52,00,65,00,61,00,64,00,65,00,72,00,73,00,00,00,00,00