23.04.2004 1:28:59Глупая ошибка NTE_BAD_KEYSET Ответов: 1
Максим
Почему данный код выдает ошибку 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");

}
 
Ответы:
29.04.2004 0:43:34mAx
Для начала, было бы неплохо заменить В vTable NULLы на NULL-функции (возвращающие NULL)