| ||||
| ||||
Почему данный код выдает ошибку NTE_BAD_KEYSET, то есть "Ключевой контейнер не был открыт, и, возможно, не существует." Ведь флаги-то CRYPT_NEWKEYSET|CRYPT_MACHINE_KEYSET - по идеи просто должен быть создан контейнер в реестре? Подскажите пожалуйста, что конкретно я перепута, а то я эти примеры и доки уже вдоль и поперек перечитал. ;) HINSTANCE hinstLib; hinstLib = LoadLibrary("e:\\Program files\\crypto pro\\csp\\cpcsp.dll"); HCRYPTPROV *phProv=NULL; CHAR *pszContainer="maxim"; DWORD dwFlags=CRYPT_NEWKEYSET|CRYPT_MACHINE_KEYSET; PVTABLEPROVSTRUC vTable=(PVTABLEPROVSTRUC)calloc(1,sizeof(VTABLEPROVSTRUC)); vTable->Version = 2; /* min*/ vTable->FuncVerifyImage = NULL; vTable->FuncReturnhWnd = NULL; if (hinstLib != NULL) { printf("LoadLibrary works\n"); MyAcquireContext = (CPAcquireContext_t) GetProcAddress (hinstLib,"CPAcquireContext"); if(MyAcquireContext(phProv,NULL,dwFlags,vTable)!=NULL){ printf("CPAcquireContext works"); }else{ printf("\n>>%x",GetLastError()); if(GetLastError()==SCARD_W_CANCELLED_BY_USER){ printf("\n>>SCARD_W_CANCELLED_BY_USER"); }else if(GetLastError()==NTE_BAD_KEYSET) printf("\n>>NTE_BAD_KEYSET"); } | ||||
Ответы: | ||||
| ||||
Для начала, было бы неплохо заменить В vTable NULLы на NULL-функции (возвращающие NULL) | ||||