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

Diff of /trunk/OpenPGPminidriver/CardAndContainerProperties.c

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

revision 3 by vletoux, Thu Feb 25 22:09:17 2010 UTC revision 8 by vletoux, Thu Mar 11 20:32:26 2010 UTC
# Line 34  DWORD WINAPI CardQueryCapabilities( Line 34  DWORD WINAPI CardQueryCapabilities(
34  )  )
35  {  {
36          DWORD dwReturn = 0, dwVersion;            DWORD dwReturn = 0, dwVersion;  
37            POPENPGP_CONTEXT pContext = NULL;
38          Trace(WINEVENT_LEVEL_VERBOSE, L"Enter");          Trace(WINEVENT_LEVEL_VERBOSE, L"Enter");
39          __try          __try
40          {          {
# Line 56  DWORD WINAPI CardQueryCapabilities( Line 57  DWORD WINAPI CardQueryCapabilities(
57                          dwReturn  = ERROR_REVISION_MISMATCH;                          dwReturn  = ERROR_REVISION_MISMATCH;
58                          __leave;                          __leave;
59                  }                  }
60                  pCardCapabilities->fCertificateCompression = TRUE;                  dwReturn = CheckContext(pCardData);
61                  pCardCapabilities->fKeyGen = TRUE;                  if ( dwReturn)
62                    {
63                            __leave;
64                    }
65                    pContext = (POPENPGP_CONTEXT) pCardData->pvVendorSpecific;
66                    pCardCapabilities->fKeyGen = !pContext->fIsReadOnly;
67                    pCardCapabilities->fCertificateCompression = FALSE;            
68                  dwReturn = 0;                  dwReturn = 0;
69          }          }
70          __finally          __finally
# Line 93  DWORD WINAPI CardGetContainerProperty( Line 100  DWORD WINAPI CardGetContainerProperty(
100                          dwReturn  = SCARD_E_INVALID_PARAMETER;                          dwReturn  = SCARD_E_INVALID_PARAMETER;
101                          __leave;                          __leave;
102                  }                  }
103                    if ( pbData == NULL )
104                    {
105                            Trace(WINEVENT_LEVEL_ERROR, L"pbData == NULL");
106                            dwReturn  = SCARD_E_INVALID_PARAMETER;
107                            __leave;
108                    }
109                  if ( pdwDataLen == NULL )                  if ( pdwDataLen == NULL )
110                  {                  {
111                          Trace(WINEVENT_LEVEL_ERROR, L"pdwDataLen == NULL");                          Trace(WINEVENT_LEVEL_ERROR, L"pdwDataLen == NULL");
# Line 247  DWORD WINAPI CardGetProperty( Line 260  DWORD WINAPI CardGetProperty(
260          DWORD dwReturn = 0;              DWORD dwReturn = 0;    
261          PBYTE pbTempData = NULL;          PBYTE pbTempData = NULL;
262          DWORD dwTempSize = 0;          DWORD dwTempSize = 0;
263            POPENPGP_CONTEXT pContext = NULL;
264          Trace(WINEVENT_LEVEL_VERBOSE, L"Enter wszProperty = %s", wszProperty);          Trace(WINEVENT_LEVEL_VERBOSE, L"Enter wszProperty = %s", wszProperty);
265          __try          __try
266          {          {
# Line 262  DWORD WINAPI CardGetProperty( Line 276  DWORD WINAPI CardGetProperty(
276                          dwReturn  = SCARD_E_INVALID_PARAMETER;                          dwReturn  = SCARD_E_INVALID_PARAMETER;
277                          __leave;                          __leave;
278                  }                  }
279                    if ( pbData == NULL )
280                    {
281                            Trace(WINEVENT_LEVEL_ERROR, L"pbData == NULL");
282                            dwReturn  = SCARD_E_INVALID_PARAMETER;
283                            __leave;
284                    }
285                  if ( pdwDataLen == NULL )                  if ( pdwDataLen == NULL )
286                  {                  {
287                          Trace(WINEVENT_LEVEL_ERROR, L"pdwDataLen == NULL");                          Trace(WINEVENT_LEVEL_ERROR, L"pdwDataLen == NULL");
288                          dwReturn  = SCARD_E_INVALID_PARAMETER;                          dwReturn  = SCARD_E_INVALID_PARAMETER;
289                          __leave;                          __leave;
290                  }                  }
291                    dwReturn = CheckContext(pCardData);
292                    if ( dwReturn )
293                    {
294                            Trace(WINEVENT_LEVEL_ERROR, L"GetContext dwReturn == 0x%08X", dwReturn);
295                            dwReturn  = SCARD_E_INVALID_PARAMETER;
296                            __leave;
297                    }
298                    pContext = (POPENPGP_CONTEXT) pCardData->pvVendorSpecific;
299                  if (wcscmp(wszProperty,CP_CARD_FREE_SPACE) == 0)                  if (wcscmp(wszProperty,CP_CARD_FREE_SPACE) == 0)
300                  {                  {
301                            if (dwFlags)
302                            {
303                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
304                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
305                                    __leave;
306                            }
307                          *pdwDataLen = sizeof(CARD_FREE_SPACE_INFO);                          *pdwDataLen = sizeof(CARD_FREE_SPACE_INFO);
308                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
309                          {                          {
# Line 281  DWORD WINAPI CardGetProperty( Line 315  DWORD WINAPI CardGetProperty(
315                  }                  }
316                  else if (wcscmp(wszProperty,CP_CARD_CAPABILITIES) == 0)                  else if (wcscmp(wszProperty,CP_CARD_CAPABILITIES) == 0)
317                  {                  {
318                            if (dwFlags)
319                            {
320                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
321                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
322                                    __leave;
323                            }
324                          *pdwDataLen = sizeof(CARD_CAPABILITIES);                          *pdwDataLen = sizeof(CARD_CAPABILITIES);
325                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
326                          {                          {
# Line 303  DWORD WINAPI CardGetProperty( Line 343  DWORD WINAPI CardGetProperty(
343                  }                  }
344                  else if (wcscmp(wszProperty,CP_CARD_READ_ONLY) == 0)                  else if (wcscmp(wszProperty,CP_CARD_READ_ONLY) == 0)
345                  {                  {
346                            if (dwFlags)
347                            {
348                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
349                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
350                                    __leave;
351                            }
352                          *pdwDataLen = sizeof(BOOL);                          *pdwDataLen = sizeof(BOOL);
353                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
354                          {                          {
# Line 310  DWORD WINAPI CardGetProperty( Line 356  DWORD WINAPI CardGetProperty(
356                                  dwReturn  = ERROR_INSUFFICIENT_BUFFER;                                  dwReturn  = ERROR_INSUFFICIENT_BUFFER;
357                                  __leave;                                  __leave;
358                          }                          }
359                          *((PBOOL)pbData) = TRUE;                          *((PBOOL)pbData) = pContext->fIsReadOnly;
360                  }                  }
361                  else if (wcscmp(wszProperty,CP_CARD_CACHE_MODE) == 0)                  else if (wcscmp(wszProperty,CP_CARD_CACHE_MODE) == 0)
362                  {                  {
363                            if (dwFlags)
364                            {
365                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
366                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
367                                    __leave;
368                            }
369                          *pdwDataLen = sizeof(DWORD);                          *pdwDataLen = sizeof(DWORD);
370                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
371                          {                          {
# Line 325  DWORD WINAPI CardGetProperty( Line 377  DWORD WINAPI CardGetProperty(
377                  }                  }
378                  else if (wcscmp(wszProperty,CP_SUPPORTS_WIN_X509_ENROLLMENT) == 0)                  else if (wcscmp(wszProperty,CP_SUPPORTS_WIN_X509_ENROLLMENT) == 0)
379                  {                  {
380                            if (dwFlags)
381                            {
382                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
383                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
384                                    __leave;
385                            }
386                          *pdwDataLen = sizeof(BOOL);                          *pdwDataLen = sizeof(BOOL);
387                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
388                          {                          {
# Line 336  DWORD WINAPI CardGetProperty( Line 394  DWORD WINAPI CardGetProperty(
394                  }                  }
395                  else if (wcscmp(wszProperty,CP_CARD_GUID) == 0)                  else if (wcscmp(wszProperty,CP_CARD_GUID) == 0)
396                  {                  {
397                            if (dwFlags)
398                            {
399                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
400                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
401                                    __leave;
402                            }
403                          dwReturn = CardReadFile(pCardData, NULL, szCARD_IDENTIFIER_FILE, 0, &pbTempData, &dwTempSize);                          dwReturn = CardReadFile(pCardData, NULL, szCARD_IDENTIFIER_FILE, 0, &pbTempData, &dwTempSize);
404                          if (dwReturn)                          if (dwReturn)
405                          {                          {
# Line 352  DWORD WINAPI CardGetProperty( Line 416  DWORD WINAPI CardGetProperty(
416                  }                  }
417                  else if (wcscmp(wszProperty,CP_CARD_SERIAL_NO) == 0)                  else if (wcscmp(wszProperty,CP_CARD_SERIAL_NO) == 0)
418                  {                  {
419                            if (dwFlags)
420                            {
421                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
422                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
423                                    __leave;
424                            }
425                          *pdwDataLen = sizeof(OPENPGP_AID);                          *pdwDataLen = sizeof(OPENPGP_AID);
426                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
427                          {                          {
# Line 378  DWORD WINAPI CardGetProperty( Line 448  DWORD WINAPI CardGetProperty(
448                  else if (wcscmp(wszProperty,CP_CARD_LIST_PINS) == 0)                  else if (wcscmp(wszProperty,CP_CARD_LIST_PINS) == 0)
449                  {                  {
450                          PPIN_SET pPinSet;                          PPIN_SET pPinSet;
451                            if (dwFlags)
452                            {
453                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
454                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
455                                    __leave;
456                            }
457                          *pdwDataLen = sizeof(PIN_SET);                          *pdwDataLen = sizeof(PIN_SET);
458                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
459                          {                          {
# Line 386  DWORD WINAPI CardGetProperty( Line 462  DWORD WINAPI CardGetProperty(
462                                  __leave;                                  __leave;
463                          }                          }
464                          pPinSet = (PPIN_SET) pbData;                          pPinSet = (PPIN_SET) pbData;
465                            *pPinSet = CREATE_PIN_SET(ROLE_SIGNATURE);
466                            SET_PIN(*pPinSet, ROLE_AUTHENTICATION);
467                            SET_PIN(*pPinSet, ROLE_CONFIDENTIALITY);
468                            SET_PIN(*pPinSet, ROLE_PUK);
469                            SET_PIN(*pPinSet, ROLE_ADMIN);
470                  }                  }
471                  else if (wcscmp(wszProperty,CP_CARD_AUTHENTICATED_STATE) == 0)                  else if (wcscmp(wszProperty,CP_CARD_AUTHENTICATED_STATE) == 0)
472                  {                  {
473                            if (dwFlags)
474                            {
475                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
476                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
477                                    __leave;
478                            }
479                          dwReturn = SCARD_E_UNSUPPORTED_FEATURE;                          dwReturn = SCARD_E_UNSUPPORTED_FEATURE;
480                  }                  }
481                  else if (wcscmp(wszProperty,CP_CARD_PIN_STRENGTH_VERIFY) == 0)                  else if (wcscmp(wszProperty,CP_CARD_PIN_STRENGTH_VERIFY) == 0)
482                  {                  {
483                          PPIN_SET pPinSet;                          PPIN_SET pPinSet;
484                            switch(dwFlags)
485                            {
486                            case ROLE_SIGNATURE:
487                            case ROLE_AUTHENTICATION:
488                            case ROLE_CONFIDENTIALITY:
489                            case ROLE_ADMIN:
490                            case ROLE_PUK:
491                                    break;
492                            default:
493                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
494                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
495                                    __leave;
496                            }
497                          *pdwDataLen = sizeof(PIN_SET);                          *pdwDataLen = sizeof(PIN_SET);
498                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
499                          {                          {
# Line 406  DWORD WINAPI CardGetProperty( Line 506  DWORD WINAPI CardGetProperty(
506                  }                  }
507                  else if (wcscmp(wszProperty,CP_KEY_IMPORT_SUPPORT) == 0)                  else if (wcscmp(wszProperty,CP_KEY_IMPORT_SUPPORT) == 0)
508                  {                  {
509                            if (dwFlags)
510                            {
511                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == 0");
512                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
513                                    __leave;
514                            }
515                          *pdwDataLen = sizeof(DWORD);                          *pdwDataLen = sizeof(DWORD);
516                          if (cbData < *pdwDataLen)                          if (cbData < *pdwDataLen)
517                          {                          {
# Line 413  DWORD WINAPI CardGetProperty( Line 519  DWORD WINAPI CardGetProperty(
519                                  dwReturn  = ERROR_INSUFFICIENT_BUFFER;                                  dwReturn  = ERROR_INSUFFICIENT_BUFFER;
520                                  __leave;                                  __leave;
521                          }                          }
522                          *((PDWORD)pbData) = CARD_KEY_IMPORT_RSA_KEYEST;                          if (pContext->fIsReadOnly)
523                            {
524                                    *((PDWORD)pbData) = 0;
525                            }
526                            else
527                            {
528                                    *((PDWORD)pbData) = CARD_KEY_IMPORT_RSA_KEYEST;
529                            }
530                  }                  }
531                  else if (wcscmp(wszProperty,CP_ENUM_ALGORITHMS ) == 0)                  else if (wcscmp(wszProperty,CP_ENUM_ALGORITHMS ) == 0)
532                  {                  {
# Line 449  DWORD WINAPI CardGetProperty( Line 562  DWORD WINAPI CardGetProperty(
562                  {                  {
563                          if (dwFlags == CARD_CIPHER_OPERATION)                          if (dwFlags == CARD_CIPHER_OPERATION)
564                          {                          {
565                                    Trace(WINEVENT_LEVEL_ERROR, L"CARD_CIPHER_OPERATION", wszProperty);
566                                  dwReturn = SCARD_E_UNSUPPORTED_FEATURE;                                  dwReturn = SCARD_E_UNSUPPORTED_FEATURE;
567                          }                          }
568                          else if (dwFlags == CARD_ASYMMETRIC_OPERATION   )                          else if (dwFlags == CARD_ASYMMETRIC_OPERATION   )
# Line 471  DWORD WINAPI CardGetProperty( Line 585  DWORD WINAPI CardGetProperty(
585                  }                  }
586                  else if (wcscmp(wszProperty,CP_CHAINING_MODES ) == 0)                  else if (wcscmp(wszProperty,CP_CHAINING_MODES ) == 0)
587                  {                  {
588                            if (dwFlags)
589                            {
590                                    Trace(WINEVENT_LEVEL_ERROR, L"dwFlags == %d", dwFlags);
591                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
592                                    __leave;
593                            }
594                            Trace(WINEVENT_LEVEL_ERROR, L"wszProperty == %s", wszProperty);
595                            dwReturn = SCARD_E_UNSUPPORTED_FEATURE;
596                    }
597                    else if ( wcscmp(wszProperty,CP_CARD_PIN_STRENGTH_CHANGE ) == 0
598                            || wcscmp(wszProperty,CP_CARD_PIN_STRENGTH_UNBLOCK ) == 0)
599                    {
600                            Trace(WINEVENT_LEVEL_ERROR, L"wszProperty == %s SCARD_E_UNSUPPORTED_FEATURE", wszProperty);
601                          dwReturn = SCARD_E_UNSUPPORTED_FEATURE;                          dwReturn = SCARD_E_UNSUPPORTED_FEATURE;
602                  }                  }
603                  else                  else
604                  {                  {
605                          Trace(WINEVENT_LEVEL_ERROR, L"wszProperty == %s", wszProperty);                          Trace(WINEVENT_LEVEL_ERROR, L"wszProperty == %s SCARD_E_INVALID_PARAMETER", wszProperty);
606                          dwReturn  = SCARD_E_INVALID_PARAMETER;                          dwReturn  = SCARD_E_INVALID_PARAMETER;
607                          __leave;                          __leave;
608                  }                  }
# Line 531  DWORD WINAPI CardSetProperty( Line 658  DWORD WINAPI CardSetProperty(
658                          || wcscmp(wszProperty,CP_KEY_IMPORT_SUPPORT) == 0                          || wcscmp(wszProperty,CP_KEY_IMPORT_SUPPORT) == 0
659                          || wcscmp(wszProperty,CP_ENUM_ALGORITHMS) == 0                          || wcscmp(wszProperty,CP_ENUM_ALGORITHMS) == 0
660                          || wcscmp(wszProperty,CP_PADDING_SCHEMES) == 0                          || wcscmp(wszProperty,CP_PADDING_SCHEMES) == 0
661                          || wcscmp(wszProperty,CP_CHAINING_MODES) == 0)                          || wcscmp(wszProperty,CP_CHAINING_MODES) == 0
662                            || wcscmp(wszProperty,CP_SUPPORTS_WIN_X509_ENROLLMENT) == 0
663                            || wcscmp(wszProperty,CP_CARD_CACHE_MODE) == 0
664                            || wcscmp(wszProperty,CP_CARD_SERIAL_NO) == 0
665                            || wcscmp(wszProperty,CP_CARD_GUID) == 0
666                            || wcscmp(wszProperty,CP_CARD_PIN_INFO) == 0
667                            || wcscmp(wszProperty,CP_CARD_PIN_STRENGTH_VERIFY) == 0)
668                  {                  {
669                            if ( pbData == NULL )
670                            {
671                                    Trace(WINEVENT_LEVEL_ERROR, L"pbData == NULL");
672                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
673                                    __leave;
674                            }
675                          Trace(WINEVENT_LEVEL_ERROR, L"wszProperty == %s SCARD_E_UNSUPPORTED_FEATURE", wszProperty);                          Trace(WINEVENT_LEVEL_ERROR, L"wszProperty == %s SCARD_E_UNSUPPORTED_FEATURE", wszProperty);
676                          dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;                          dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;
677                          __leave;                          __leave;
678                  }                  }
679                  else if (wcscmp(wszProperty,CP_CARD_READ_ONLY) == 0)                  else if (wcscmp(wszProperty,CP_CARD_READ_ONLY) == 0)
680                  {                  {
681                          dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;                          if ( pbData == NULL )
682                  }                          {
683                  else if (wcscmp(wszProperty,CP_CARD_CACHE_MODE) == 0)                                  Trace(WINEVENT_LEVEL_ERROR, L"pbData == NULL");
684                  {                                  dwReturn  = SCARD_E_INVALID_PARAMETER;
685                          dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;                                  __leave;
686                  }                          }
687                  else if (wcscmp(wszProperty,CP_SUPPORTS_WIN_X509_ENROLLMENT) == 0)                          dwReturn  = SCARD_W_SECURITY_VIOLATION;
                 {  
                         dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;  
                 }  
                 else if (wcscmp(wszProperty,CP_CARD_GUID) == 0)  
                 {  
                         dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;  
                 }  
                 else if (wcscmp(wszProperty,CP_CARD_SERIAL_NO) == 0)  
                 {  
                         dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;  
688                  }                  }
689                  else if (wcscmp(wszProperty,CP_CARD_PIN_INFO) == 0)                  else  if (wcscmp(wszProperty,CP_PARENT_WINDOW) == 0)
690                  {                  {
691                          dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;                          if ( pbData == NULL )
692                            {
693                                    Trace(WINEVENT_LEVEL_ERROR, L"pbData == NULL");
694                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
695                                    __leave;
696                            }
697                            if ( cbDataLen != sizeof(HWND) )
698                            {
699                                    Trace(WINEVENT_LEVEL_ERROR, L"cbDataLen == %d", cbDataLen);
700                                    dwReturn  = SCARD_E_INVALID_PARAMETER ;
701                                    __leave;
702                            }
703                            if ( *pbData != 0 && !IsWindow((HWND) *pbData) )
704                            {
705                                    Trace(WINEVENT_LEVEL_ERROR, L"*pbData == %d GetLastError == %d", *pbData, GetLastError());
706                                    dwReturn  = SCARD_E_INVALID_PARAMETER ;
707                                    __leave;
708                            }
709                            dwReturn  = 0;
710                  }                  }
711                  else if (wcscmp(wszProperty,CP_CARD_PIN_STRENGTH_VERIFY) == 0)                  else  if (wcscmp(wszProperty,CP_PIN_CONTEXT_STRING) == 0)
712                  {                  {
713                          dwReturn  = SCARD_E_UNSUPPORTED_FEATURE ;                          if ( pbData == NULL )
714                            {
715                                    Trace(WINEVENT_LEVEL_ERROR, L"pbData == NULL");
716                                    dwReturn  = SCARD_E_INVALID_PARAMETER;
717                                    __leave;
718                            }
719                            dwReturn  = 0;
720                  }                  }
721                  else                  else
722                  {                  {
723                          Trace(WINEVENT_LEVEL_ERROR, L"wszProperty == %s", wszProperty);                          Trace(WINEVENT_LEVEL_ERROR, L"wszProperty == %s Unknown", wszProperty);
724                          dwReturn  = SCARD_E_INVALID_PARAMETER;                          dwReturn  = SCARD_E_INVALID_PARAMETER;
725                          __leave;                          __leave;
726                  }                  }
                 dwReturn = SCARD_E_UNSUPPORTED_FEATURE;  
727          }          }
728          __finally          __finally
729          {          {

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26