一个智能卡相关的类 PCSC.txt
### 智能卡与PCSC技术:CPCSC类详解 #### 一、智能卡技术简介 智能卡(Smart Card)是一种集成了微处理器和存储器的卡片,能够进行数据处理和存储,广泛应用于银行金融、身份识别、公共交通、门禁系统等领域。智能卡通过与读写设备进行交互来实现其功能,而这种交互则依赖于一套标准化的协议和技术,其中最著名的就是PC/SC(Personal Computer/Smart Card)标准。 #### 二、PC/SC标准概述 PC/SC标准是由智能卡行业联合制定的一套规范,旨在确保智能卡及其读写设备在个人计算机上的互操作性。该标准定义了智能卡读写器与主机之间通信的API(应用程序接口),使得不同厂商的智能卡和读写设备能够在同一系统上无缝工作。PC/SC标准包括了智能卡读写器的发现、连接、控制以及数据交换等各个方面。 #### 三、CPCSC类解析 在给定的代码片段中,`CPCSC`类是基于PC/SC标准实现的一个智能卡相关的类。下面将对这个类的主要功能进行详细解析: 1. **构造函数与析构函数**: - `CPCSC()`构造函数初始化了两个成员变量`m_hContext`和`m_hCard`,分别代表了智能卡上下文和智能卡句柄。 - `~CPCSC()`析构函数调用`DisConnectCard()`方法,确保智能卡的连接在对象销毁前被断开。 2. **智能卡连接与断开**: - `ConnectCard(char *sReader)`方法用于连接特定的智能卡读写器,参数`sReader`指定了读写器的名称。该方法首先尝试建立智能卡上下文,然后列出所有可用的读写器,并尝试连接指定的读写器。 - `DisConnectCard()`方法用于断开智能卡的连接,释放资源。 3. **智能卡操作**: - `SELECT(IN WORD wFileID, OUT BYTE &byResLen)`:选择智能卡上的文件或应用。 - `STATUS()`:检查智能卡的状态。 - `READ_BINARY(OUT BYTE *ucFile, IN BYTE byLen, IN WORD wOffset)`:从智能卡上读取二进制数据。 - `UPDATE_BINARY(IN BYTE *ucFile, IN BYTE byLen, IN WORD wOffset)`:向智能卡写入二进制数据。 - `READ_RECORD(IN BYTE byRecNo, OUT BYTE *ucData, IN BYTE byRecLen)`:读取智能卡上的记录。 - `UPDATE_RECORD(IN BYTE byRecNo, IN BYTE *ucData, IN BYTE byRecLen)`:更新智能卡上的记录。 - `SEEK(IN BYTE *Patten, IN BYTE byPattenLen)`:在智能卡数据中搜索特定模式。 - `GET_RESPONSE(OUT BYTE *ucResp, IN BYTE byResLen)`:获取智能卡的响应。 - `VERIFY_CHV(IN BYTE byChvNo, IN CHAR *ucChv, IN BYTE byChvLen)`:验证智能卡的个人识别码(PIN)。 - `UNBLOCK_CHV(IN BYTE byChvNo, IN BYTE *ucPuk, IN BYTE byPukLen, IN BYTE *ucChv, IN BYTE byChvLen)`:解锁被锁定的PIN码。 4. **内部实现细节**: - `RunAPDU(IN unsigned char *ucCmd, IN DWORD nCmdLen, OUT unsigned char *ucRes, INOUT DWORD &nResLen)`:这是一个受保护的方法,用于发送和接收APDU(Application Protocol Data Unit)命令,它是智能卡通信的基本单位。 #### 四、总结 `CPCSC`类提供了智能卡操作的全面封装,从智能卡的连接管理到数据读写、状态查询等功能一应俱全。通过对该类的学习,可以深入了解智能卡与PC/SC标准之间的交互机制,为智能卡应用程序开发打下坚实的基础。
#ifndef CPCSC_H_CAESAR__DEF
#define CPCSC_H_CAESAR__DEF
#include <winscard.h>
#pragma comment(lib, "winscard")
//实现了部分在PCSC下的应用。
class CPCSC
{
public:
CPCSC();
virtual ~CPCSC();
bool ConnectCard(char* sReader = NULL);
void DisConnectCard();
//11.11功能实现
bool SELECT(IN WORD wFileID, OUT BYTE& byResLen);
bool STATUS();
bool READ_BINARY(OUT BYTE* ucFile, IN BYTE byLen, IN WORD wOffset);
bool UPDATE_BINARY(IN BYTE* ucFile, IN BYTE byLen, IN WORD wOffset);
bool READ_RECORD(IN BYTE byRecNo, OUT BYTE* ucData, IN BYTE byRecLen);
bool UPDATE_RECORD(IN BYTE byRecNo,IN BYTE* ucData, IN BYTE byRecLen);
bool SEEK(IN BYTE* Patten, IN BYTE byPattenLen);
bool GET_RESPONSE(OUT BYTE* ucResp, IN BYTE byResLen);
bool VERIFY_CHV(IN BYTE byChvNo, IN CHAR* ucChv, IN BYTE byChvLen);
bool UNBLOCK_CHV(IN BYTE byChvNo, IN BYTE* ucPuk, IN BYTE byPukLen, IN BYTE* ucChv, IN BYTE byChvLen);
bool RunAPDU(IN unsigned char* ucCmd, IN DWORD nCmdLen, OUT unsigned char* ucRes, IN OUT DWORD& nResLen);
protected:
SCARDCONTEXT m_hContext; //卡设备上下文
SCARDHANDLE m_hCard; //读卡器句柄
};
#endif
//PCSC.cpp
#include "StdAfx.h"
#include "PCSC.h"
CPCSC::CPCSC()
{
m_hContext = 0;
m_hCard = 0;
}
CPCSC::~CPCSC()
{
DisConnectCard();
}
bool CPCSC::ConnectCard(char* sReader)
{
DisConnectCard();
LONG res;
剩余7页未读,继续阅读
- gmlst20062013-01-24文件不全!!!!!
- 粉丝: 1
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助