while (pCertContext = CertEnumCertificatesInStore(hStore,pCertContext))
{
if ( FileTimeIsMoreThanSystem((pCertContext)->pCertInfo->NotAfter) == 0 )
continue;
TCHAR fullCertId[100];
TCHAR timeBefore[32];
TCHAR timeAfter[32];
CString pszNameString = GetCertName1(pCertContext);
if (!ConvertFileTimeToString((pCertContext)->pCertInfo->NotBefore,(LPTSTR)&timeBefore))
_tcscpy(timeBefore, _T("--.--.----"));
if (!ConvertFileTimeToString((pCertContext)->pCertInfo->NotAfter,(LPTSTR)&timeAfter) )
_tcscpy(timeAfter, _T("--.--.----"));
CString a =
bin_to_hex2((pCertContext)->pCertInfo->SerialNumber.cbData, (pCertContext)->pCertInfo->SerialNumber.pbData, &logFile);
swprintf( fullCertId,_T("%s#%s#%s#%s#"),(LPCWSTR)pszNameString,
a,
timeBefore, timeAfter );
bool oldAlg = false;
if (_tcsstr(a_Name,_T("#")) > 0)
{
if (_tcscmp(fullCertId, a_Name) == 0)
certFinded = true;
}
if (certFinded)
{
//i++;
break;
}
if (_tcsstr(m_certsNames,fullCertId) == 0)
{
m_certsNames.Append(fullCertId);
//_tcscat(certsNames, fullCertId);
m_certsNames.Append(_T(";"));
//AfxMessageBox(certsNames);
}
if (debug_sign == 2)
logFile.WriteLn(_T("recycle"), 0);
CString bin_to_hex2(DWORD sizeData, BYTE* pbData, CLogFile* LFile)
{
// перевод из бинарного вида в текстовый.
//LPSTR sig = static_cast<LPSTR>(malloc((sizeData*2+1)));
//ZeroMemory(sig, sizeData*2+1 + 1);
CString st;
std:wstring stmp = _T("");
//LPTSTR tmp = static_cast<LPTSTR>(malloc(4/*sizeData*/));
//ZeroMemory(tmp, /*sizeData*/4 + 1);
//wchar_t tmp[3] = _T(" ");
wchar_t tmp[] = _T(" ");
if (debug_sign == 2 && LFile != NULL)
{
const TCHAR str[] = _T("before new TCHAR");
LFile->WriteLn(str, 0);
}
wchar_t* hexStr = new TCHAR [(sizeData * sizeof(TCHAR))+2];
if (debug_sign == 2 && LFile != NULL)
{
const TCHAR str[] = _T("after new TCHAR");
LFile->WriteLn(str, 0);
}
while(sizeData > 0)
{
swprintf(tmp,_T("%02x"),pbData[--sizeData]);
//if (debug_sign == 2 && LFile != NULL)
//LFile->WriteLn(tmp, 0);
//st.Append((LPCWSTR)tmp);
stmp.append(tmp);
//if (debug_sign == 2 && LFile != NULL)
// LFile->WriteLn(stmp.c_str(), 0);
//st.Append(stmp.c_str());
//st.AppendFormat(_T("%s"), tmp);
//if (debug_sign == 2 && LFile != NULL)
// LFile->WriteLn(st, 0);
//strcat(sig, tmp);
}
/*
if (debug_sign == 2 && LFile != NULL)
{
const TCHAR str[] = _T("before free(tmp)");
LFile->WriteLn(str, 0);
}
if (tmp)
{
free(tmp);
tmp = NULL;
}
*/
// if (debug_sign == 2 && LFile != NULL)
// LFile->WriteLn(st, 0);
if (stmp != _T(""))
{
st.Append(stmp.c_str());
if (debug_sign == 2 && LFile != NULL)
LFile->WriteLn(st, 0);
hexStr = T2W(st.GetBuffer());
st.ReleaseBuffer();
st = hexStr;
if (debug_sign == 2 && LFile != NULL)
{
const TCHAR str[] = _T("before delete");
LFile->WriteLn(str, 0);
}
if (hexStr)
delete hexStr;
if (debug_sign == 2 && LFile != NULL)
{
const TCHAR str[] = _T("after delete");
LFile->WriteLn(str, 0);
}
//AfxMessageBox(st);
}
else
if (debug_sign == 2 && LFile != NULL)
{
const TCHAR str[] = _T("return empty");
LFile->WriteLn(str, 0);
}
/*
// DWORD len_w ;
//*hexSize = MultiByteToWideChar(CP_ACP, 0, sig, -1, NULL, 0);
*hexSize = MultiByteToWideChar(CP_ACP, 0, st.c_, -1, NULL, 0);
if (*hexSize > 0 || hexStr != NULL )
{
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, st.GetBuffer(), *hexSize, hexStr, *hexSize);
}
*/
/*
if (sig)
{
free(sig);
sig = NULL;
}
*/
return st;
}
CString GetCertName1( PCCERT_CONTEXT a_pCertContext)
{
bool nextStep = true;
LPTSTR pszName;
CString tmp;
DWORD cbSize;
if(!(cbSize = CertGetNameString(
a_pCertContext,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
0,
NULL,
NULL,
0)))
{
MyHandleError(TEXT("CertGetName 1 failed."));
nextStep = false;
}
if (nextStep)
//if(!(pszName = (LPTSTR)malloc(cbSize * sizeof(TCHAR)+2)))
if(!(pszName = (new TCHAR [cbSize*sizeof(TCHAR)+2])))
{
MyHandleError(TEXT("Memory allocation failed."));
nextStep = false;
}
if (nextStep)
if(!CertGetNameString(
a_pCertContext,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
0,
NULL,
pszName,
cbSize))
//
// {
// //_tprintf(TEXT("\!!!!!!nSubject -> %s.\n"), pszName);
//
// //-------------------------------------------------------
// // Free the memory allocated for the string.
// //free(pszName);
// }
// else
{
MyHandleError(TEXT("CertGetName failed."));
}
if (nextStep)
{
tmp = pszName;
if (pszName)
{
delete pszName;
//free(pszName);
//pszName = NULL;
}
//AfxMessageBox(tmp);
return tmp;
}
return _T("");
}
d2hpbGUgKHBDZXJ0Q29udGV4dCA9IENlcnRFbnVtQ2VydGlmaWNhdGVzSW5TdG9yZShoU3RvcmUscENlcnRDb250ZXh0KSkKewkJCgkJaWYgKAlGaWxlVGltZUlzTW9yZVRoYW5TeXN0ZW0oKHBDZXJ0Q29udGV4dCktPnBDZXJ0SW5mby0+Tm90QWZ0ZXIpID09IDAgICkKCQkJY29udGludWU7CgkJVENIQVIgZnVsbENlcnRJZFsxMDBdOwoJCVRDSEFSIHRpbWVCZWZvcmVbMzJdOwoJCVRDSEFSIHRpbWVBZnRlclszMl07CgkJQ1N0cmluZyBwc3pOYW1lU3RyaW5nID0gR2V0Q2VydE5hbWUxKHBDZXJ0Q29udGV4dCk7CgkJCgkJaWYgKCFDb252ZXJ0RmlsZVRpbWVUb1N0cmluZygocENlcnRDb250ZXh0KS0+cENlcnRJbmZvLT5Ob3RCZWZvcmUsKExQVFNUUikmdGltZUJlZm9yZSkpCgkJCV90Y3NjcHkodGltZUJlZm9yZSwgX1QoIi0tLi0tLi0tLS0iKSk7CgkgICAgaWYgKCFDb252ZXJ0RmlsZVRpbWVUb1N0cmluZygocENlcnRDb250ZXh0KS0+cENlcnRJbmZvLT5Ob3RBZnRlciwoTFBUU1RSKSZ0aW1lQWZ0ZXIpICkKCQkJX3Rjc2NweSh0aW1lQWZ0ZXIsIF9UKCItLS4tLS4tLS0tIikpOwoJCQoJCUNTdHJpbmcgYSA9CgkJCSAgYmluX3RvX2hleDIoKHBDZXJ0Q29udGV4dCktPnBDZXJ0SW5mby0+U2VyaWFsTnVtYmVyLmNiRGF0YSwgKHBDZXJ0Q29udGV4dCktPnBDZXJ0SW5mby0+U2VyaWFsTnVtYmVyLnBiRGF0YSwgJmxvZ0ZpbGUpOwoJCQkgIAoJCXN3cHJpbnRmKCBmdWxsQ2VydElkLF9UKCIlcyMlcyMlcyMlcyMiKSwoTFBDV1NUUilwc3pOYW1lU3RyaW5nLAoJCQkgICAgICAgICAgICAgICAgICAgICAgICAgYSwKCQkJCQkJCSAgICAgICAgIHRpbWVCZWZvcmUsIHRpbWVBZnRlciAgKTsKCQlib29sIG9sZEFsZyA9IGZhbHNlOwoJCWlmIChfdGNzc3RyKGFfTmFtZSxfVCgiIyIpKSA+IDApCgkJewkKCQkJaWYgKF90Y3NjbXAoZnVsbENlcnRJZCwgYV9OYW1lKSA9PSAwKQoJCQkJY2VydEZpbmRlZCA9IHRydWU7CgkJfQkKCQkKCQlpZiAoY2VydEZpbmRlZCkKCQl7CgkJCS8vaSsrOwoJCQkKCQkJYnJlYWs7CgkJfQoJCQoJCWlmIChfdGNzc3RyKG1fY2VydHNOYW1lcyxmdWxsQ2VydElkKSA9PSAwKQoJCXsKCQkJbV9jZXJ0c05hbWVzLkFwcGVuZChmdWxsQ2VydElkKTsKCQkvL190Y3NjYXQoY2VydHNOYW1lcywgZnVsbENlcnRJZCk7CgkJCW1fY2VydHNOYW1lcy5BcHBlbmQoX1QoIjsiKSk7CgkJLy9BZnhNZXNzYWdlQm94KGNlcnRzTmFtZXMpOwoJCX0KCQkKCQlpZiAoZGVidWdfc2lnbiA9PSAyKQoJCQlsb2dGaWxlLldyaXRlTG4oX1QoInJlY3ljbGUiKSwgMCk7CgkJCQoJCQkKCUNTdHJpbmcgYmluX3RvX2hleDIoRFdPUkQgc2l6ZURhdGEsIEJZVEUqIHBiRGF0YSwgQ0xvZ0ZpbGUqIExGaWxlKQp7ICAKCS8vINC/0LXRgNC10LLQvtC0INC40Lcg0LHQuNC90LDRgNC90L7Qs9C+INCy0LjQtNCwINCyINGC0LXQutGB0YLQvtCy0YvQuS4KCS8vTFBTVFIgc2lnID0gc3RhdGljX2Nhc3Q8TFBTVFI+KG1hbGxvYygoc2l6ZURhdGEqMisxKSkpOwoJLy9aZXJvTWVtb3J5KHNpZywgc2l6ZURhdGEqMisxICsgMSk7CgoJQ1N0cmluZyBzdDsKCglzdGQ6d3N0cmluZyBzdG1wID0gX1QoIiIpOwoKCS8vTFBUU1RSIHRtcCA9IHN0YXRpY19jYXN0PExQVFNUUj4obWFsbG9jKDQvKnNpemVEYXRhKi8pKTsKCS8vWmVyb01lbW9yeSh0bXAsIC8qc2l6ZURhdGEqLzQgICsgMSk7CgoJLy93Y2hhcl90IHRtcFszXSA9IF9UKCIgICIpOwoJd2NoYXJfdCB0bXBbXSA9IF9UKCIgICIpOwoKCWlmIChkZWJ1Z19zaWduID09IDIgJiYgTEZpbGUgIT0gTlVMTCkKCXsKCQljb25zdCBUQ0hBUiBzdHJbXSA9IF9UKCJiZWZvcmUgbmV3IFRDSEFSIik7CgkJTEZpbGUtPldyaXRlTG4oc3RyLCAwKTsKCX0KCgl3Y2hhcl90KiBoZXhTdHIgPSBuZXcgVENIQVIgWyhzaXplRGF0YSAqIHNpemVvZihUQ0hBUikpKzJdOwoKCWlmIChkZWJ1Z19zaWduID09IDIgJiYgTEZpbGUgIT0gTlVMTCkKCXsKCQljb25zdCBUQ0hBUiBzdHJbXSA9IF9UKCJhZnRlciBuZXcgVENIQVIiKTsKCQlMRmlsZS0+V3JpdGVMbihzdHIsIDApOwoJfQoKCXdoaWxlKHNpemVEYXRhID4gMCkKCXsKCQlzd3ByaW50Zih0bXAsX1QoIiUwMngiKSxwYkRhdGFbLS1zaXplRGF0YV0pOwoJCS8vaWYgKGRlYnVnX3NpZ24gPT0gMiAmJiBMRmlsZSAhPSBOVUxMKQoJCQkvL0xGaWxlLT5Xcml0ZUxuKHRtcCwgMCk7CgoJCS8vc3QuQXBwZW5kKChMUENXU1RSKXRtcCk7CgogICAgICAgIHN0bXAuYXBwZW5kKHRtcCk7CgoJCS8vaWYgKGRlYnVnX3NpZ24gPT0gMiAmJiBMRmlsZSAhPSBOVUxMKQoJCS8vCUxGaWxlLT5Xcml0ZUxuKHN0bXAuY19zdHIoKSwgMCk7CgoJCS8vc3QuQXBwZW5kKHN0bXAuY19zdHIoKSk7CgoJCS8vc3QuQXBwZW5kRm9ybWF0KF9UKCIlcyIpLCB0bXApOwoJICAgIC8vaWYgKGRlYnVnX3NpZ24gPT0gMiAmJiBMRmlsZSAhPSBOVUxMKQoJCS8vCUxGaWxlLT5Xcml0ZUxuKHN0LCAwKTsKCQkvL3N0cmNhdChzaWcsIHRtcCk7CQkJCQkJCgl9CgoKLyoKCWlmIChkZWJ1Z19zaWduID09IDIgJiYgTEZpbGUgIT0gTlVMTCkKCXsKCQljb25zdCBUQ0hBUiBzdHJbXSA9IF9UKCJiZWZvcmUgZnJlZSh0bXApIik7CgkJTEZpbGUtPldyaXRlTG4oc3RyLCAwKTsKCX0KCglpZiAodG1wKQoJewoJCWZyZWUodG1wKTsKCQl0bXAgPSBOVUxMOwoJfQoqLwoKLy8JaWYgKGRlYnVnX3NpZ24gPT0gMiAmJiBMRmlsZSAhPSBOVUxMKQovLwkJTEZpbGUtPldyaXRlTG4oc3QsIDApOwoKCWlmIChzdG1wICE9IF9UKCIiKSkKCXsKCQlzdC5BcHBlbmQoc3RtcC5jX3N0cigpKTsKCgkJaWYgKGRlYnVnX3NpZ24gPT0gMiAmJiBMRmlsZSAhPSBOVUxMKQoJCQlMRmlsZS0+V3JpdGVMbihzdCwgMCk7CgoJCWhleFN0ciA9IFQyVyhzdC5HZXRCdWZmZXIoKSk7CgkJc3QuUmVsZWFzZUJ1ZmZlcigpOwoJCXN0ID0gaGV4U3RyOwoKCQlpZiAoZGVidWdfc2lnbiA9PSAyICYmIExGaWxlICE9IE5VTEwpCgkJewoJCQljb25zdCBUQ0hBUiBzdHJbXSA9IF9UKCJiZWZvcmUgZGVsZXRlIik7CgkJCUxGaWxlLT5Xcml0ZUxuKHN0ciwgMCk7CgkJfQoKCQlpZiAoaGV4U3RyKQoJCQlkZWxldGUgaGV4U3RyOwoKCQlpZiAoZGVidWdfc2lnbiA9PSAyICYmIExGaWxlICE9IE5VTEwpCgkJewoJCQljb25zdCBUQ0hBUiBzdHJbXSA9IF9UKCJhZnRlciBkZWxldGUiKTsKCQkJTEZpbGUtPldyaXRlTG4oc3RyLCAwKTsKCQl9CgoJCS8vQWZ4TWVzc2FnZUJveChzdCk7Cgl9CgllbHNlCgkJaWYgKGRlYnVnX3NpZ24gPT0gMiAmJiBMRmlsZSAhPSBOVUxMKQoJCXsKCQkJY29uc3QgVENIQVIgc3RyW10gPSBfVCgicmV0dXJuIGVtcHR5Iik7CgkJCUxGaWxlLT5Xcml0ZUxuKHN0ciwgMCk7CgkJfQoKCi8qCgkvLyBEV09SRCBsZW5fdyA7CgkvLypoZXhTaXplID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIDAsIHNpZywgLTEsIE5VTEwsIDApOyAKCSpoZXhTaXplID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIDAsIHN0LmNfLCAtMSwgTlVMTCwgMCk7IAoJaWYgKCpoZXhTaXplID4gMCB8fCBoZXhTdHIgIT0gTlVMTCAgKQoJewoJCU11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfQUNQLCBNQl9QUkVDT01QT1NFRCwgc3QuR2V0QnVmZmVyKCksICpoZXhTaXplLCBoZXhTdHIsICpoZXhTaXplKTsgCgl9CiovCgovKgoJaWYgKHNpZykKCXsKCQlmcmVlKHNpZyk7CgkJc2lnID0gTlVMTDsKCX0KKi8KCglyZXR1cm4gc3Q7Cn0KCgoKQ1N0cmluZyBHZXRDZXJ0TmFtZTEoIFBDQ0VSVF9DT05URVhUIGFfcENlcnRDb250ZXh0KQp7CgoJYm9vbCBuZXh0U3RlcCA9IHRydWU7CglMUFRTVFIgcHN6TmFtZTsKCUNTdHJpbmcgdG1wOwoJRFdPUkQgY2JTaXplOwoJaWYoIShjYlNpemUgPSBDZXJ0R2V0TmFtZVN0cmluZyggICAKCQlhX3BDZXJ0Q29udGV4dCwgICAKCQlDRVJUX05BTUVfU0lNUExFX0RJU1BMQVlfVFlQRSwgICAKCQkwLAoJCU5VTEwsICAgCgkJTlVMTCwgICAKCQkwKSkpCgl7CgkJTXlIYW5kbGVFcnJvcihURVhUKCJDZXJ0R2V0TmFtZSAxIGZhaWxlZC4iKSk7CgkJbmV4dFN0ZXAgPSBmYWxzZTsKCX0KCglpZiAobmV4dFN0ZXApCgoJCS8vaWYoIShwc3pOYW1lID0gKExQVFNUUiltYWxsb2MoY2JTaXplICogc2l6ZW9mKFRDSEFSKSsyKSkpCiAgICAgICAgaWYoIShwc3pOYW1lID0gKG5ldyBUQ0hBUiBbY2JTaXplKnNpemVvZihUQ0hBUikrMl0pKSkKCQl7CgkJCU15SGFuZGxlRXJyb3IoVEVYVCgiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiIpKTsKCQkJbmV4dFN0ZXAgPSBmYWxzZTsKCQl9CgoJCWlmIChuZXh0U3RlcCkKCQkJaWYoIUNlcnRHZXROYW1lU3RyaW5nKAoJCQkJYV9wQ2VydENvbnRleHQsCgkJCQlDRVJUX05BTUVfU0lNUExFX0RJU1BMQVlfVFlQRSwKCQkJCTAsCgkJCQlOVUxMLAoJCQkJcHN6TmFtZSwKCQkJCWNiU2l6ZSkpCgkJCQkvLyAKCQkJCS8vIAl7CgkJCQkvLyAJCS8vX3RwcmludGYoVEVYVCgiXCEhISEhIW5TdWJqZWN0IC0+ICVzLlxuIiksIHBzek5hbWUpOwoJCQkJLy8gCgkJCQkvLyAJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gCQkvLyAgICAgICBGcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgc3RyaW5nLgoJCQkJLy8gCQkvL2ZyZWUocHN6TmFtZSk7CgkJCQkvLyAJfQoJCQkJLy8gCWVsc2UKCQkJewoJCQkJTXlIYW5kbGVFcnJvcihURVhUKCJDZXJ0R2V0TmFtZSBmYWlsZWQuIikpOwoJCQl9CgoJCQlpZiAobmV4dFN0ZXApCgkJCXsKCQkJCXRtcCA9IHBzek5hbWU7CgkJCQlpZiAocHN6TmFtZSkKCQkJCXsKCQkJCQlkZWxldGUgcHN6TmFtZTsKCQkJCQkvL2ZyZWUocHN6TmFtZSk7CgkJCQkJLy9wc3pOYW1lID0gTlVMTDsKCQkJCX0KCQkJCS8vQWZ4TWVzc2FnZUJveCh0bXApOwoJCQkJcmV0dXJuIHRtcDsKCQkJfQoKCQkJcmV0dXJuIF9UKCIiKTsKfQo=