?? keyexport.cpp
字號:
/*===========================================================================
===========================================================================
說明:
通用函數 支持平臺:WIN98/2K/XP...
文件名:
Epass3000Export.cpp
---------------------------------------------------------------------------
描述:
封裝接口
---------------------------------------------------------------------------
修改:
*===========================================================================*/
#include "StdAfx.h"
#include "KeyCommon.h"
#include "DeviceList.h"
#include "KeyExport.h"
static char g_szErrInfo[512] = {0};
DWORD g_dwErrCode = 0;
int WINAPI CK_GetDeviceNumber()
{
DWORD dCount = 0;
ULONG ulErrorCode = GetDeviceListHandle().GetSlotCount(dCount);
if ( ulErrorCode != CKR_OK )
{
sprintf(g_szErrInfo,"取設備列表出錯,ErrorCode:0x%x",ulErrorCode);
g_dwErrCode = ulErrorCode;
}
return (ulErrorCode == CKR_OK) ? dCount : -1;
}
int WINAPI CK_GetDeviceSerialNumber(CK_SLOT_ID ckSlotID,char *szSN)
{
int idex, iLen;
ULONG ulErrorCode = CKR_OK;
BYTE cbserialNumber[17] = {0};
CK_TOKEN_INFO ckTokenInfo = {0};
ulErrorCode = GetDeviceListHandle().GetTokenInfo(ckSlotID, &ckTokenInfo);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
CopyMemory(cbserialNumber, ckTokenInfo.serialNumber, 16);
for(idex = ARRAYSIZEOF(cbserialNumber) - 1; idex > 0; idex--)
{
if(cbserialNumber[idex] == 0x20)
{
cbserialNumber[idex] = '\0';
continue;
}
else
break;
}
iLen = idex + 1;
CopyMemory(szSN, cbserialNumber, iLen);
end:
if ( ulErrorCode != CKR_OK )
{
sprintf(g_szErrInfo,"取設備序列號出錯,ErrorCode:0x%x",ulErrorCode);
g_dwErrCode = ulErrorCode;
}
return (ulErrorCode == CKR_OK) ? USBKEY_OK : USBKEY_FAILED;
}
int WINAPI CK_CreateFile(CK_SLOT_ID ckSlotID,char *szUserPwd,DWORD dwFileID,DWORD dwFileSize)
{
BOOL bLoged;
CK_USER_TYPE ulType;
ULONG ulErrorCode = CKR_OK;
char strFileName[128] = {0};
ULONG ulFileNameLen = 0;
ulErrorCode = GetDeviceListHandle().OpenAppletSession(ckSlotID);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
ulErrorCode = GetDeviceListHandle().GetAppletSessionInfo(ulType, bLoged);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
if(ulType != CKU_USER)
{
GetDeviceListHandle().AppletSessionLogOut();
ulErrorCode = GetDeviceListHandle().AppletSessionLogIn(CKU_USER, (PBYTE)szUserPwd, strlen(szUserPwd));
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
}
sprintf(strFileName, "%d", dwFileID);
ulFileNameLen = strlen(strFileName);
ulErrorCode = GetDeviceListHandle().CreateTokenFile(FALSE, (PBYTE)strFileName, ulFileNameLen, dwFileSize);
end:
if ( ulErrorCode != CKR_OK )
{
sprintf(g_szErrInfo,"創建文件出錯,ErrorCode:0x%x",ulErrorCode);
g_dwErrCode = ulErrorCode;
}
GetDeviceListHandle().CloseAppletSession();
return (ulErrorCode == CKR_OK) ? USBKEY_OK : USBKEY_FAILED;
}
int WINAPI CK_DeleteFile(CK_SLOT_ID ckSlotID,char *szUserPwd,DWORD dwFileID)
{
BOOL bLoged;
CK_USER_TYPE ulType;
ULONG ulErrorCode = CKR_OK;
char strFileName[128] = {0};
ULONG ulFileNameLen = 0;
ulErrorCode = GetDeviceListHandle().OpenAppletSession(ckSlotID);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
ulErrorCode = GetDeviceListHandle().GetAppletSessionInfo(ulType, bLoged);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
if(ulType != CKU_USER)
{
GetDeviceListHandle().AppletSessionLogOut();
ulErrorCode = GetDeviceListHandle().AppletSessionLogIn(CKU_USER, (PBYTE)szUserPwd, strlen(szUserPwd));
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
}
sprintf(strFileName, "%d", dwFileID);
ulFileNameLen = strlen(strFileName);
ulErrorCode = GetDeviceListHandle().DeleteTokenFile((PBYTE)strFileName, ulFileNameLen);
end:
if ( ulErrorCode != CKR_OK )
{
sprintf(g_szErrInfo,"刪除設備文件出錯,ErrorCode:0x%x",ulErrorCode);
g_dwErrCode = ulErrorCode;
}
GetDeviceListHandle().CloseAppletSession();
return (ulErrorCode == CKR_OK) ? USBKEY_OK : USBKEY_FAILED;
}
int WINAPI CK_WriteData(CK_SLOT_ID ckSlotID,char *szUserPwd,DWORD dwFileID,
int iOffset,BYTE *bpWriteData,DWORD dwDataLen){
BOOL bLoged;
CK_USER_TYPE ulType;
ULONG ulErrorCode = CKR_OK;
PBYTE pcbData = NULL;
ULONG ulcbDataLen = 0;
PBYTE pcbWriteData = NULL;
ULONG ulcbWriteDataLen = 0;
char strFileName[128] = {0};
ULONG ulFileNameLen = 0;
ulErrorCode = GetDeviceListHandle().OpenAppletSession(ckSlotID);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
ulErrorCode = GetDeviceListHandle().GetAppletSessionInfo(ulType, bLoged);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
if(ulType != CKU_USER)
{
GetDeviceListHandle().AppletSessionLogOut();
ulErrorCode = GetDeviceListHandle().AppletSessionLogIn(CKU_USER, (PBYTE)szUserPwd, strlen(szUserPwd));
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
}
sprintf(strFileName, "%d", dwFileID);
ulFileNameLen = strlen(strFileName);
ulErrorCode = GetDeviceListHandle().ReadFileData((PBYTE)strFileName, ulFileNameLen, NULL, ulcbDataLen);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
pcbData = new BYTE[ulcbDataLen];
ZeroMemory(pcbData, ulcbDataLen);
ulErrorCode = GetDeviceListHandle().ReadFileData((PBYTE)strFileName, ulFileNameLen, pcbData, ulcbDataLen);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
ulcbWriteDataLen = ulcbDataLen + iOffset + dwDataLen;
pcbWriteData = new BYTE[ulcbWriteDataLen];
ZeroMemory(pcbWriteData, ulcbWriteDataLen);
CopyMemory(pcbWriteData, pcbData, ulcbDataLen);
CopyMemory(pcbWriteData + iOffset, bpWriteData, dwDataLen);
if(ulcbDataLen < iOffset + dwDataLen)
{
ulcbWriteDataLen = dwDataLen + iOffset;
}
else
{
ulcbWriteDataLen = ulcbDataLen;
}
ulErrorCode = GetDeviceListHandle().WriteFileData((PBYTE)strFileName, ulFileNameLen, pcbWriteData, ulcbWriteDataLen);
delete [] pcbData;
pcbData = NULL;
delete [] pcbWriteData;
pcbWriteData = NULL;
end:
if ( ulErrorCode != CKR_OK )
{
sprintf(g_szErrInfo,"寫設備文件出錯,ErrorCode:0x%x",ulErrorCode);
g_dwErrCode = ulErrorCode;
}
GetDeviceListHandle().CloseAppletSession();
return (ulErrorCode == CKR_OK) ? USBKEY_OK : USBKEY_FAILED;
}
int WINAPI CK_ReadData(CK_SLOT_ID ckSlotID,char *szUserPwd,DWORD dwFileID,int iOffset,
BYTE *bpReadDataBuffer,DWORD dwReadLen)
{
BOOL bLoged;
CK_USER_TYPE ulType;
ULONG ulErrorCode = CKR_OK;
PBYTE pcbData = NULL;
ULONG ulcbDataLen = 0;
char strFileName[128] = {0};
ULONG ulFileNameLen = 0;
ulErrorCode = GetDeviceListHandle().OpenAppletSession(ckSlotID);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
ulErrorCode = GetDeviceListHandle().GetAppletSessionInfo(ulType, bLoged);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
if(ulType != CKU_USER)
{
GetDeviceListHandle().AppletSessionLogOut();
ulErrorCode = GetDeviceListHandle().AppletSessionLogIn(CKU_USER, (PBYTE)szUserPwd, strlen(szUserPwd));
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
}
sprintf(strFileName, "%d", dwFileID);
ulFileNameLen = strlen(strFileName);
ulErrorCode = GetDeviceListHandle().ReadFileData((PBYTE)strFileName, ulFileNameLen, NULL, ulcbDataLen);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
if(ulcbDataLen <= 0)
{
ulErrorCode = USBKEY_BUFFER_TOO_SMALL;
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
pcbData = new BYTE[ulcbDataLen];
ZeroMemory(pcbData, ulcbDataLen);
ulErrorCode = GetDeviceListHandle().ReadFileData((PBYTE)strFileName, ulFileNameLen, pcbData, ulcbDataLen);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
delete [] pcbData;
pcbData = NULL;
goto end;
}
CopyMemory(bpReadDataBuffer, pcbData + iOffset, dwReadLen);
delete [] pcbData;
pcbData = NULL;
end:
if ( ulErrorCode != CKR_OK )
{
sprintf(g_szErrInfo,"讀設備文件出錯,ErrorCode:0x%x",ulErrorCode);
g_dwErrCode = ulErrorCode;
}
GetDeviceListHandle().CloseAppletSession();
return (ulErrorCode == CKR_OK) ? USBKEY_OK : USBKEY_FAILED;
}
int WINAPI CK_SetPIN(CK_SLOT_ID ckSlotID,char *szUserPwd, char *szSOPwd)
{
ULONG ulErrorCode = CKR_OK;
ulErrorCode = GetDeviceListHandle().OpenAppletSession(ckSlotID);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
ulErrorCode = GetDeviceListHandle().ChangePinEx((PBYTE)szSOPwd, strlen(szSOPwd), (PBYTE)szUserPwd, strlen(szUserPwd));
end:
if ( ulErrorCode != CKR_OK )
{
sprintf(g_szErrInfo,"設置密碼出錯,ErrorCode:0x%x",ulErrorCode);
g_dwErrCode = ulErrorCode;
}
GetDeviceListHandle().CloseAppletSession();
return (ulErrorCode == CKR_OK) ? USBKEY_OK : USBKEY_FAILED;
}
int WINAPI CK_VerifyPIN(CK_SLOT_ID ckSlotID,bool bUserPin, char *szPIN)
{
BOOL bLoged;
CK_USER_TYPE ulType;
ULONG ulErrorCode = CKR_OK;
AUX_PIN_INFO ckTokenAuxInfo = {0};
GetDeviceListHandle().Reset();
ulErrorCode = GetDeviceListHandle().OpenAppletSession(ckSlotID);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto ERR;
}
ulErrorCode = GetDeviceListHandle().GetAppletSessionInfo(ulType, bLoged);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
GetDeviceListHandle().CloseAppletSession();
goto ERR;
}
if(bLoged == TRUE)
{
GetDeviceListHandle().AppletSessionLogOut();
}
ulErrorCode = GetDeviceListHandle().AppletSessionLogIn((bUserPin == TRUE) ? CKU_USER : CKU_SO, (PBYTE)szPIN, strlen(szPIN));
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
ulErrorCode = GetDeviceListHandle().GetTokenAuxInfo(ckSlotID, &ckTokenAuxInfo);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
GetDeviceListHandle().CloseAppletSession();
goto ERR;
}
else
{
if(bUserPin)
ulErrorCode = (ckTokenAuxInfo.bUserPinCurCounter == 0) ? -1 : ckTokenAuxInfo.bUserPinCurCounter;
else
ulErrorCode = (ckTokenAuxInfo.bSOPinCurCounter == 0) ? -1 : ckTokenAuxInfo.bSOPinCurCounter;
}
}
GetDeviceListHandle().CloseAppletSession();
return (ulErrorCode);
ERR:
g_dwErrCode = ulErrorCode;
sprintf(g_szErrInfo,"檢驗密碼出錯,ErrorCode:0x%x",g_dwErrCode);
return -2;
}
int WINAPI CK_ChangePIN(CK_SLOT_ID ckSlotID,bool bUserPin, char *szOldPIN,char *szNewPIN)
{
ULONG ulErrorCode = CKR_OK;
CK_USER_TYPE ulType;
AUX_PIN_INFO ckTokenAuxInfo = {0};
ulErrorCode = GetDeviceListHandle().OpenAppletSession(ckSlotID);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto ERR;
}
ulType = (bUserPin == TRUE) ? CKU_USER : CKU_SO;
ulErrorCode = GetDeviceListHandle().ChangePin(ulType,
(PBYTE)szOldPIN, strlen(szOldPIN), (PBYTE)szNewPIN, strlen(szNewPIN));
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
ulErrorCode = GetDeviceListHandle().GetTokenAuxInfo(ckSlotID, &ckTokenAuxInfo);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto ERR;
}
else
{
if(bUserPin)
ulErrorCode = (ckTokenAuxInfo.bUserPinCurCounter == 0) ? -1 : ckTokenAuxInfo.bUserPinCurCounter;
else
ulErrorCode = (ckTokenAuxInfo.bSOPinCurCounter == 0) ? -1 : ckTokenAuxInfo.bSOPinCurCounter;
}
}
GetDeviceListHandle().CloseAppletSession();
return (ulErrorCode);
ERR:
g_dwErrCode = ulErrorCode;
sprintf(g_szErrInfo,"修改密碼出錯,ErrorCode:0x%x",g_dwErrCode);
return -2;
}
int WINAPI CK_GetFileSize(CK_SLOT_ID ckSlotID,char *szUserPwd,DWORD dwFileID)
{
BOOL bLoged;
CK_USER_TYPE ulType;
ULONG ulErrorCode = CKR_OK;
char strFileName[128] = {0};
ULONG ulFileNameLen = 0;
ULONG ulFileSize = 0;
ulErrorCode = GetDeviceListHandle().OpenAppletSession(ckSlotID);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
ulErrorCode = GetDeviceListHandle().GetAppletSessionInfo(ulType, bLoged);
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
GetDeviceListHandle().AppletSessionLogOut();
ulErrorCode = GetDeviceListHandle().AppletSessionLogIn(CKU_USER, (PBYTE)szUserPwd, strlen(szUserPwd));
if(CKR_OK != ulErrorCode)
{
DebugOutPosition(__FILE__, __LINE__);
goto end;
}
sprintf(strFileName, "%d", dwFileID);
ulFileNameLen = strlen(strFileName);
ulErrorCode = GetDeviceListHandle().GetFileSize((PBYTE)strFileName, ulFileNameLen, ulFileSize);
end:
if ( ulErrorCode != CKR_OK )
{
sprintf(g_szErrInfo,"獲取文件大小出錯,ErrorCode:0x%x",ulErrorCode);
g_dwErrCode = ulErrorCode;
}
GetDeviceListHandle().CloseAppletSession();
return (ulErrorCode == CKR_OK) ? ulFileSize : 0;
}
const char * WINAPI CK_GetLastErrorInfor()
{
return g_szErrInfo;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -