/[openpgpmdrv]/trunk/OpenPGPminidriver/SmartCard.c
ViewVC logotype

Diff of /trunk/OpenPGPminidriver/SmartCard.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 7 by vletoux, Thu Mar 4 21:17:51 2010 UTC revision 8 by vletoux, Thu Mar 11 20:32:26 2010 UTC
# Line 24  Line 24 
24    
25  #pragma comment(lib,"Winscard")  #pragma comment(lib,"Winscard")
26    
27    DWORD SelectOpenPGPApplication(__in PCARD_DATA  pCardData);
28    
29  DWORD SCardSendCommand(__in PCARD_DATA  pCardData, __in PBYTE pbCmd, __in DWORD dwCmdSize)  DWORD OCardReconnect(__in PCARD_DATA  pCardData)
30    {
31            DWORD     dwAP;
32            DWORD dwReturn;
33            __try
34            {
35                    // reset the card
36                    Trace(WINEVENT_LEVEL_VERBOSE, L"Enter");
37                    dwReturn = SCardReconnect(pCardData->hScard,
38                             SCARD_SHARE_SHARED,
39                             SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
40                             SCARD_LEAVE_CARD,
41                             &dwAP );
42                    if (dwReturn)
43                    {
44                            Trace(WINEVENT_LEVEL_ERROR, L"SCardReconnect 0x%08X", dwReturn);
45                            __leave;
46                    }
47    
48                    dwReturn = SelectOpenPGPApplication(pCardData);
49            }
50            __finally
51            {
52            }
53            return dwReturn;
54    }
55    
56    DWORD OCardSendCommand(__in PCARD_DATA  pCardData, __in PBYTE pbCmd, __in DWORD dwCmdSize)
57  {  {
58          DWORD             dwReturn = 0;          DWORD             dwReturn = 0;
59    
# Line 46  DWORD SCardSendCommand(__in PCARD_DATA Line 74  DWORD SCardSendCommand(__in PCARD_DATA
74                                                                          &recvlen);                                                                          &recvlen);
75                  if ( dwReturn != SCARD_S_SUCCESS )                  if ( dwReturn != SCARD_S_SUCCESS )
76                  {                  {
77                            if (dwReturn == SCARD_W_RESET_CARD)
78                            {
79                                    dwReturn = OCardReconnect(pCardData);
80                                    if (dwReturn)
81                                    {
82                                            __leave;
83                                    }
84                                    dwReturn = OCardSendCommand(pCardData,pbCmd, dwCmdSize);
85                                    __leave;
86                            }
87                          Trace(WINEVENT_LEVEL_ERROR, L"SCardTransmit errorcode: [0x%02X]", dwReturn);                          Trace(WINEVENT_LEVEL_ERROR, L"SCardTransmit errorcode: [0x%02X]", dwReturn);
88                          __leave;                          __leave;
89                  }                  }
# Line 92  DWORD SelectOpenPGPApplication(__in PCAR Line 130  DWORD SelectOpenPGPApplication(__in PCAR
130                                          0x00                                          0x00
131                                          };                                          };
132                    
133          return SCardSendCommand(pCardData, pbCmd, sizeof(pbCmd));          return OCardSendCommand(pCardData, pbCmd, sizeof(pbCmd));
134  }  }
135    
136    
137  DWORD SCardGetData(__in PCARD_DATA  pCardData,  DWORD OCardGetData(__in PCARD_DATA  pCardData,
138                                          __in PBYTE pbCmd, __in DWORD dwCmdSize,                                          __in PBYTE pbCmd, __in DWORD dwCmdSize,
139                                          __in PBYTE* pbResponse, __in_opt PDWORD pdwResponseSize)                                          __in PBYTE* pbResponse, __in_opt PDWORD pdwResponseSize)
140  {  {
# Line 129  DWORD SCardGetData(__in PCARD_DATA  pCar Line 167  DWORD SCardGetData(__in PCARD_DATA  pCar
167                  {                  {
168                          if ( dwReturn != SCARD_S_SUCCESS )                          if ( dwReturn != SCARD_S_SUCCESS )
169                          {                          {
170                                    if (dwReturn == SCARD_W_RESET_CARD)
171                                    {
172                                            dwReturn = OCardReconnect(pCardData);
173                                            if (dwReturn)
174                                            {
175                                                    __leave;
176                                            }
177                                            dwReturn = OCardGetData(pCardData,pbCmd, dwCmdSize,pbResponse, pdwResponseSize);
178                                            __leave;
179                                    }
180                                  Trace(WINEVENT_LEVEL_ERROR, L"SCardTransmit errorcode: [0x%02X]", dwReturn);                                  Trace(WINEVENT_LEVEL_ERROR, L"SCardTransmit errorcode: [0x%02X]", dwReturn);
181                                  __leave;                                  __leave;
182                          }                          }

Legend:
Removed from v.7  
changed lines
  Added in v.8

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26