Lecteur de carte à puces
Posté : 24 nov. 2007, 12:56
Bonjour,
Est ce que qq a réussi à faire fonctionner un lecteur de cartes à puces sous VISTA : La liste des groupes de lecteurs est vide dans SCardListReaderGroups et SCardListReaders retourne systématiquement SCARD_E_NO_READERS_AVAILABLE. Le service carte à puces est démarré, plusieurs lecteurs de marque différentes ont été testés et apparaissent correctement dans la liste des matériels. Le PnP fonctionne correctement.
Le comportement est le meme en mode administrateur.
PS : Je travaille sous Visual Studio 2005 mais d'anciens programmes écrits sous VC 6.00 ont le même comportement.
// Establish the context.
lReturn = SCardEstablishContext(SCARD_SCOPE_SYSTEM,
NULL,
NULL,
phSC);
cch = SCARD_AUTOALLOCATE;
if (cch != SCARD_AUTOALLOCATE)
_tprintf(_T("Rien ne va plus !!!!!\n"));
if ( SCARD_S_SUCCESS != lReturn ) _tprintf(_T("Failed SCardEstablishContext\n"));
else
{
cch = SCARD_AUTOALLOCATE;
lReturn = SCardListReaderGroups(hSC,
(LPTSTR)&pmszReaderGroups,
&cch );
if ( SCARD_S_SUCCESS != lReturn ) _tprintf(_T("Failed SCardListReaderGroups\n"));
else
{
// Do something with the multi string of reader groups.
// Output the values.
// A double-null terminates the list of values.
pReaderGroup = pmszReaderGroups;
while ( '\0' != *pReaderGroup )
{
// Display the value.
_tprintf(_T("%S\n"), pReaderGroup);
// Advance to the next value.
pReaderGroup = pReaderGroup + wcslen(pReaderGroup) + 1;
}
// Remember to free pmszReaderGroups by a call to SCardFreeMemory.
}
DWORD dwReaders = SCARD_AUTOALLOCATE;
dwReaders = 1024;
lReturn = SCardListReaders(hSC,NULL,NULL,&dwReaders);
if (lReturn != SCARD_S_SUCCESS) _tprintf(_T("CardListReaders failure"));
switch( lReturn )
{
case SCARD_E_NO_READERS_AVAILABLE:
_tprintf(_T("Reader is not in groups.\n"));
// Take appropriate action.
break;
case SCARD_S_SUCCESS:
// Do something with the multi string of readers.
// Output the values.
// A double-null terminates the list of values.
pReader = pmszReaders;
while ( '\0' != *pReader )
{
// Display the value.
_tprintf(_T("Reader: %S\n"), pReader);
// Advance to the next value.
pReader = pReader + wcslen(pReader) + 1;
}
// Free the memory.
lReturn2 = SCardFreeMemory( hSC, pmszReaders );
if ( SCARD_S_SUCCESS != lReturn2 ) _tprintf(_T("Failed SCardFreeMemory\n"));
break;
default:
_tprintf(_T("Failed SCardListReaders\n"));
// Take appropriate action.
break;
}
J'ai pensé aussi à un problème UNICODE, sans succès là non plus.
Si quelqu'un a une idée, merci d'avance.
cdc
Est ce que qq a réussi à faire fonctionner un lecteur de cartes à puces sous VISTA : La liste des groupes de lecteurs est vide dans SCardListReaderGroups et SCardListReaders retourne systématiquement SCARD_E_NO_READERS_AVAILABLE. Le service carte à puces est démarré, plusieurs lecteurs de marque différentes ont été testés et apparaissent correctement dans la liste des matériels. Le PnP fonctionne correctement.
Le comportement est le meme en mode administrateur.
PS : Je travaille sous Visual Studio 2005 mais d'anciens programmes écrits sous VC 6.00 ont le même comportement.
// Establish the context.
lReturn = SCardEstablishContext(SCARD_SCOPE_SYSTEM,
NULL,
NULL,
phSC);
cch = SCARD_AUTOALLOCATE;
if (cch != SCARD_AUTOALLOCATE)
_tprintf(_T("Rien ne va plus !!!!!\n"));
if ( SCARD_S_SUCCESS != lReturn ) _tprintf(_T("Failed SCardEstablishContext\n"));
else
{
cch = SCARD_AUTOALLOCATE;
lReturn = SCardListReaderGroups(hSC,
(LPTSTR)&pmszReaderGroups,
&cch );
if ( SCARD_S_SUCCESS != lReturn ) _tprintf(_T("Failed SCardListReaderGroups\n"));
else
{
// Do something with the multi string of reader groups.
// Output the values.
// A double-null terminates the list of values.
pReaderGroup = pmszReaderGroups;
while ( '\0' != *pReaderGroup )
{
// Display the value.
_tprintf(_T("%S\n"), pReaderGroup);
// Advance to the next value.
pReaderGroup = pReaderGroup + wcslen(pReaderGroup) + 1;
}
// Remember to free pmszReaderGroups by a call to SCardFreeMemory.
}
DWORD dwReaders = SCARD_AUTOALLOCATE;
dwReaders = 1024;
lReturn = SCardListReaders(hSC,NULL,NULL,&dwReaders);
if (lReturn != SCARD_S_SUCCESS) _tprintf(_T("CardListReaders failure"));
switch( lReturn )
{
case SCARD_E_NO_READERS_AVAILABLE:
_tprintf(_T("Reader is not in groups.\n"));
// Take appropriate action.
break;
case SCARD_S_SUCCESS:
// Do something with the multi string of readers.
// Output the values.
// A double-null terminates the list of values.
pReader = pmszReaders;
while ( '\0' != *pReader )
{
// Display the value.
_tprintf(_T("Reader: %S\n"), pReader);
// Advance to the next value.
pReader = pReader + wcslen(pReader) + 1;
}
// Free the memory.
lReturn2 = SCardFreeMemory( hSC, pmszReaders );
if ( SCARD_S_SUCCESS != lReturn2 ) _tprintf(_T("Failed SCardFreeMemory\n"));
break;
default:
_tprintf(_T("Failed SCardListReaders\n"));
// Take appropriate action.
break;
}
J'ai pensé aussi à un problème UNICODE, sans succès là non plus.
Si quelqu'un a une idée, merci d'avance.
cdc