#include "VirtualDeviceClass.h" #include "libIDCertificateLoader.h" static VirtualDeviceClassImpl* object = NULL; DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass*& pOutDevAptObj) { ErrorCodeEnum result(Error_Unexpect); if (object == NULL) { char* buf; DWORD size; const char* var = "INVOKE_VENDOR_ADAPTER_NAME"; size = GetEnvironmentVariableA(var, NULL, 0); //ERROR_ENVVAR_NOT_FOUND if (size <= 0) { return Error_InvalidState; } buf = new char[size + 3]; if (buf == NULL) { return Error_Resource; } memset(buf, 0, sizeof(char) * (size + 3)); size = GetEnvironmentVariableA(var, buf, size); result = Bridge_LoadDevObject(buf); if (result == Error_Succeed) { object = new VirtualDeviceClassImpl(); } delete[] buf; } pOutDevAptObj = object; return result; } DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj) { ErrorCodeEnum result = Bridge_ReleaseDevObject(); if (result == Error_Succeed && pInDevAptObj != NULL) { delete pInDevAptObj; pInDevAptObj = NULL; } return result; } extern "C" DEVICEBASE_API void GetMoreErrorDetail(char* szErrMsg, DWORD * pMsgLen) { if (szErrMsg != NULL && pMsgLen != NULL && *pMsgLen > 0) { DevErrorInfo inner; ErrorCodeEnum result = Bridge_GetLastErr(&inner); if (result == Error_Succeed) { strcpy_s(szErrMsg, *pMsgLen, inner.szErrMsg); *pMsgLen = inner.dwErrMsgLen; } } } VirtualDeviceClassImpl::VirtualDeviceClassImpl() { } VirtualDeviceClassImpl::~VirtualDeviceClassImpl() { } ErrorCodeEnum VirtualDeviceClassImpl::GetDevCategory(DevCategoryInfo& devCategory) { ErrorCodeEnum result; DevCategoryInfo inner; result = Bridge_GetDevCategory(&inner); if (result == Error_Succeed) { strcpy_s(devCategory.szType, MAX_DEV_TYPE_LEN, inner.szType); strcpy_s(devCategory.szModel, MAX_DEV_MODEL_LEN, inner.szModel); strcpy_s(devCategory.szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor); devCategory.eState = inner.eState; devCategory.version.wMajor = inner.version.wMajor; devCategory.version.wMinor = inner.version.wMinor; devCategory.version.wRevision = inner.version.wRevision; devCategory.version.wBuild = inner.version.wBuild; } return result; } ErrorCodeEnum VirtualDeviceClassImpl::Reset() { return Bridge_Reset(); } ErrorCodeEnum VirtualDeviceClassImpl::DevClose() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_DevClose()); } ErrorCodeEnum VirtualDeviceClassImpl::GetLastErr(DevErrorInfo& devErrInfo) { ErrorCodeEnum result = Error_Succeed; DevErrorInfo inner; result = Bridge_GetLastErr(&inner); if (result == Error_Succeed) { devErrInfo.dwErrMsgLen = inner.dwErrMsgLen; strcpy_s(devErrInfo.szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg); } return (result); } ////////////////////////// ErrorCodeEnum VirtualDeviceClassImpl::DevOpen(DWORD dwPort) { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_DevOpen(dwPort)); } ErrorCodeEnum VirtualDeviceClassImpl::IDCerRFControl(bool bControl) { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_IDCerRFControl(bControl ? 1: 0)); } ErrorCodeEnum VirtualDeviceClassImpl::IDCerAuthenticate() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_IDCerAuthenticate()); } ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetData(IDCerInfo& idCerInfo) { Bridge_IDCerInfo inner; memset(&inner, 0, sizeof(inner)); ErrorCodeEnum result = Error_Unexpect; result = Bridge_IDCerGetData(&inner); if (result == Error_Succeed) { memcpy(idCerInfo.name.data, inner.name.data, MAX_IDCER_INFO_SIZE); idCerInfo.name.dwSize = inner.name.dwSize; memcpy(idCerInfo.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfo.sex.dwSize = inner.sex.dwSize; memcpy(idCerInfo.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfo.nation.dwSize = inner.nation.dwSize; memcpy(idCerInfo.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfo.birthday.dwSize = inner.birthday.dwSize; memcpy(idCerInfo.address.data, inner.address.data, MAX_IDCER_INFO_SIZE); idCerInfo.address.dwSize = inner.address.dwSize; memcpy(idCerInfo.idno.data, inner.idno.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfo.idno.dwSize = inner.idno.dwSize; memcpy(idCerInfo.department.data, inner.department.data, MAX_IDCER_INFO_SIZE); idCerInfo.department.dwSize = inner.department.dwSize; memcpy(idCerInfo.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfo.startDate.dwSize = inner.startDate.dwSize; memcpy(idCerInfo.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfo.endDate.dwSize = inner.endDate.dwSize; memcpy(idCerInfo.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE); idCerInfo.newAddress.dwSize = inner.newAddress.dwSize; memcpy(idCerInfo.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH); idCerInfo.photoPath.dwSize = inner.photoPath.dwSize; } return result; } ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetDataEx(IDCerInfoEx& idCerInfoEx) { Bridge_IDCerInfoEx inner; memset(&inner, 0, sizeof(inner)); ErrorCodeEnum result = Error_Unexpect; result = Bridge_IDCerGetDataEx(&inner); if (result == Error_Succeed) { memcpy(idCerInfoEx.name.data, inner.name.data, MAX_IDCER_INFO_SIZE); idCerInfoEx.name.dwSize = inner.name.dwSize; memcpy(idCerInfoEx.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.sex.dwSize = inner.sex.dwSize; memcpy(idCerInfoEx.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.nation.dwSize = inner.nation.dwSize; memcpy(idCerInfoEx.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.birthday.dwSize = inner.birthday.dwSize; memcpy(idCerInfoEx.address.data, inner.address.data, MAX_IDCER_INFO_SIZE); idCerInfoEx.address.dwSize = inner.address.dwSize; memcpy(idCerInfoEx.idno.data, inner.idno.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.idno.dwSize = inner.idno.dwSize; memcpy(idCerInfoEx.department.data, inner.department.data, MAX_IDCER_INFO_SIZE); idCerInfoEx.department.dwSize = inner.department.dwSize; memcpy(idCerInfoEx.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.startDate.dwSize = inner.startDate.dwSize; memcpy(idCerInfoEx.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.endDate.dwSize = inner.endDate.dwSize; memcpy(idCerInfoEx.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE); idCerInfoEx.newAddress.dwSize = inner.newAddress.dwSize; memcpy(idCerInfoEx.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH); idCerInfoEx.photoPath.dwSize = inner.photoPath.dwSize; memcpy(idCerInfoEx.englishName.data, inner.englishName.data, MAX_IDCER_INFO_SIZE); idCerInfoEx.englishName.dwSize = inner.englishName.dwSize; memcpy(idCerInfoEx.nationality.data, inner.nationality.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx.nationality.dwSize = inner.nationality.dwSize; memcpy(idCerInfoEx.idVersion.data, inner.idVersion.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx.idVersion.dwSize = inner.idVersion.dwSize; memcpy(idCerInfoEx.idType.data, inner.idType.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx.idType.dwSize = inner.idType.dwSize; memcpy(idCerInfoEx.reserved.data, inner.reserved.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx.reserved.dwSize = inner.reserved.dwSize; memcpy(idCerInfoEx.txzCode.data, inner.txzCode.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.txzCode.dwSize = inner.txzCode.dwSize; memcpy(idCerInfoEx.issuedSN.data, inner.issuedSN.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx.issuedSN.dwSize = inner.issuedSN.dwSize; memcpy(idCerInfoEx.reserved2.data, inner.reserved2.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.reserved2.dwSize = inner.reserved2.dwSize; memcpy(idCerInfoEx.reserved3.data, inner.reserved3.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.reserved3.dwSize = inner.reserved3.dwSize; memcpy(idCerInfoEx.reserved4.data, inner.reserved4.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.reserved4.dwSize = inner.reserved4.dwSize; memcpy(idCerInfoEx.reserved5.data, inner.reserved5.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx.reserved5.dwSize = inner.reserved5.dwSize; } return result; } ErrorCodeEnum VirtualDeviceClassImpl::ForceIDEject() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_ForceIDEject()); } ErrorCodeEnum VirtualDeviceClassImpl::ScanIDAndSaveImage() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_ScanIDAndSaveImage()); } ErrorCodeEnum VirtualDeviceClassImpl::QueryCardPos(int& pos) { ErrorCodeEnum result = Error_Unexpect; int inner; result = Bridge_QueryCardPos(&inner); if (result == Error_Succeed) { pos = inner; } return result; } ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetDataEx2(IDCerInfoEx2& idCerInfoEx2) { ErrorCodeEnum result = Error_Unexpect; Bridge_IDCerInfoEx2 inner; memset(&inner, 0, sizeof(inner)); result = Bridge_IDCerGetDataEx2(&inner); if (result == Error_Succeed) { memcpy(idCerInfoEx2.name.data, inner.name.data, MAX_IDCER_INFO_SIZE); idCerInfoEx2.name.dwSize = inner.name.dwSize; memcpy(idCerInfoEx2.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.sex.dwSize = inner.sex.dwSize; memcpy(idCerInfoEx2.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.nation.dwSize = inner.nation.dwSize; memcpy(idCerInfoEx2.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.birthday.dwSize = inner.birthday.dwSize; memcpy(idCerInfoEx2.address.data, inner.address.data, MAX_IDCER_INFO_SIZE); idCerInfoEx2.address.dwSize = inner.address.dwSize; memcpy(idCerInfoEx2.idno.data, inner.idno.data, 2 * MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.idno.dwSize = inner.idno.dwSize; memcpy(idCerInfoEx2.department.data, inner.department.data, MAX_IDCER_INFO_SIZE); idCerInfoEx2.department.dwSize = inner.department.dwSize; memcpy(idCerInfoEx2.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.startDate.dwSize = inner.startDate.dwSize; memcpy(idCerInfoEx2.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.endDate.dwSize = inner.endDate.dwSize; memcpy(idCerInfoEx2.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE); idCerInfoEx2.newAddress.dwSize = inner.newAddress.dwSize; memcpy(idCerInfoEx2.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH); idCerInfoEx2.photoPath.dwSize = inner.photoPath.dwSize; memcpy(idCerInfoEx2.englishName.data, inner.englishName.data, MAX_IDCER_INFO_SIZE); idCerInfoEx2.englishName.dwSize = inner.englishName.dwSize; memcpy(idCerInfoEx2.nationality.data, inner.nationality.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx2.nationality.dwSize = inner.nationality.dwSize; memcpy(idCerInfoEx2.idVersion.data, inner.idVersion.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx2.idVersion.dwSize = inner.idVersion.dwSize; memcpy(idCerInfoEx2.idType.data, inner.idType.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx2.idType.dwSize = inner.idType.dwSize; memcpy(idCerInfoEx2.reserved.data, inner.reserved.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx2.reserved.dwSize = inner.reserved.dwSize; memcpy(idCerInfoEx2.txzCode.data, inner.txzCode.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.txzCode.dwSize = inner.txzCode.dwSize; memcpy(idCerInfoEx2.issuedSN.data, inner.issuedSN.data, IDCER_EIGHT_BYTE_SIZE); idCerInfoEx2.issuedSN.dwSize = inner.issuedSN.dwSize; memcpy(idCerInfoEx2.reserved2.data, inner.reserved2.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.reserved2.dwSize = inner.reserved2.dwSize; memcpy(idCerInfoEx2.reserved3.data, inner.reserved3.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.reserved3.dwSize = inner.reserved3.dwSize; memcpy(idCerInfoEx2.reserved4.data, inner.reserved4.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.reserved4.dwSize = inner.reserved4.dwSize; memcpy(idCerInfoEx2.reserved5.data, inner.reserved5.data, MAX_IDCER_SIMPLE_INFO_SIZE); idCerInfoEx2.reserved5.dwSize = inner.reserved5.dwSize; } return result; } //SubClassStart