#ifndef __DEVICE_BASE_CLASS_H #define __DEVICE_BASE_CLASS_H #include #if defined __x86_64__ && (defined __linux__ || defined __APPLE__) #define RESERVE_NUM 24 #else #define RESERVE_NUM 12 #endif #define MAX_ATR_LEN 56 /** max ATR length */ #define MAX_ID_LEN 8 /** max device ID length */ #define MAX_LOG_END_POS_VALUE_NEEDLEN 4 //最大日志文件结束位置值长度 #define INDEXFILE_SIZE 4 //索引文件最大长度 #define LOGFILE_ID 0x0040 //日志文件ID #define INDEXFILE_ID 0x0041 //索引文件ID #define OLD_INDEXFILE_ID 0x0B3C //旧版本索引文件ID #define OLD_LOGFILE_ID 0X00F0 //旧版本日志文件ID #ifdef __cplusplus extern "C" { #endif typedef void* USBKEY_HANDLE; typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; #pragma once typedef struct { unsigned int m_USBKeyType; //Ukey硬件类型, 0x0001:飞天ROCKEY ARM 时钟锁; 0x0002:深思S4 时钟锁; 0x0003:龙脉GM3000锁 unsigned short m_Ver; //COS版本,比如:0x0201,表示2.01版 unsigned short m_Type; //产品类型: 0xFF表示标准版, 0x00为标准时钟锁,0x02为标准U盘锁 unsigned char m_BirthDay[8]; //出厂日期 unsigned long m_Agent; //代理商编号,比如:默认的0xFFFFFFFF unsigned long m_PID; //产品ID unsigned long m_UserID; //用户ID unsigned char m_HID[8]; //8字节的硬件ID unsigned long m_IsMother; //母锁标志: 0x01表示是母锁, 0x00表示不是母锁 unsigned long m_DevType; //设备类型(PROTOCOL_HID或者PROTOCOL_CCID) }USBKEY_INFO,*PUSBKEY_INFO; class DeviceBaseClass { public: DeviceBaseClass(void); virtual ~DeviceBaseClass(void); virtual DWORD FindUsbKey(USBKEY_INFO* pKeyInfo, unsigned int* pCount); virtual DWORD OpenUsbKey(USBKEY_HANDLE *pHandle,unsigned int Item); virtual DWORD CloseUsbKey(USBKEY_HANDLE hHandle); virtual DWORD VerifyAdminPIN(USBKEY_HANDLE hHandle, char* pPIN); virtual DWORD ChangeAdminPIN(USBKEY_HANDLE hHandle,char* pOldPin, char* pNewPin); virtual DWORD GenUniqueKey(USBKEY_HANDLE hHandle,char* pAdminPin, char* pUserPin); virtual DWORD CreateDataFile(USBKEY_HANDLE hHandle, unsigned int nFileLength, unsigned int nFileID); virtual DWORD WriteDataFile(USBKEY_HANDLE hHandle, unsigned int nFileID, unsigned int wOffset, BYTE * pInData, unsigned int nDataLen, unsigned int nFileSize); virtual DWORD ReadDataFile(USBKEY_HANDLE hHandle, unsigned int nFileID, unsigned int wOffset, BYTE * pOutData, unsigned int nDataLen); virtual DWORD DeleteDataFile(USBKEY_HANDLE hHandle, unsigned int nFileID); virtual DWORD GetFileLen(USBKEY_HANDLE hHandle, unsigned int nFileID, unsigned int* pFileLen); virtual DWORD WriteExeFile(USBKEY_HANDLE hHandle, unsigned int nFileID, BYTE * pInData, unsigned int nDataLen, unsigned int nFileSize); virtual DWORD WritePrivateKey(USBKEY_HANDLE hHandle, BYTE * pInData, int nDataLen); virtual DWORD CreatePrivateKey(USBKEY_HANDLE hHandle, int nFileLen); virtual DWORD DeletePrivateKey(USBKEY_HANDLE hHandle); virtual DWORD GetLogFileLength(USBKEY_HANDLE hHandle, int* pFileLen); virtual DWORD ReadLogFile(USBKEY_HANDLE hHandle, BYTE* pOutData, int nDataLen); virtual DWORD WriteLogFile(USBKEY_HANDLE hHandle, BYTE* pInData, int nDataLen); virtual DWORD DeleteLogFile(USBKEY_HANDLE hHandle); virtual DWORD DeleteAllFile(USBKEY_HANDLE hHandle); virtual DWORD ProtocolSwitch(USBKEY_HANDLE hHandle, int nFlag); virtual DWORD GetHIDFromUKey(char *strHID); }; #ifdef DEVICEBASE_EXPORTS #define DEVICEBASE_API __declspec(dllexport) #else #define DEVICEBASE_API __declspec(dllimport) #endif DEVICEBASE_API DWORD CreateUSBKeyComponent(DeviceBaseClass *&baseObj); DEVICEBASE_API DWORD ReleaseUSBKeyComponent(DeviceBaseClass *&pBaseObj); #ifdef __cplusplus } #endif #endif // __DEVICE_BASE_CLASS_H