📄 usbmicard.cpp
字号:
{
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[3],RevBuf[7],i,check=0;
BOOL status;
SendBuf[0]=0xAB;
SendBuf[1]=0x00;
SendBuf[2]=0xAB;
status=Communicate(RevBuf,7,SendBuf,3);
if(status)
{
for(i=0;i<6;i++)
check^=RevBuf[i];
if(check==RevBuf[6] && RevBuf[0]==0x00 && RevBuf[1]==0x04)
{
*CardSN=RevBuf[2]+RevBuf[3]*256+RevBuf[4]*256*256+RevBuf[5]*256*256*256;
return 0;
}
else
return 1;
}
else
return 1;
}
MI_CARD_API long WINAPI SelectCard(unsigned long CardSN)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[7],RevBuf[3];
BOOL status;
unsigned long Card_Sn;
Card_Sn=CardSN;
SendBuf[0]=0xB7;
SendBuf[1]=0x04;
SendBuf[2]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[3]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[4]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[5]=(BYTE)Card_Sn;
SendBuf[6]=SendBuf[0]^SendBuf[1]^SendBuf[2]^SendBuf[3]^SendBuf[4]^SendBuf[5];
status=Communicate(RevBuf,3,SendBuf,7);
if(status)
{
if( RevBuf[0]==0x00 && RevBuf[1]==0x00 && RevBuf[2]==0x00)
{
return 0;
}
else
return 1;
}
else
return 1;
}
MI_CARD_API long WINAPI CardAuthern(unsigned char ModeSN,unsigned char SectorSN,unsigned char BlockSN)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[6],RevBuf[3];
BOOL status;
SendBuf[0]=0xb8;
SendBuf[1]=0x03;
SendBuf[2]=ModeSN;
SendBuf[3]=SectorSN;
SendBuf[4]=BlockSN;
SendBuf[5]=SendBuf[0]^SendBuf[1]^SendBuf[2]^SendBuf[3]^SendBuf[4];
status=Communicate(RevBuf,3,SendBuf,6);
if(status)
{
if( RevBuf[0]==0x00 && RevBuf[1]==0x00 && RevBuf[2]==0x00)
{
return 0;
}
else
return 1;
}
else
return 1;
}
MI_CARD_API long WINAPI HaltCard()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[3],RevBuf[3];
BOOL status;
SendBuf[0]=0xBD;
SendBuf[1]=0x00;
SendBuf[2]=0xBD;
status=Communicate(RevBuf,3,SendBuf,3);
if(status)
{
if( RevBuf[0]==0x00 && RevBuf[1]==0x00 && RevBuf[2]==0x00)
{
return 0;
}
else
return 1;
}
else
return 1;
}
// MI_CARD_API long WINAPI TransKey(unsigned char sector , BYTE *mima)
MI_CARD_API long FAR PASCAL MifUSB_TransKey(BYTE nSector , BYTE *sKey)
{
return(MifareTransKey(nSector, sKey));
/*
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[10],RevBuf[3],i,check=0;
BOOL status;
SendBuf[0]=0xA4;
SendBuf[1]=0x07;
SendBuf[2]=sector;
// SendBuf[2]=*sector;
for(i=3;i<9;i++)
SendBuf[i]=(BYTE)nKey[i-3];
for(i=0;i<9;i++)
check^=SendBuf[i];
SendBuf[9]=check;
status=Communicate(RevBuf,3,SendBuf,10);
if(status)
{
if(RevBuf[0]==0x00 && RevBuf[1]==0x00 && RevBuf[2]==0x00)
return 0;
else
return 1;
}
else
return 1;
*/
}
MI_CARD_API long FAR PASCAL TransKey(unsigned char sector , unsigned char *mima)
{
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[10],RevBuf[3],i,check=0;
BOOL status;
SendBuf[0]=0xA4;
SendBuf[1]=0x07;
SendBuf[2]=sector;
// SendBuf[2]=*sector;
for(i=3;i<9;i++)
SendBuf[i]=(BYTE)mima[i-3];
for(i=0;i<9;i++)
check^=SendBuf[i];
SendBuf[9]=check;
status=Communicate(RevBuf,3,SendBuf,10);
if(status)
{
if(RevBuf[0]==0x00 && RevBuf[1]==0x00 && RevBuf[2]==0x00)
return 0;
else
return 1;
}
else
return 1;
}
MI_CARD_API long WINAPI WriteKey(unsigned char * sector,unsigned long CardSN,unsigned char * mode ,unsigned char *mima)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[25],RevBuf[3],i,check=0;
BOOL status;
unsigned long Card_Sn;
Card_Sn=CardSN;
SendBuf[0]=0xae;
SendBuf[1]=0x16;
SendBuf[2]=*sector;
SendBuf[3]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[4]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[5]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[6]=(BYTE)Card_Sn;
for(i=7;i<23;i++)
SendBuf[i]=mima[i-7];
SendBuf[23]=*mode;
for(i=0;i<24;i++)
check=check^SendBuf[i];
SendBuf[24]=check;
status=Communicate(RevBuf,3,SendBuf,25);
if(status)
{
if(RevBuf[0]==0x00 && RevBuf[1]==0x00 && RevBuf[2]==0x00)
{
return 0;
}
else
return 1;
}
else
return 1;
}
MI_CARD_API long WINAPI ReadValue(unsigned long BlockSN,unsigned long CardSN,unsigned char mode, long *value)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[9],RevBuf[7],i,check=0;
BOOL status;
unsigned long Card_Sn;
Card_Sn=CardSN;
SendBuf[0]=0xaf;
SendBuf[1]=0x06;
SendBuf[2]=(BYTE)BlockSN;
SendBuf[3]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[4]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[5]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[6]=(BYTE)Card_Sn;
SendBuf[7]=mode;
SendBuf[8]=SendBuf[0]^SendBuf[1]^SendBuf[2]^SendBuf[3]^SendBuf[4]^SendBuf[5]^SendBuf[6]^SendBuf[7];
status=Communicate(RevBuf,7,SendBuf,9);
if(status)
{
for(i=0;i<6;i++)
check^=RevBuf[i];
if(check==RevBuf[6] && RevBuf[0]==0x00 && RevBuf[1]==0x04 && RevBuf[6]==check)
{
*value=RevBuf[2]+RevBuf[3]*256+RevBuf[4]*256*256+RevBuf[5]*256*256*256;
return 0;
}
else
return 1;
}
else
return 1;
}
MI_CARD_API long WINAPI WriteValue(unsigned long BlockSN,unsigned long CardSN,unsigned char mode, long *value,long *Realvalue)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[13],RevBuf[7],i,check=0;
long Wvalue,Rvalue;
unsigned long Card_Sn;
Card_Sn=CardSN;
BOOL status;
SendBuf[0]=0xb0;
SendBuf[1]=0x0a;
SendBuf[2]=(BYTE)BlockSN;
SendBuf[3]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[4]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[5]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[6]=(BYTE)Card_Sn;
Wvalue=*value;
SendBuf[7]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[8]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[9]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[10]=(BYTE)Wvalue;
SendBuf[11]=mode;
for(i=0;i<12;i++)
check^=SendBuf[i];
SendBuf[12]=check;
status=Communicate(RevBuf,7,SendBuf,13);
if(status)
{
check=0;
for(i=0;i<6;i++)
check^=RevBuf[i];
if(check==RevBuf[6] && RevBuf[0]==0x00 && RevBuf[1]==0x04)
{
Rvalue=RevBuf[2]+RevBuf[3]*256+RevBuf[4]*256*256+RevBuf[5]*256*256*256;
if(Rvalue!=*value)
return 1;
*Realvalue=Rvalue;
return 0;
}
else
return 1;
}
else
return 1;
}
MI_CARD_API long WINAPI IncrementValue(unsigned long BlockSN,unsigned long CardSN, unsigned char mode,long *value,long *Realvalue)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[13],RevBuf[7],i,check=0;
long Wvalue,Rvalue;
unsigned long Card_Sn;
Card_Sn=CardSN;
BOOL status;
SendBuf[0]=0xb1;
SendBuf[1]=0x0a;
SendBuf[2]=(BYTE)BlockSN;
SendBuf[3]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[4]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[5]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[6]=(BYTE)Card_Sn;
Wvalue=*value;
SendBuf[7]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[8]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[9]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[10]=(BYTE)Wvalue;
SendBuf[11]=mode;
for(i=0;i<12;i++)
check^=SendBuf[i];
SendBuf[12]=check;
status=Communicate(RevBuf,7,SendBuf,13);
if(status)
{
check=0;
for(i=0;i<6;i++)
check^=RevBuf[i];
if(check==RevBuf[6] && RevBuf[0]==0x00 && RevBuf[1]==0x04)
{
Rvalue=RevBuf[2]+RevBuf[3]*256+RevBuf[4]*256*256+RevBuf[5]*256*256*256;
if(Rvalue!=*value)
return 1;
*Realvalue=Rvalue;
return 0;
}
else
return 1;
}
else
return 1;
}
MI_CARD_API long WINAPI DecrementValue(unsigned long BlockSN,unsigned long CardSN, unsigned char mode,long *value,long *Realvalue)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[13],RevBuf[7],i,check=0;
long Wvalue,Rvalue;
unsigned long Card_Sn;
Card_Sn=CardSN;
BOOL status;
SendBuf[0]=0xb2;
SendBuf[1]=0x0a;
SendBuf[2]=(BYTE)BlockSN;
SendBuf[3]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[4]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[5]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[6]=(BYTE)Card_Sn;
Wvalue=*value;
SendBuf[7]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[8]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[9]=(BYTE)Wvalue%256;
Wvalue=Wvalue/256;
SendBuf[10]=(BYTE)Wvalue;
SendBuf[11]=mode;
for(i=0;i<12;i++)
check^=SendBuf[i];
SendBuf[12]=check;
status=Communicate(RevBuf,7,SendBuf,13);
if(status)
{
check=0;
for(i=0;i<6;i++)
check^=RevBuf[i];
if(check==RevBuf[6] && RevBuf[0]==0x00 && RevBuf[1]==0x04)
{
Rvalue=RevBuf[2]+RevBuf[3]*256+RevBuf[4]*256*256+RevBuf[5]*256*256*256;
if(Rvalue!=*value)
return 1;
*Realvalue=Rvalue;
return 0;
}
else
return 1;
}
else
return 1;
}
MI_CARD_API LPSTR WINAPI TestString(int nSector, int nBlock)
{
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
char szBuf[255];
wsprintf(szBuf,"sector=%02d - 12345ABCDE67890FGHIJ12345KLMNO - block=%02d", nSector, nBlock);
return(szBuf);
}
// MI_CARD_API long WINAPI ReadBlock(int BlockSN,unsigned long CardSN,int mode, unsigned char *RevDat)
MI_CARD_API LPSTR FAR PASCAL MifUSB_ReadBlock(BYTE nBlock, unsigned long cSN, BYTE nMode)
{
int nRet;
int nErr=0;
BYTE iBuf[255];
char szBuf[255];
if(nMode < 0 || nMode > 1) {
wsprintf(szBuf,"INVALID MODE");
nErr=1;
}
if(CurrentCardType==0x04){
// Mifare 1K
if(nBlock < 0 || nBlock > 63) {
wsprintf(szBuf,"INVALID BLOCK");
nErr=1;
}
}
else if(CurrentCardType==0x02){
// Mifare 4K
if(nBlock < 0 || nBlock > 255) {
wsprintf(szBuf,"INVALID BLOCK");
nErr=1;
}
}
else nErr=1;
if(nErr==0){
nRet=MifareReadBlock(nBlock, cSN, nMode, iBuf);
if(nRet==0){
wsprintf(szBuf,"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
(BYTE *)iBuf[0],(BYTE *)iBuf[1],(BYTE *)iBuf[2],(BYTE *)iBuf[3],
(BYTE *)iBuf[4],(BYTE *)iBuf[5],(BYTE *)iBuf[6],(BYTE *)iBuf[7],
(BYTE *)iBuf[8],(BYTE *)iBuf[9],(BYTE *)iBuf[10],(BYTE *)iBuf[11],
(BYTE *)iBuf[12],(BYTE *)iBuf[13],(BYTE *)iBuf[14],(BYTE *)iBuf[15]);
}
else{
wsprintf(szBuf,"NAK");
}
}
return(szBuf);
}
MI_CARD_API LPSTR FAR PASCAL MifUSB_ReadBlockEx(BYTE nSector, BYTE nBlock, unsigned long sSN, BYTE nMode, BYTE *sKey)
{
int nRet;
int nErr=0;
BYTE bBlock;
BYTE iBuf[255];
char szBuf[255];
if(CurrentCardType==0x04){
if((nSector < 0) || (nSector > 15)){
wsprintf(szBuf,"INVALID SECTOR");
nErr=1;
}
}
else if(CurrentCardType==0x02){
if((nSector < 0) || (nSector > 39)){
wsprintf(szBuf,"INVALID SECTOR");
nErr=1;
}
}
if(nErr==0){
if(MifareTransKey(nSector, sKey)){
wsprintf(szBuf,"INVALID KEY");
}
else{
if(nMode < 0 || nMode > 1) {
wsprintf(szBuf,"INVALID MODE");
nErr=1;
}
if(CurrentCardType==0x04){
// Mifare 1K
if(nBlock < 0 || nBlock > 3) {
wsprintf(szBuf,"INVALID BLOCK");
nErr=1;
}
}
else if(CurrentCardType==0x02){
// Mifare 4K
if(nSector < 32){
if(nBlock < 0 || nBlock > 3) {
wsprintf(szBuf,"INVALID BLOCK");
nErr=1;
}
}
else{
if(nBlock < 0 || nBlock > 15) {
wsprintf(szBuf,"INVALID BLOCK");
nErr=1;
}
}
}
if(nErr==0){
if(nSector > 31){
bBlock = (32 * 4) + (((nSector - 32) * 16) + nBlock);
}
else{
bBlock = nSector * 4 + nBlock;
}
nRet=MifareReadBlock(bBlock, sSN, nMode, iBuf);
if(nRet==0){
wsprintf(szBuf,"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
(BYTE *)iBuf[0],(BYTE *)iBuf[1],(BYTE *)iBuf[2],(BYTE *)iBuf[3],
(BYTE *)iBuf[4],(BYTE *)iBuf[5],(BYTE *)iBuf[6],(BYTE *)iBuf[7],
(BYTE *)iBuf[8],(BYTE *)iBuf[9],(BYTE *)iBuf[10],(BYTE *)iBuf[11],
(BYTE *)iBuf[12],(BYTE *)iBuf[13],(BYTE *)iBuf[14],(BYTE *)iBuf[15]);
}
else{
wsprintf(szBuf,"NAK");
}
}
}
}
return(szBuf);
}
int MifareReadBlock(BYTE nBlock, unsigned long sSN, BYTE nMode, BYTE *RevDat)
{
BYTE SendBuf[9],RevBuf[19],i,check=0;
BOOL status;
unsigned long Card_Sn;
SendBuf[0]=0xAC;
SendBuf[1]=0x06;
SendBuf[2]=nBlock;
Card_Sn=sSN;
SendBuf[3]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[4]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[5]=(BYTE)Card_Sn%256;
Card_Sn=Card_Sn/256;
SendBuf[6]=(BYTE)Card_Sn;
SendBuf[7]=nMode;
for(i=0;i<8;i++)
check^=SendBuf[i];
SendBuf[8]=check;
status=Communicate(RevBuf,19,SendBuf,9);
if(status)
{
check=0;
for(i=0;i<18;i++)
check^=RevBuf[i];
if(check==RevBuf[18] && RevBuf[0]==0x00 && RevBuf[1]==0x10)
{
for(i=2;i<18;i++)
RevDat[i-2]= RevBuf[i];
return 0;
}
else
return 1;
}
else
return 1;
}
int MifareGetSN(void)
{
BYTE SendBuf[3],RevBuf[7],i,check=0;
BOOL status;
SendBuf[0]=0xAB;
SendBuf[1]=0x00;
SendBuf[2]=0xAB;
status=Communicate(RevBuf,7,SendBuf,3);
if(status)
{
for(i=0;i<6;i++)
check^=RevBuf[i];
if(check==RevBuf[6] && RevBuf[0]==0x00 && RevBuf[1]==0x04)
{
*szCardSN=RevBuf[2]+RevBuf[3]*256+RevBuf[4]*256*256+RevBuf[5]*256*256*256;
return 0;
}
else
return 1;
}
else
return 1;
}
// int MifareTransKey(int nSector , LPSTR sKey)
int MifareTransKey(BYTE nSector , BYTE *sKey)
{
BYTE SendBuf[10],RevBuf[3],i,check=0;
BOOL status;
if(CurrentCardType==0x04){
// Mifare 1K
if((nSector < 0) || (nSector > 15))
return(1);
}
else if(CurrentCardType==0x02){
// Mifare 4K
if((nSector < 0) || (nSector > 39))
return(1);
}
else return(1);
SendBuf[0]=0xA4;
SendBuf[1]=0x07;
SendBuf[2]=nSector;
for(i=3;i<9;i++)
SendBuf[i]=sKey[i-3];
for(i=0;i<9;i++)
check^=SendBuf[i];
SendBuf[9]=check;
status=Communicate(RevBuf,3,SendBuf,10);
if(status)
{
if(RevBuf[0]==0x00 && RevBuf[1]==0x00 && RevBuf[2]==0x00)
return 0;
else
return 1;
}
else
return 1;
}
// MI_CARD_API long WINAPI WriteBlock(int BlockSN,unsigned long CardSN,int mode, LPSTR SendDat)
MI_CARD_API long FAR PASCAL MifUSB_WriteBlock(BYTE nBlock, unsigned long sSN, BYTE nMode, BYTE *SendDat)
{
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
BYTE SendBuf[25],RevBuf[19],RevDat[16],i,check=0;
BOOL status;
unsigned long Card_Sn;
int nErr=0;
if(nMode < 0 || nMode > 1) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -