Knowledge Base Nr: 00154 chipdrive.cpp - http://www.swe-kaiser.de

Downloads: SCard Interface

Win32: Towitoko Chipdrive Kartenleser auslesen

  
/*
MicroChip Treiber Installation:
-------------------------------
www.towitoko.de:
- nur Win95/98/NT/Me: v21441pcsc.zip installieren
- Windows 2000/XP: v21441.zip installieren

ACHTUNG: Zumindestens unter Win2000 kann es nach der Installation zu Problemen mit
der USB Schnittstelle kommen!!!
ACHTUNG: Zumindestens unter Win2000 kann es nach der Installation zu Problemen
mit dem Gerätemanager kommen!!!
*/

#include "CardServer.h"

class CMyCardServer : public CCardServer
{
public:
CMyCardServer():CCardServer() {}

protected:
virtual void OnStatusChanged();
BOOL GetCardInfo(CString& strName, CString& strPassword);
};

CMyCardServer* g_pCardServer = NULL;

void CMyCardServer::OnStatusChanged()
{
CString strLog;

CCardServer::GetStatusText(strLog);

g_nErr = CCardServer::GetStatus();

switch (g_nErr)
{
case MsgActive: //150 Karte bereit
{
//Chipkarte auslesen
CString strName, strPassword;
if (GetCardInfo(strName, strPassword))
{
strcpy(g_szUser, strName);
strcpy(g_szPWD, strPassword);
strcpy(g_szError, "OK!");
g_nErr = 0;
}
else
{
strcpy(g_szUser, "ERROR: Chipkarte hat illegale Daten!");
strcpy(g_szPWD, "ERROR: Chipkarte hat illegale Daten!");
strcpy(g_szError, "ERROR: Chipkarte hat illegale Daten!");
}
}

break;

case MsgWait: //110 Warten auf Karte
strcpy(g_szUser, "Keine Karte!");
strcpy(g_szPWD, "Keine Karte!");
strcpy(g_szError, "Keine Karte!");
g_nErr = 0;
break;

case MsgError: //100 Warten auf Karte
strcpy(g_szUser, "ERROR: kein Gerät!");
strcpy(g_szPWD, "ERROR: kein Gerät!");
strcpy(g_szError, "ERROR: kein Gerät!");
break;

case MsgDetect: //120 Karte einlesen...
strcpy(g_szUser, "Karte erkannt/lesen...!");
strcpy(g_szPWD, "Karte erkannt/lesen...!");
strcpy(g_szError, "Karte erkannt/lesen...!");
break;

default:
strcpy(g_szUser, "ERROR: unknown Error!");
strcpy(g_szPWD, "ERROR: unknown Error!");
strcpy(g_szError, "ERROR: unknown Error!");
}
}

BOOL CMyCardServer::GetCardInfo(CString& strName, CString& strPassword)
{
strName = strPassword = "";

char buf[2048];

DWORD dwResult = SCardCommand("Card,MemRead", NULL, 0, buf, sizeof(buf));

if (dwResult != MAXDWORD)
{
CString strData(buf);

int nTrennPos = strData.FindOneOf(DELIMITER);
if (nTrennPos > 0)
{
strName = strData.Left(nTrennPos);
strPassword = strData.Mid(nTrennPos + 1);
int nTrennPos = strPassword.FindOneOf(DELIMITER);
if (nTrennPos > 0)
strPassword = strPassword.Left(nTrennPos);

return TRUE;
}
}

return FALSE;
}

//////////////////////////////////////////////////////////////////////////////////////
//wenn das applikationsfenster erzeugt ist:

g_pCardServer = new CMyCardServer();
if (g_pCardServer == NULL)
return;

g_pCardServer->CreateCallback();

g_nErr = g_pCardServer->GetStatus();