Smardcard Programmier Problem.



  • Hallo @ all,

    habe ein kleines Problemm bei der Programmierung einem Smardcard lese Gerät,
    das problem liegt beim Senden der datena uf die Karte.

    Das Modell = ST-1044U

    der Quellcode

    #include "stdafx.h"
    #include "winscard.h"
    #include "winsmcrd.h"
    #include "SCardErr.h"
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    
            UINT 		      i;
    	TCHAR 	      s[1000], ss[80];
    	LONG 		      lResult, xResult;
    	SCARDCONTEXT 	hCtx;
    	CHAR 		      mszReaders[1024];
    	DWORD 		    cchReaders; 
    	SCARDHANDLE 	hCard;
    	DWORD 		           dwActiveProtocol;
    	SCARD_IO_REQUEST     ioReqS, ioReqR;
    	const unsigned char *pSndBuf;
    	unsigned char       *pRcvBuf, cSndBuf[13], cRcvBuf[80];
    	DWORD 		           dwRcvLen, dwSndLen;
    
    void Send(){
    
    		////////////////////////////////////////////////////////////////////////////////
    		// Send data to the smartcard
    
    		cSndBuf [0] = 0x00;
    		cSndBuf [1] = 0xA4;
    		cSndBuf [2] = 0x04;
    		cSndBuf [3] = 0x00;
    		cSndBuf [4] = 0x08;
    		cSndBuf [5] = 0xD2;
    		cSndBuf [6] = 0x76;
    		cSndBuf [7] = 0x00;
    		cSndBuf [8] = 0x00;
    		cSndBuf [9] = 0x05;
    		cSndBuf[10] = 0x10;
    		cSndBuf[11] = 0x00;
    		cSndBuf[12] = 0x06;
    
    		pSndBuf = &cSndBuf[0];
    		pRcvBuf = &cRcvBuf[0];
    
    		dwRcvLen = sizeof(cRcvBuf);
    		dwSndLen = sizeof(cSndBuf);
    
    		ioReqS.dwProtocol = SCARD_PROTOCOL_T0;
    		ioReqS.cbPciLength = sizeof(SCARD_IO_REQUEST);
    		ioReqR.dwProtocol = SCARD_PROTOCOL_T0;
    		ioReqR.cbPciLength = sizeof(SCARD_IO_REQUEST);
    
    		lResult = SCardTransmit(hCard, &ioReqS, pSndBuf, dwSndLen, &ioReqR, pRcvBuf, &dwRcvLen);
    
    	    if (SCARD_S_SUCCESS != lResult)
    		{
    			printf("SCardTransmit-> ERROR!!!\n");
    			printf ("hCard=%li r=%x c=%i \n", hCard, lResult, dwRcvLen);
      			lResult = SCardDisconnect (hCard, SCARD_RESET_CARD);
    			lResult = SCardReleaseContext (hCtx);
    		} 
    		else 
    		{
    			printf("SCardTransmit -> OK\n");
    			s[0] ='\0';
    
      			for (i=0;i<dwRcvLen;i++)
    			{
    				  sprintf (ss, "%02x ", cRcvBuf[i]);
    				  strcat (s, ss);
    			}
    			printf ("Response: %s\n", s);
    		}
    }
    
    int main()
    {
    
    	Establish();
    	ListReader();
    	Connect();
    	ATR();
    	Send();
    	Disconnect();
    	Realease();
    
    	system("PAUSE");
    	return 0;
    }
    

    Vielleicht könnt ihr mir ja sagen wie ich das hinbekomme das er Werte auf die Karte schriebt.

    Mfg


Anmelden zum Antworten