Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
4.7 KiB

  1. /*++
  2. Copyright (C) Microsoft Corporation, 1996 - 1999
  3. Module Name:
  4. SEnv
  5. Abstract:
  6. This file contains the definition of the Smartcard Common
  7. dialog CSCardEnv class. This class encapsulates Smartcard
  8. Environment information.
  9. Author:
  10. Chris Dudley 3/3/1997
  11. Environment:
  12. Win32, C++ w/Exceptions, MFC
  13. Revision History:
  14. Amanda Matlosz 1/29/98 Changed class structure; added Unicode support
  15. Notes:
  16. --*/
  17. #ifndef __SENV_H__
  18. #define __SENV_H__
  19. /////////////////////////////////////////////////////////////////////////////
  20. //
  21. // Includes
  22. //
  23. #include "cmnui.h"
  24. #include "rdrstate.h"
  25. /////////////////////////////////////////////////////////////////////////////
  26. //
  27. // CSCardEnv Class - encapsulates current smartcard environment regarding
  28. // groups of readers and associated cards/status
  29. //
  30. class CSCardEnv
  31. {
  32. // Construction/Destruction
  33. public:
  34. CSCardEnv()
  35. {
  36. m_pOCNA = NULL;
  37. m_pOCNW = NULL;
  38. m_dwReaderIndex = 0;
  39. m_hContext = NULL;
  40. }
  41. ~CSCardEnv()
  42. {
  43. // Release any attached readers
  44. RemoveReaders();
  45. }
  46. // Implementation
  47. public:
  48. // Initialization / completion routines
  49. LONG SetOCN(LPOPENCARDNAMEA pOCNA);
  50. LONG SetOCN(LPOPENCARDNAMEW pOCNW);
  51. LONG UpdateOCN();
  52. void SetContext( SCARDCONTEXT hContext );
  53. // Attributes / properties
  54. SCARDCONTEXT GetContext() { return m_hContext; }
  55. void GetCardList(LPCTSTR* pszCardList);
  56. void GetDialogTitle(CTextString *pstzTitle);
  57. HWND GetParentHwnd() { return (m_hwndOwner); }
  58. BOOL IsOCNValid() { return (NULL != m_pOCNA || NULL != m_pOCNW); }
  59. BOOL IsCallbackValid( void );
  60. BOOL IsContextValid() { return (m_hContext != NULL); }
  61. BOOL IsArrayValid() { return (m_rgReaders.GetSize() > 0); }
  62. int NumberOfReaders() { return (int)m_rgReaders.GetSize(); }
  63. BOOL CardMeetsSearchCriteria(DWORD dwSelectedReader);
  64. // Reader array management
  65. LONG CreateReaderStateArray( LPSCARD_READERSTATE_A* prgReaderStateArray ); // TODO: ?? A/W ??
  66. void DeleteReaderStateArray( LPSCARD_READERSTATE_A* prgReaderStateArray ); // TODO: ?? A/W ??
  67. LONG FirstReader( LPSCARD_READERINFO pReaderInfo );
  68. LONG NextReader( LPSCARD_READERINFO pReaderInfo );
  69. void RemoveReaders( void );
  70. LONG UpdateReaders( void );
  71. // Methods
  72. LONG NoUISearch( BOOL* pfEnableUI ); // try this search first...
  73. LONG Search( int* pcMatches, DWORD* pdwIndex );
  74. LONG ConnectToReader(DWORD dwSelectedReader);
  75. LONG ConnectInternal( DWORD dwSelectedReader,
  76. SCARDHANDLE *pHandle,
  77. DWORD dwShareMode,
  78. DWORD dwProtocols,
  79. DWORD* pdwActiveProtocols,
  80. CTextString* pszReaderName = NULL,
  81. CTextString* pszCardName = NULL);
  82. LONG ConnectUser( DWORD dwSelectedReader,
  83. SCARDHANDLE *pHandle,
  84. CTextString* pszReaderName = NULL,
  85. CTextString* pszCardName = NULL);
  86. private:
  87. LONG BuildReaderArray( LPSTR szReaderNames ); // TODO: ?? A/W ??
  88. void InitializeAllPossibleCardNames( void );
  89. // Members
  90. private:
  91. // Reader information
  92. CTypedPtrArray<CPtrArray, CSCardReaderState*> m_rgReaders;
  93. DWORD m_dwReaderIndex;
  94. // external representation of OpenCardName structs are not touched unless
  95. // SCardEnv->UpdateOCN explicitly called.
  96. LPOPENCARDNAMEA m_pOCNA;
  97. LPOPENCARDNAMEW m_pOCNW;
  98. // internal representation of OpenCardName struct combines ansi/
  99. // unicode information from whichever kind of OCN user provided
  100. CTextMultistring m_strGroupNames;
  101. CTextMultistring m_strCardNames;
  102. CTextMultistring m_strAllPossibleCardNames;
  103. CTextString m_strReader;
  104. CTextString m_strCard;
  105. CTextString m_strTitle;
  106. // only LPOCNCONNPROC needs to differentiate between A/W
  107. LPOCNCONNPROCA m_lpfnConnectA;
  108. LPOCNCONNPROCW m_lpfnConnectW;
  109. LPOCNCHKPROC m_lpfnCheck;
  110. LPOCNDSCPROC m_lpfnDisconnect;
  111. LPVOID m_lpUserData;
  112. SCARDCONTEXT m_hContext;
  113. HWND m_hwndOwner;
  114. LPCGUID m_rgguidInterfaces;
  115. DWORD m_cguidInterfaces;
  116. DWORD m_dwFlags;
  117. LPVOID m_pvUserData;
  118. DWORD m_dwShareMode;
  119. DWORD m_dwPreferredProtocols;
  120. DWORD m_dwActiveProtocol;
  121. SCARDHANDLE m_hCardHandle;
  122. };
  123. ///////////////////////////////////////////////////////////////////////////////////////
  124. #endif //__SENV_H__