Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28

Почему CertCreateCertificateContext() выдает Null?

05.04.2023, 22:03. Показов 4993. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void CКурсвя1Dlg::OnEnChangeMfceditbrowse1()
{
 
        CString filePath; // переменная для хранения выбранного пути к файлу с сертификатом
        HANDLE fileHandle;
        // получаем новый путь к файлу и передаем его в CertCreateCertificateContext
        GetDlgItemText(IDC_MFCEDITBROWSE1, filePath); // получаем текст из MFCEditBrowse и сохраняем его в переменную filePath
        // конвертируем строку из MFCEditBrowse в LPCWSTR
        LPCWSTR strFilePath = (LPCWSTR)(LPCTSTR)filePath;
        fileHandle = CreateFileW(strFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if (fileHandle == INVALID_HANDLE_VALUE)
        {
            // обработка ошибки
            return;
        }
        DWORD fileSize = GetFileSize(fileHandle, NULL);
        // вызываем CertCreateCertificateContext с передачей пути к файлу
        PCCERT_CONTEXT pCertContext = CertCreateCertificateContext(X509_ASN_ENCODING, (const BYTE*)strFilePath, fileSize);
  
        // проверяем, что сертификат был успешно получен
        if (pCertContext!=NULL)
        {
 
            // получаем дату истечения сертификата
            SYSTEMTIME systime;
            FileTimeToSystemTime(&pCertContext->pCertInfo->NotAfter, &systime);
 
            // формируем строку вида "yyyy-mm-dd hh:mm:ss"
            CString strNotAfter;
            strNotAfter.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"),
                systime.wYear,
                systime.wMonth,
                systime.wDay,
                systime.wHour,
                systime.wMinute,
                systime.wSecond
            );
 
            // создаем отчет в .txt с датой истечения сертификата
            CString reportFileName = filePath.Left(filePath.ReverseFind('.')) + _T("_report.txt"); // формируем имя файла
            CStdioFile reportFile;
            if (reportFile.Open(reportFileName, CFile::modeCreate | CFile::modeWrite, NULL))
            {
                reportFile.WriteString(_T("Дата истечения сертификата: ") + strNotAfter + _T("\n"));
                reportFile.Close();
            }
        }
    }
Вложения
Тип файла: zip srt.zip (6.4 Кб, 0 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2023, 22:03
Ответы с готовыми решениями:

Объясните, пожалуйста, суть кода. И почему компилятор выдает, что идентификатор NULL не определен?
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> #define N 7 int main(void) { unsigned int some,...

Как правельно передавать значения в функцию и почему присравнивании с NULL у меня выдает ошибку?
Так же что мне делать если я хочу менять значения переменной F из функции main в функции proverka #include <iostream> #include...

При запуске выдает expression stream !=null; что делать?
задача такая: написать прогу, которая будет решать систему линейных уравнений методом гаусса. ошибок при компиляции не выдает, а вот при...

26
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.04.2023, 11:47
GetLastError() смотри.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.04.2023, 12:07
Closhat,
Потому что вы ему передаете ИМЯ файла вместо СОДЕРЖИМОГО. Четвертый раз вам про это говорю.
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 12:52  [ТС]
можешь скинуть пример как правильно передавать сам файл ?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.04.2023, 13:13
CFile используй.
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 13:29  [ТС]
сделал через CFile :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PCCERT_CONTEXT pCertContex = NULL;
    CString filePath;
    CMFCEditBrowseCtrl m_editFile;
    m_editFile.GetWindowText(filePath);
 
    CFile file;
    if (file.Open(filePath, CFile::modeRead))
    {
        DWORD size = file.GetLength();
        BYTE* buffer = new BYTE[size];
        file.Read(buffer, size);
 
        pCertContex = CertCreateCertificateContext(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, buffer, size);
 
        delete[] buffer;
Но выдает своеобразную ошибку
Миниатюры
Почему CertCreateCertificateContext() выдает Null?  
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 13:34  [ТС]
Я передал содержимое , но выдает ошибку
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.04.2023, 13:47
Возвращает NULL?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.04.2023, 14:09
Цитата Сообщение от Closhat Посмотреть сообщение
Я передал содержимое , но выдает ошибку
А что у вас GetLastError возвращает?
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 15:02  [ТС]
он сдесь не проходит if (file.Open(filePath, CFile::modeRead)) проверку ,а вообще ошибку вызывает
m_editFile.GetWindowText(filePath);

Добавлено через 44 секунды
Ничего , но ошибка вызывается из-за этой строчки //m_editFile.GetWindowText(filePath);

Добавлено через 3 минуты
Типа как я понял он не может считать инфу
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.04.2023, 15:33
Лучший ответ Сообщение было отмечено Closhat как решение

Решение

Как же тяжело программировать на ощупь.... Да еще когда вероисповедание отладчиком пользоваться запрещает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <windows.h>
#include <wincrypt.h>
#include <istream>
#include <iostream>
#include <fstream>
#include <vector>
#include <system_error>
 
using namespace std;
 
int main(int ac, char **av) {
 
ifstream f(av[1],ios::binary);
if(!f.is_open()) return 1;
vector<BYTE> v;
v.insert(v.end(),istreambuf_iterator<char>(f),istreambuf_iterator<char>());
 
PCCERT_CONTEXT  ctx = nullptr;
CERT_BLOB cert{ .cbData = v.size(), .pbData = v.data() };
 
 
if (CryptQueryObject (
        CERT_QUERY_OBJECT_BLOB,
        &cert,
        CERT_QUERY_CONTENT_FLAG_CERT,
        CERT_QUERY_FORMAT_FLAG_ALL,
        0,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        (const void **)&ctx) == 0) {
   DWORD err = GetLastError();
   cout << "CryptQueryObject():  " << std::hex << err << " " << std::system_category().message(err) << endl;
   return 1;     
 }
 
 SYSTEMTIME NotAfter;
 FileTimeToSystemTime(&ctx->pCertInfo->NotAfter,&NotAfter);
 cout << "Certificate expired at " << NotAfter.wDay << "/" << NotAfter.wMonth << "/" << NotAfter.wYear << endl;
 CertFreeCertificateContext(ctx);
 
 return 0;
}
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 15:43  [ТС]
А как она работает ?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.04.2023, 15:50
Цитата Сообщение от Closhat Посмотреть сообщение
А как она работает ?
Хорошо работает
Миниатюры
Почему CertCreateCertificateContext() выдает Null?  
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 15:52  [ТС]
Опа , класс , я уже неделю разбираюсь ) А вот если не сложно в моей программе в чем ошибка ?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.04.2023, 15:53
Цитата Сообщение от Closhat Посмотреть сообщение
А вот если не сложно в моей программе в чем ошибка ?

Не по теме:

в ДНК скорее всего :) А если точно то в вашем нежелаении читать документацию и разбираться в ней.


Изучать ваш код, цеплять MFC и прочую фигню у меня нет ни малейшего желания, честно говорю.
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 16:08  [ТС]
Тежело , из документации практически ничего не понимаю , да и вы наверно в свое время не понимали , помогите хотя бы
с кода где контекст сертификата создается
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.04.2023, 16:31
Цитата Сообщение от Closhat Посмотреть сообщение
помогите хотя бы
с кода где контекст сертификата создается
CryptQueryObject () с флагом CERT_QUERY_CONTENT_FLAG_CERT
вот тут
Обратите внимание. Вы можете передать как параметр имя файла, но это должно быть WCHAR *
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 16:35  [ТС]
Не катит получается CertCreateCertificateContext() ?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
06.04.2023, 16:39
Цитата Сообщение от Closhat Посмотреть сообщение
Не катит получается CertCreateCertificateContext() ?
Почему "не катит"? Инициализируйте хранилище, провайдера и все "покатит"...
0
0 / 0 / 0
Регистрация: 15.03.2023
Сообщений: 28
06.04.2023, 21:32  [ТС]
Все понял буду пробовать через CryptQueryObject () ) ,спасибо

Добавлено через 4 часа 43 минуты
Помогите пожалуйста , а как собственно сделать инициализатор хранилища, провайдера ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.04.2023, 21:32
Помогаю со студенческими работами здесь

Програма почему-то выдает x=7. Почему так не знаю но должно выдать 216
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int d = 5; int b = -4; int k = -3; ...

Почему NULL
FILE* file_1; file_1 = fopen(&quot;Hello.txt&quot;, &quot;rt&quot;); if (file_1 != NULL) { printf(file_1); } файл находиться где и exe...

Time(NULL) - почему это не UB
Возможно в уже поднимался подобный вопрос, (там где я не искал) но я не нашел толкового объяснения. Принимая за аксиому (читал, но по...

Почему CreateWindow может возвращать NULL?
Решил разобраться как устроено управление окнами на уровне API. Посмотрел стартовый пример из Visual Studio, разобрался в процессе...

Почему при NOT NULL default это NULL ?
Добрый день! Вопрос такой вдруг появился. При создании таблицы ввожу NOT NULL. Но когда просматриваю DESCRIPTION колонке Default вижу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru