static int et199_encrypt_init(void *encrypt) { int dwCount = 0; int dwRet = 0; ENCRYPT *encrypt_ins = encrypt; struct ET_CONTEXT *pContext = (struct ET_CONTEXT *)encrypt_ins->private_data; dwRet = ETEnum(0, &dwCount); if(dwRet != ET_E_INSUFFICIENT_BUFFER && dwRet) { PostError("ETEnum 1", dwRet); return PROBE_ERR; } if(dwCount > PCONTEXT_COUNT) { return MORE_DEV; } memset(pContext, 0, sizeof(struct ET_CONTEXT)*dwCount); dwRet = ETEnum(pContext, &dwCount); if(dwRet) { PostError("ETEnum 2", dwRet); return PROBE_ERR; } //Open ET199 dwRet = ETOpen(&pContext[0]); if(dwRet) { PostError("ETOpen", dwRet); return OPENDEV_ERR; } dwRet = et199_encrypt_verfiy_serial_num(encrypt_ins); if(dwRet != 0) { return dwRet; } return SUCCESS; }
/** * Enumerate connected ET199 devices. -> @ref: ETEnum * Args: No. * Return: A list of ETContext objects. NONE if no ET199 was connected or failed. */ static PyObject *pyETEnum(PyObject *self){ /** Get connected keys*/ DWORD keyCount=0,dwRet=0; int i=0; ET_CONTEXT *pETContextList = NULL; PyObject *result = PyList_New(0); Py_XINCREF(result); dwRet = ETEnum(NULL,&keyCount); if(ET_E_INSUFFICIENT_BUFFER!=dwRet && !dwRet){ DWRET_VALIDATE(dwRet,NULL); } if(keyCount==0){ return result; } pETContextList = malloc(sizeof(ET_CONTEXT)*keyCount); memset(pETContextList,0,sizeof(ET_CONTEXT)*keyCount); dwRet=ETEnum(pETContextList,&keyCount); if(0!=dwRet){ free(pETContextList); DWRET_VALIDATE(dwRet,NULL); } for(i=0;i<keyCount;i++){ ETContextObject *etcontext = (ETContextObject*)ETContext_new(); ET_CONTEXT *pETC = &pETContextList[i]; /* DWORD dwOut=0; dwRet = ETOpen(pETC); dwRet = ETControl(pETC,ET_GET_SERIAL_NUMBER, NULL, 0, pETC->bID, 8, &dwOut); dwRet = ETControl(pETC,ET_GET_DEVICE_ATR,NULL,0,pETC->bAtr,16,&pETC->dwAtrLen); dwRet = ETControl(pETC,ET_GET_CUSTOMER_NAME,NULL,0,&pETC->dwCustomer,4,&dwOut); */ memcpy(&etcontext->context,pETC,sizeof(ET_CONTEXT)); PyList_Append(result, etcontext); /* dwRet = ETClose(pETC); */ } //Py_XDECREF(pETContextList); free(pETContextList); return result; }