发布网友 发布时间:2022-04-26 08:09
共1个回答
热心网友 时间:2022-06-25 16:28
IC卡WINDOWS驱动程序手册一 、IC卡驱动程序是一32位 Windows应用程序调用的动态链接库,文件名为IC32.DLL。 二、 IC32.DLL提供的函数: 注意:以下函数名的大小写必须严格区分,否则无法调用<1>、通用函数: 1.IC_Status() 返回读写器状态 2.IC_ErrMsg() 将错误码转换为错误信息 3.IC_InitComm() 打开串口 4.IC_ExitComm() 关闭串口 5.IC_InitType () 设置要读卡的类型 6.IC_Read () 读IC卡的内容 7.IC_Write () 写内容到IC卡 8.IC_Erase () 对IC卡擦除操作(写FF) 9.IC_Read_Float() 读IC卡存储的浮点数 10.IC_Write_Float() 写浮点数到IC卡<2>、西门子4432/4442卡专用函数: 1.IC_ReadProtection () 读S4432/S4442卡的保护位 2.IC_WriteProtection () 写S4432/S4442卡的保护位 3.IC_ReadCount_SLE4442 () 读S4442卡的错误计数器 4.IC_CheckPass_SLE4442 () 效验S4442卡的密码 5.IC_ChangePass_SLE4442 () 改变S4442卡的密码<3>、西门子4418/4428卡专用函数: 1.IC_ReadWithProtection () 带保护位读S4418/S4428卡 2.IC_WriteWithProtection () 带保护位写S4418/S4428卡 3.IC_ReadCount_SLE4428 () 读S4428卡的错误计数器 4.IC_CheckPass_SLE4428 () 效验S4428卡的密码 5.IC_ChangePass_SLE4428 () 改变S4428卡的密码<4>、ATMEL AT88SC101/102/103卡专用函数: 1. IC_CheckPass_102() 效验ATMEL101/102/103卡的系统密码 2. IC_ChangePass_102() 改变ATMEL101/102/103卡的密码 3. IC_ReadCount_102 () 读ATMEL101/102/103卡的错误计数器 4. IC_Erase_102() 对ATMEL101/102/103卡的擦除操作 5. IC_CheckAZPass_102() 效验ATMEL102卡的应用区密码 6. IC_ChangeAZPass_102() 改变ATMEL102卡的应用区密码 7. IC_Fuse_102 () 烧断ATMEL102卡的熔丝<5>、西门子4406卡(电话卡)专用函数: 1. IC_RValue () 读S4406卡的值 2. IC_DEValue () 减S4406卡的值<6>、ATMEL AT88SC1604卡专用函数: 1. IC_CheckPass_1604() 效验AT88SC1604卡的系统密码 2. IC_ChangePass_1604() 改变AT88SC1604卡的密码 3. IC_ReadCount_1604 () 读AT88SC1604卡的错误计数器 4. IC_Fuse_1604 () 烧断AT88SC1604卡的熔丝<7>、ATMEL AT24C系列卡(非加密卡)专用函数: 1. IC_Write24() 写AT24C卡(用法见IC_Write()函数)三 函数说明 <1>、通用函数: 1. __int16 IC_Status(HANDLE ICDev) 说明:返回当前状态* 调用:HANDLE ICDev ---- InitComm返回的设备描述符 返回:<0 错误,见错误码 =0 正确* 举例:IC_Status(ICDev) 2. __int16 IC_ErrMsg (__int16 ErrNo, unsigned char* ErrMsg) 说明:获取错误信息内容 调用:__int16 ErrNo ---- IC卡操作函数返回的错误号 unsigned char * ErrMsg ---- 错误信息内容 返回:<0 错误。其绝对值为错误号 >=0 ErrMsg的有效长度 举例:IC_ErrMsg(0xee,errmsg) 将0XEE表示的错误信息存入errmsg指定的数据缓冲区。 3. __int16 InitComm(__int16 Port) 说明:打开通讯设备 调用:__int16 Port ---- 通讯口号,整数0,1,2,3 返回:<0 错误 >=0 通讯设备标识符 举例:ICDev=InitComm(0) 打开串口一。 4. __int16 ExitComm(HANDLE ICDev) 说明:关闭通讯设备 调用:HANDLE ICDev ---- InitComm返回的设备描述符 返回:<0 错误 >=0 通讯设备正常关闭 举例:ExitComm(ICDev) 关闭ICDev指定的串口。 5. __int16 IC_InitType (HANDLE ICDev,__int16 TypeNo) 说明:设置卡类型 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 TypeNo ---- 卡类型号 返回:<0 错误。其绝对值为错误号 >=0 操作正确 举例:IC_InitType(HANDLE ICDev,0x20) 设置卡类型为ATMEL102型 6. __int16 IC_Read (HANDLE ICDev,__int16 Offset,__int16 len, unsigned char * DataBuffer) 说明:读取IC卡数据 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 读数据IC卡起始地址 __int16 Len ---- 数据长度 unsigned char * Databuffer ---- 存放数据的缓冲区 返回:<0 错误。其绝对值为错误号 >=0 有效数据长度。表示DataBuffer数据的有效字节数。 举例:IC_Read(ICDev,16,64,DataBuffer) 读取16至79的数据到DataBuffer,正确返回64。 7 __int16 IC_Write (HANDLE ICDev, __int16 Offset,__int16 length, unsigned char* DataBuffer) 说明:写数据到IC卡 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 写IC卡起始地址 __int16 length ---- 数据的长度 unsigned char * Databuffer ---- 即将写入IC卡的数据 并存放返回数据 返回:<0 错误。其绝对值为错误号 >=0 写入数据长度 举例:IC_Write(ICDev,32,14,"IcCard Message") 将IcCard Message写入从32地址开始的数据区。 8. __int16 IC_Erase(HANDLE ICDev,__int16 Offset,__int16 len) 说明:擦除数据,即写十六进制的FF、十进制的255。 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 擦除的起始地址 __int16 len ---- 擦除字节数 返回:<0 错误。其绝对值为错误号 >=0 写入数据长度 举例:IC_Erase(ICDev,24,32) 擦除从绝对偏移址开始的32个字节。 9. __int16 IC_Read_Float(HANDLE ICDev,__int16 Offset,float& fdata) 说明:读一个浮点数,并返回到fdata中。 调用: HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 要读的起始地址 float& fdata ----返回浮点数的地址 返回:<0 错误。其绝对值为错误号 >=0 读入数据长度(应该为4) 举例:IC_Read_Float(ICDev,24,&fdata) 读从绝对偏移址24开始的一个浮点数。 10. __int16 IC_Write_Float(HANDLE ICDev,__int16 Offset,float fdata) 说明: 写一个浮点数到卡中。 调用: HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 要写的起始地址 float fdata ----要写的浮点数. 返回:<0 错误。其绝对值为错误号 >=0 写入数据长度(应该为4) 举例:IC_Write_Float(ICDev,24,&45.67) 从绝对偏移址24开始写一个浮点数。<2>、西门子4432/4442卡专用函数: 1. __int16 IC_ReadProtection (HANDLE ICDev,__int16 Offset,__int16 len,unsigned char* ProtBuffer) 说明:读取IC卡保护位 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 读保护位IC卡起始地址 __int16 Len ---- 数据长度 unsigned char * Databuffer ---- 存放数据的缓冲区 数据值为0表示保护位已置 1表示未置保护 0xFF表示非保护位 返回:<0 错误。其绝对值为错误号 >=0 有效数据长度。表示DataBuffer数据的有效字节数。 举例:IC_ReadProtection(ICDev,0,32,ProtBuffer) 读取地址0~31的保护位数据, ProtBuffer每一字节为0表示对应的保护位已置。 2. __int16 IC_WriteProtection (HANDLE ICDev, __int16 Offset, __int16 len,unsigned char *ProtBuffer) 说明:写IC卡保护位 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 写IC卡保护位起始地址 __int16 len ---- 保护位数 unsigned char *ProtBuffer ---- 要置保护位的数据内容,其内容必须与卡中现存 的内容相同,否则不能置写保护。. 返回:<0 错误。其绝对值为错误号 >=0 写入保护位字节数 举例:ProtBuffer="MWIC" IC_WriteProtection(ICDev,16,4,ProtBuffer) 将16,17,18,19位置保护 3. __int16 IC_ReadCount_SLE4442 (HANDLE ICDev) 说明:读取西门子4442卡密码计数器值 调用:HANDLE ICDev ---- InitComm返回的设备描述符 返回:<0 错误。其绝对值为错误号 >=0 密码计数器计数值。此值表示试密码的机会。 举例:IC_ReadCount_SLE4442(ICDev) 4. __int16 IC_CheckPass_SLE4442 (HANDLE ICDev, unsigned char* Password) 说明:校验密码(用于SLE4442型) 是IC_CheckPass的宏 调用:HANDLE ICDev ---- InitComm返回的设备描述符 unsigned char * Password ---- 卡密码 3字节 返回:<0 错误。其绝对值为错误号 >=0 校验密码正确 举例:IC_CheckPass_SLE4442(ICDev,"111") 校验卡密码为111。 5. __int16 IC_ChangePass_SLE4442 (HANDLE ICDev, unsigned char* Password) 说明:更改密码(用于SLE4442型) 调用:HANDLE ICDev ---- InitComm返回的设备描述符 unsigned char * Password ---- 新密码 3字节 返回:<0 错误。其绝对值为错误号 >0 更改密码正确 举例:IC_ChangePass_SLE4442(ICDev,"222") 将密码改为222。<3>、西门子4418/4428卡专用函数: 1. __int16 IC_ReadWithProtection (HANDLE ICDev,__int16 Offset,__int16 len,unsigned char* ProtBuffer) 说明:带保护位读IC卡。 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 读保护位IC卡起始地址 __int16 Len ---- 数据长度 unsigned char * ProtBuffer ---- 存放数据的缓冲区 此缓冲区包括两部分内容: 第一部分为卡中的数据,长度为Len所表示的长度;第二部分为相应的保护位内容, "0"表示保护位已置,"1"表示未置保护,第二部分从偏移址Len开始,也是Len个字节。 返回:<0 错误。其绝对值为错误号 >=0 有效数据长度。表示ProtBuffer数据的有效字节数。 举例:IC_ReadWithProtection(ICDev,0,32,ProtBuffer) 读取地址0~31的数据和其相应的保护位,ProtBuffer的0-31个字节为卡中数据, 从第32位开始ProtBuffer每一字节为"0"表示对应的保护位已置。 注意:ProtBuffer所指缓冲区的长度必须为2*Len,否则将导致不可预料的错误。 2. __int16 IC_WriteWithProtection (HANDLE ICDev, __int16 Offset, __int16 len,unsigned char *ProtBuffer) 说明:写IC卡的同时置保护位 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 写IC卡保护位起始地址 __int16 len ---- 保护位数 unsigned char *ProtBuffer ---- 要置保护位的数据内容 返回:<0 错误。其绝对值为错误号 >=0 写入保护位字节数 举例:ProtBuffer="LKIC" IC_WriteWithProtection(ICDev,16,4,ProtBuffer) 对16,17,18,19位写入"LKIC"并置写保护 3. __int16 IC_ReadCount_SLE4428 (HANDLE ICDev) 说明:读取西门子4428卡密码计数器值 调用:HANDLE ICDev ---- InitComm返回的设备描述符 返回:<0 错误。其绝对值为错误号 >=0 密码计数器计数值。此值表示试密码的机会。 举例:IC_ReadCount_SLE4428(ICDev) 4. __int16 IC_CheckPass_SLE4428 (HANDLE ICDev, unsigned char* Password) 说明:校验密码(用于SLE4428型) 是IC_CheckPass的宏 调用:HANDLE ICDev ---- InitComm返回的设备描述符 unsigned char * Password ---- 卡密码 2字节 返回:<0 错误。其绝对值为错误号 >=0 校验密码正确 举例:IC_CheckPass_SLE4428(ICDev,"11") 校验卡密码为11。 5. __int16 IC_ChangePass_SLE4428 (HANDLE ICDev, unsigned char* Password) 说明:更改密码(用于SLE4428型) 调用:HANDLE ICDev ---- InitComm返回的设备描述符 unsigned char * Password ---- 新密码 2字节 返回:<0 错误。其绝对值为错误号 >0 更改密码正确 举例:IC_ChangePass_SLE4442(ICDev,"22") 将密码改为22。 <4>、ATMEL AT88SC101/102/103卡专用函数: 1. __int16 IC_CheckPass_102(HANDLE ICDev,unsigned char* Password) 说明:校验密码(用于102型) 调用:HANDLE ICDev ---- InitComm返回的设备描述符 unsigned char * Password ---- 卡密码 2字节 返回:<0 错误。其绝对值为错误号 >=0 校验密码正确 举例:IC_CheckPass_102(ICDev,"11") 校验卡密码11。 2. __int16 IC_ChangePass_102(HANDLE ICDev,unsigned char* Password) 说明:更改密码(用于102型) 调用:HANDLE ICDev ---- InitComm返回的设备描述符 unsigned char * Password ---- 新密码 2字节 返回:<0 错误。其绝对值为错误号 >0 更改密码正确 举例:IC_ChangePass_102(ICDev,"22") 将卡密码改为22。 3. __int16 IC_ReadCount_102 (HANDLE ICDev) 说明:读取102卡密码计数器值 调用:HANDLE ICDev ---- InitComm返回的设备描述符 返回:<0 错误。其绝对值为错误号 >=0 密码计数器计数值。此值表示试密码的机会。 举例:IC_ReadCount_102(ICDev) 4. __int16 IC_Erase_102(HANDLE ICDev,__int16 Offset,__int16 len) 说明:擦除数据(102型),用于烧熔丝之前的卡 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Offset ---- 擦除的起始地址(必须是偶数) __int16 len ---- 擦除字节数(必须是偶数) 返回:<0 错误。其绝对值为错误号 >=0 写入数据长度 举例:IC_Erase_102(ICDev,24,32) 擦除从绝对偏移址开始的32个字节。 5. __int16 IC_CheckAZPass_102(HANDLE ICDev,__int16 Zone, unsigned char* Password) 说明:校验应用区密码(102卡),用于烧熔丝后的卡。 如果密码正确,将擦除该区的数据,即全部置为"FF" 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Zone ---- 102卡的应用区号 unsigned char * Password ---- 应用区密码 应用区一的擦除密码为六个字节,从偏移址86开始,缺省为16进制FFFFFFFFFFFF; 应用区二的擦除密码为四个字节,从偏移址156开始,缺省为16进制FFFFFFFF。 返回:<0 错误。其绝对值为错误号 >=0 操作成功,但并不表示密码正确,只有检查是否擦除才能判断。 举例:IC_CheckAZPass_102(ICDev,1,"111111") 校验应用区一,密码为"111111"。 6. __int16 IC_ChangeAZPass_102(HANDLE ICDev,__int16 Zone, unsigned char* Password) 说明:更改应用区密码(102卡),烧熔丝前密码可改 是IC_ChangePass的宏 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 Zone ---- 102卡的应用区号 unsigned char * Password ---- 应用区密码 应用区一的擦除密码为六个字节,从偏移址86开始,缺省为16进制FFFFFFFFFFFF; 应用区二的擦除密码为四个字节,从偏移址156开始,缺省为16进制FFFFFFFF。 返回:<0 错误。其绝对值为错误号 >=0 操作成功 举例:IC_ChangeAZPass_102(ICDev,1,"222222") 将应用区一的密码改为"222222"。 7. __int16 IC_Fuse_102 (HANDLE ICDev) 说明:烧102卡的熔丝* 调用:HANDLE ICDev ---- InitComm返回的设备描述符 返回:<0 错误。其绝对值为错误号 =0 正确 举例:IC_Fuse_102(ICDev) <5>、西门子4406卡(电话卡)专用函数: 1. __int16 IC_RValue(HANDLE ICDev) 说明:读S4406卡的值 调用:HANDLE ICDev ---- InitComm返回的设备描述符 返回:<0 错误,见错误码 >=0 卡中剩下的值 举例:IC_RValue(ICDev) 2. __int16 IC_DEValue(HANDLE ICDev,__int16 num) 说明:减S4406卡的值 调用:HANDLE ICDev ---- InitComm返回的设备描述符 __int16 num ---- 要减的值 返回:<0 错误,见错误码 =0 正确 举例:IC_DEValue(ICDev,1) 将S4406卡的值减"1". <6>、ATMEL 1604卡专用函数: 1. __int16 IC_CheckPass_1604(HANDLE ICDev,__int16 Area,unsigned char* Password) 说明:校验密码(用于1604型) 调用:HANDLE ICDev ---- InitComm返回的设备描述符 Area:为要效验的密码类型, 0: 卡的总密码 1: AT88SC1604卡第一区的密码 2: AT88SC1604卡第二区的密码 3: AT88SC1604卡第三区的密码 4: AT88SC1604卡第四区的密码 11: AT88SC1604卡第一区的擦除密码 12: AT88SC1604卡第二区的擦除密码 13: AT88SC1604卡第三区的擦除密码 14: AT88SC1604卡第四区的擦除密码 unsigned char * Password ---- 卡密码 2字节 返回:<0 错误。其绝对值为错误号 >=0 效验密码正确 举例:IC_CheckPass_1604(ICDev,0,"11") 效验卡密码为"11"。 2. __int16 IC_ChangePass_1604(HANDLE ICDev,__int16 Area,unsigned char* Password) 说明:改变密码(用于1604型) 调用:HANDLE ICDev ---- InitComm返回的设备描述符 Area:为要改变的密码类型, 0: 卡的总密码 1: AT88SC1604卡第一区的密码 2: AT88SC1604卡第二区的密码 3: AT88SC1604卡第三区的密码 4: AT88SC1604卡第四区的密码 11: AT88SC1604卡第一区的擦除密码 12: AT88SC1604卡第二区的擦除密码 13: AT88SC1604卡第三区的擦除密码 14: AT88SC1604卡第四区的擦除密码 unsigned char * Password ---- 卡密码 2字节 返回:<0 错误。其绝对值为错误号 >=0 改变密码正确 举例:IC_CheckPass_1604(ICDev,0,"22") 改变密码为“22”。 3. __int16 IC_ReadCount_1604 (HANDLE ICDev,__int16 area) 说明:读取102卡密码计数器值 调用:HANDLE ICDev ---- InitComm返回的设备描述符 Area:为要读错误计数的类型, 0: 卡的总密码错误计数 1: AT88SC1604卡第一区的密码错误计数 11: AT88SC1604卡第一区的擦除密码错误计数 12: AT88SC1604卡第二区的擦除密码错误计数 13: AT88SC1604卡第三区的擦除密码错误计数 14: AT88SC1604卡第四区的擦除密码错误计数 返回:<0 错误。其绝对值为错误号 >=0 密码计数器计数值。此值表示试密码的机会。 举例:IC_ReadCount_1604(ICDev,0) 4. __int16 IC_Fuse_1604 (HANDLE ICDev) 说明:烧1604卡的熔丝* 调用:HANDLE ICDev ---- InitComm返回的设备描述符 返回:<0 错误。其绝对值为错误号 =0 正确 举例:IC_Fuse_1604(ICDev)三、错误信息参考 0x80(128) IC卡或硬件出错 0x82(130) 通讯出错 0x83(131) 密码校验错 0x84(132) IC卡读出错 0x86(134) 没有插卡或卡没有插好 0xEE(238) 通讯超时 0xE1(225) 接收通讯错误 0xE2(226) 发送通讯错误 0x01(001) 其它IC卡操作错误 0xFF(255) 其它IC卡操作错误四、卡类型代码参考 0x02 西门子4406系列 0x04 西门子4418/4428系列 0x08 西门子4404系列 0x10 西门子4432/4442系列 0x20 ATMEL AT88SC101/102/103系列 0x40 ATMEL AT24C01A/02/04/08/16系列五、几种常用IC卡的初始密码AT88SC102 用户密码(SECURITY CODE):F0F0 应用区1擦除密码(EREASE CODE 1):FF FF FF FF FF FF 应用区2擦除密码(EREASE CODE 2):FF FF FF FFAT88SC1604 用户密码(SECURITY CODE):F0F0 第一区的密码 第二区的密码 第三区的密码 第四区的密码 第一区的擦除密码 第二区的擦除密码 第三区的擦除密码 第四区的擦除密码 以上密码全部为: FF FFSLE4442 用户密码(SECURITY CODE):FF FF FFSLE4428 用户密码(SECURITY CODE):FF FFSLE4404 用户密码(SECURITY CODE):55 55 擦除密码(EREASE CODE):FFFFFF以上密码均为16进制数。