| ||||
| ||||
следующим кодом хочу перечислить имя контейнера и имя получателя сертификата, но еслм имя содержит пробелы например Иванов Иван Иваныч, то его не удается получить, а строка в которой должно быть это имя остается пустой, причем имена состоящие из одного слова, нормально отображаются! f (!CryptAcquireContextA( &hCryptProv, NULL, NULL, 75, CRYPT_VERIFYCONTEXT)) { printf("Error CryptAcquireContext..."); getch(); return; while(CryptGetProvParam( hCryptProv, PP_ENUMCONTAINERS, result, &size, fParam)) { fParam = 0; HCRYPTPROV tmpProv = NULL; LPCSTR containerName = (LPCSTR)result; CryptAcquireContextA( &tmpProv, containerName, "", 75, 0); StringGrid1->Cells[2][j+1]=containerName; HCRYPTKEY hKey = NULL; if (!CryptGetUserKey(tmpProv, AT_KEYEXCHANGE, &hKey)) { CryptGetUserKey(tmpProv, AT_SIGNATURE, &hKey); } BYTE* pbCert = NULL; DWORD pcbCert = 0; PCCERT_CONTEXT certContext; CryptGetKeyParam( hKey, KP_CERTIFICATE, NULL, &pcbCert, 0); pbCert = (BYTE*)malloc(pcbCert); CryptGetKeyParam(hKey, KP_CERTIFICATE, pbCert, &pcbCert, 0); certContext = CertCreateCertificateContext( MY_ENCODING_TYPE, pbCert, pcbCert); DWORD dataSize; BYTE* data; char* tmpString; DWORD tmpStringSize; // Äîáàâëÿåì õýø CertGetCertificateContextProperty( certContext, CERT_HASH_PROP_ID, NULL, &dataSize); data = (BYTE*)malloc(dataSize); tmpString = (char*)malloc((dataSize * 2) + 1); CertGetCertificateContextProperty( certContext, CERT_HASH_PROP_ID, data, &dataSize); CryptBinaryToString(data, dataSize, CRYPT_STRING_HEX, NULL, &tmpStringSize); tmpString = (char*)malloc(tmpStringSize); CryptBinaryToString( data, dataSize, CRYPT_STRING_HEX, tmpString, &tmpStringSize); //Èìÿ Ïîëó÷àòåëÿ CertGetNameString( certContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, NULL, dataSize); tmpString = (char*)malloc(dataSize); CertGetNameString( certContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, tmpString, dataSize); StringGrid1->Cells[0][j+1]=tmpString; j++; free(pbCert); free(data); free(tmpString); } в чем проблема? | ||||
Ответы: | ||||
| ||||
Первый вызов CertGetNameString дб что-то вроде этого: dataSize = CertGetNameString( certContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, NULL, 0); | ||||
| ||||
Благодарю! | ||||