windows-nt/Source/XPSP1/NT/ds/security/csps/cryptoflex/slbcsp/cardfinder.h

217 lines
5.7 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
// CardFinder.h -- CardFinder class header
// (c) Copyright Schlumberger Technology Corp., unpublished work, created
// 1999. This computer program includes Confidential, Proprietary
// Information and is a Trade Secret of Schlumberger Technology Corp. All
// use, disclosure, and/or reproduction is prohibited unless authorized
// in writing. All Rights Reserved.
#if !defined(SLBCSP_CARDFINDER_H)
#define SLBCSP_CARDFINDER_H
#if defined(_UNICODE)
#if !defined(UNICODE)
#define UNICODE
#endif //!UNICODE
#endif //_UNICODE
#if defined(UNICODE)
#if !defined(_UNICODE)
#define _UNICODE
#endif //!_UNICODE
#endif //UNICODE
#include <string>
#include <memory> // for auto_ptr
#include <windef.h>
#include <scuOsVersion.h>
#include "StResource.h"
#include "HSCardCtx.h"
#include "cspec.h"
#include "HCardCtx.h"
#include "Secured.h"
#include "MultiStrZ.h"
#include "ExceptionContext.h"
#if defined(SLB_NOWIN2K_BUILD)
#define SLBCSP_USE_SCARDUIDLGSELECTCARD 0
#else
#define SLBCSP_USE_SCARDUIDLGSELECTCARD 1
#endif
class CardFinder
: protected ExceptionContext
{
friend class OpenCardCallbackContext; // for Do* routines
public:
// Types
enum DialogDisplayMode
{
ddmNever,
ddmIfNecessary,
ddmAlways
};
// C'tors/D'tors
CardFinder(DialogDisplayMode ddm,
HWND hwnd = 0,
CString const &rsDialogTitle = StringResource(IDS_SEL_SLB_CRYPTO_CARD).AsCString());
virtual
~CardFinder();
// Operators
// Operations
Secured<HCardContext>
Find(CSpec const &rsReader);
// Access
DialogDisplayMode
DisplayMode() const;
HWND
Window() const;
// Predicates
// Static Variables
protected:
// Note: CardFinder uses GetOpenCardName/SCardUIDlgSelect to find
// the card. These routines do not propagate exception thrown by
// the callback routines. To throw these exceptions from
// CardFinder and its derived classes, a set of wrapper callback
// routines Connect, Disconnect and IsValid are defined for
// DoConnect, DoDisconnect, and DoIsValid (repectively) which catch
// exceptions thrown by these Do routines and set the
// CallbackException attribute. When control is returned from
// GetOpenCardName/SCardUIDlgSelect, the DoOnError routine is
// called. If a callback exception still exists, then the
// exception is propagated to the caller of CardFinder class.
// Types
#if !SLBCSP_USE_SCARDUIDLGSELECTCARD
typedef OPENCARDNAME OpenCardNameType;
#else
typedef OPENCARDNAME_EX OpenCardNameType;
#endif
// C'tors/D'tors
// Operators
// Operations
void
CardFound(Secured<HCardContext> const &rshcardctx);
virtual SCARDHANDLE
DoConnect(std::string const &rsSelectedReader);
virtual void
DoDisconnect();
void
DoFind(CSpec const &rcspec);
virtual void
DoOnError();
virtual void
DoProcessSelection(DWORD dwStatus,
OpenCardNameType &ropencardname,
bool &rfContinue);
void
YNPrompt(UINT uID) const;
// Access
CSpec const &
CardSpec() const;
Secured<HCardContext>
CardFound() const;
// Predicates
virtual bool
DoIsValid();
// Variables
private:
// Types
// C'tors/D'tors
// Operators
// Operations
void
CheckFn(LPOCNCHKPROC lpfnCheck);
static SCARDHANDLE __stdcall
Connect(SCARDCONTEXT scardctx,
LPTSTR szReader,
LPTSTR mszCards,
LPVOID lpvUserData);
void
ConnectFn(LPOCNCONNPROC lpfnConnect);
static void __stdcall
Disconnect(SCARDCONTEXT scardctx,
SCARDHANDLE hSCard,
LPVOID lpvUserData);
void
DisconnectFn(LPOCNDSCPROC lpfnDisconnect);
void
OnError();
DWORD
SelectCard(OpenCardNameType &ropcn);
void
UserData(void *pvUserData);
void
WorkaroundOpenCardDefect(OpenCardNameType const &ropcnDlgCtrl,
DWORD &rdwStatus);
// Access
LPOCNCHKPROC
CheckFn() const;
LPOCNDSCPROC
DisconnectFn() const;
// Predicates
static BOOL __stdcall
IsValid(SCARDCONTEXT scardctx,
SCARDHANDLE hSCard,
LPVOID lpvUserData);
// Variables
CString const m_sDialogTitle;
DialogDisplayMode const m_ddm;
HWND const m_hwnd;
std::auto_ptr<MultiStringZ> m_apmszSupportedCards;
OpenCardNameType m_opcnDlgCtrl;
#if SLBCSP_USE_SCARDUIDLGSELECTCARD
OPENCARD_SEARCH_CRITERIA m_opcnCriteria;
CString m_sInsertPrompt;
#endif
CSpec m_cspec;
HSCardContext m_hscardctx;
Secured<HCardContext> m_shcardctx;
};
#endif // SLBCSP_CARDFINDER_H