| ||||
| ||||
Добрый день! Поделитесь пожалуйста, ПОЛНЫМ рабочим кодом на Cи с перечислением контейнеров (используя CryptoAPI). Куски кода я видел на этом форуме, все вроде бы просто, но что-то у меня не выходит (заткнулся на CryptGetProvParam). Можно с динамическим созданием pbData. Да, по условиям задачи пишу не на Си, но Си знаю Спасибо. С уважением Мартюшев Леонид | ||||
Ответы: | ||||
| ||||
А в чем именно затык? | ||||
| ||||
Затык в том, что перечисляются какие-то пустые контейнеры в Infotecs Criptographic Service Provider. Вот вырезка листинга провайдеров и контенеров: * Infotecs Criptographic Service Provider - C:\program files\infotecs\vipnet cryptoservice\d_station\abn_002\000d0000.lck - все, потом идут пустые строки бесконечно... * Microsoft Base Cryptographic Provider v1.0 - MSDELXCD ну и т.д. Я бы привел код, но он на Clarion-е, малораспостраненный язык. Меня собственно интересует организация цикла с CryptGetProvParam, т.е. полный код по перечислению (ниже кусок кода, который я где-то видел на этом форуме): ------------ while ( CryptGetProvParam(hCryptProv, PP_ENUMCONTAINERS, NULL, &size, fParam) ) { // можно динамически выделить память под имя контейнера равную size CryptGetProvParam(hCryptProv, PP_ENUMCONTAINERS, ContName, &size, fParam); fParam = 0; ... ----------------- Из полного кода, если Вы мне его приведете, мне будет ясно, как это сделать в Clarion-e С уваженим Мартюшев Леонид | ||||
| ||||
У меня готового примера нет, могу лишь набросать схему вызовов: //определение длины имени контейнера CryptGetProvParamStringT(hCryptProv, PP_ENUMCONTAINERS, NULL, &size, CRYPT_FIRST); char *szName = new CHAR[size]; bool bFirstPass = true, bRes; while (1) { szName[0] = 0; //делаем строку нулевой длины //получение имени очередного контейнера bRes = CryptGetProvParamString(hCryptProv, PP_ENUMCONTAINERS, szName, &size, (bFirstPass?CRYPT_FIRST:0)); // Все вызовы, кроме первого пойдут с нулем в dwFlags if (!bRes)) { //проверка - ошибка или конец перечисления } //... //что-то делаем с именем контейнера //... if(bFirstPass) bFirstPass = false; } | ||||
| ||||
Добрый день! Все, большое спасибо, то что нужно. С уважением Мартюшев Леонид | ||||