Buon giorno a tutti, devo includere la gestione delle smart card nel mio progetto ma sono completamente ignorante sulla cosa. Ho tutto quello che mi serve: Lettore GemPC410, card di prova, un manuale sulla programmazione delle smart card di ugo chirico e il software per programmarci sopra scritto sempre da ugo chirico. Nel mio progetto avrei bisogno di leggere/scrivere le informazioni sulla card ma non saprei da dove partire. Esempio: ho intercettato l'evento click di un button e volevo farmi ritornare le informazioni della card da visualizzare in una AfxMessageBox....il problema è che ho iniziato a scrivere del codice ma non so effettivamente quando giusto sia. Non c'è nessuno che ha fatto delle cose simili? o per lo meno ha del codice, dei link, qualcosa da potermi indicare per avere un riferimento?Al momento mi sto arrampicando sugli specchi
Vi posto quello che ho provato a scrivere ma premetto che sarà tutto sbagliato e comunque non è completo....
codice:
//Mi restituisce l'handle alla sessione aperta
SCARDCONTEXT hContext;
long nRes;
nRes = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hContext);
if(nRes != SCARD_S_SUCCESS)
return;
//Apro la connessione con la SmartCard
SCARDHANDLE hCard;
LPCTSTR lpszReaderName = _T("Ugo's Virtual Smart Card Reader");
DWORD dwSharedMode = SCARD_SHARE_SHARED;
DWORD dwPreferredProtocol = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
DWORD dwActiveProtocol = SCARD_PROTOCOL_T1;
nRes = SCardConnect(
hContext,
lpszReaderName,
dwSharedMode,
dwPreferredProtocol,
&hCard,
&dwActiveProtocol
);
if(nRes != SCARD_S_SUCCESS)
return;
typedef struct APDU
{
BYTE cla; //classe
BYTE ins; //istruzione
BYTE p1; //P1
BYTE p2; //P2
BYTE lc; //lunghezza del campo data
BYTE data[256]; //Dati
BYTE le; //lunghezza del response
}APDU;
//Lunghezza dei dati da inviare
DWORD dwSendLength;
//Buffer contenente l'APDU
BYTE pbtAPDU[262];
//Lunghezza del campo response
DWORD dwRecvLength;
//Buffer contenente il campo response
BYTE btRecvBuffer[256];
APDU* apdu;
apdu = new APDU;
apdu->cla = 0x00;
apdu->ins = 0xCA;
apdu->p1 = 0x00;
apdu->p2 = 0x81;
apdu->lc = 0x00;
apdu->le = 0x00;
pbtAPDU[0] = apdu->cla;
pbtAPDU[1] = apdu->ins;
pbtAPDU[2] = apdu->p1;
pbtAPDU[3] = apdu->p2;
pbtAPDU[4] = apdu->lc;
mi sono fermata qui....Aiuto per favore Grazie