| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #ifndef CPCSCCALL_H
- #define CPCSCCALL_H
- #include "public.h"
- typedef LONG SCARDCONTEXT;
- typedef LONG SCARDHANDLE;
- #define MAX_ATR_SIZE 33 /**< Maximum ATR size */
- #define SCARD_S_SUCCESS 0
- /* 说明:
- * 静态加载pcsc会造成函数冲突,必须改成动态加载
- * PCSC的DWORD定义为 unsigned long,实际为8字节,本系统定义的DWORD为标准4字节,定义不一致,必须更改函数声明的类型,原pcsc中DWORD相关定义均修改为ULONG
- */
- #define DATA_IN_ERROR -3
- #define STATE_ERROR -2
- #define STATE_NO_READER -1
- #define STATE_NO_CARD 0
- #define STATE_HAVE_CARD 1
- #define STATE_CONNECTED 2
- typedef struct
- {
- const char *szReader;
- void *pvUserData;
- ULONG dwCurrentState;
- ULONG dwEventState;
- ULONG cbAtr;
- unsigned char rgbAtr[MAX_ATR_SIZE];
- }
- SCARD_READERSTATE, *LPSCARD_READERSTATE;
- typedef struct
- {
- unsigned long dwProtocol; /**< Protocol identifier */
- unsigned long cbPciLength; /**< Protocol Control Inf Length */
- }
- SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
- typedef LONG (*pSCardEstablishContext)(LONG, LPVOID, LPVOID, LONG*);
- typedef LONG (*pSCardListReaders)(LONG hContext, LPCSTR mszGroups, LPSTR mszReaders, ULONG* pcchReaders);
- typedef LONG (*pSCardCancel)(SCARDCONTEXT hContext);
- typedef LONG (*pSCardReleaseContext)(SCARDCONTEXT hContext);
- typedef LONG (*pSCardIsValidContext)(SCARDCONTEXT hContext);
- typedef LONG (*pSCardConnect)(SCARDCONTEXT hContext, LPCSTR szReader, ULONG dwShareMode, ULONG dwPreferredProtocols, SCARDHANDLE* phCard, ULONG* pdwActiveProtocol);
- typedef LONG (*pSCardDisconnect)(SCARDHANDLE hCard, ULONG dwDisposition);
- typedef LONG (*pSCardGetStatusChange)(SCARDCONTEXT hContext, ULONG dwTimeout, LPSCARD_READERSTATE rgReaderStates, ULONG cReaders);
- typedef LONG (*pSCardStatus)(SCARDHANDLE hCard, LPSTR mszReaderName, ULONG* pcchReaderLen, ULONG* pdwState, ULONG* pdwProtocol, LPBYTE pbAtr, ULONG* pcbAtrLen);
- typedef LONG (*pSCardTransmit)(SCARDHANDLE hCard, const SCARD_IO_REQUEST *pioSendPci, LPBYTE pbSendBuffer, ULONG cbSendLength, SCARD_IO_REQUEST *pioRecvPci, LPBYTE pbRecvBuffer, ULONG* pcbRecvLength);
- typedef LONG (*pSCardControl)(SCARDHANDLE hCard, ULONG dwControlCode, const VOID* pbSendBuffer, ULONG cbSendLength, VOID* pbRecvBuffer, ULONG cbRecvLength, ULONG* lpBytesReturned);
- class PcscCall
- {
- public:
- PcscCall();
- bool Load();
- bool Open(const char* sName);
- bool Close();
- int GetState();
- bool Connect(char* sATR, int& iLen);
- bool DicConnect();
- int ChipIO(const char* sIn, char* sOut);
- int SendCMD(const char* sIn, char* sOut);
- const char* GetErrInfo(){return m_sErrInfo;};
- protected:
- pSCardEstablishContext SCardEstablishContext;
- pSCardListReaders SCardListReaders;
- pSCardCancel SCardCancel;
- pSCardReleaseContext SCardReleaseContext;
- pSCardIsValidContext SCardIsValidContext;
- pSCardConnect SCardConnect;
- pSCardDisconnect SCardDisconnect;
- pSCardGetStatusChange SCardGetStatusChange;
- pSCardStatus SCardStatus;
- pSCardTransmit SCardTransmit;
- pSCardControl SCardControl;
- char m_sErrInfo[256];
- char m_sReadName[64];
- SCARDCONTEXT m_hContext;
- SCARDHANDLE m_hCurCard;
- ULONG m_APrtocol;
- };
- #endif // CPCSCCALL_H
|