Четверг, 08.12.2022, 11:05
PureBasic - кроссплатформенный язык программирования
Главная Форум Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
PureBasic - форум » Вопросы по PureBasic (Windows) » Вопросы новичков » перевод из с++ в purebasic
перевод из с++ в purebasic
SeregaZДата: Воскресенье, 03.06.2012, 05:55 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
есть небольшой пример кода авторегистратора сертификатов в браузере:
Code
void certImport(wchar_t *filename, wchar_t *password)
{
     HANDLE hfile = INVALID_HANDLE_VALUE;
     HANDLE hsection = 0;
     void* pfx = 0;
     HCERTSTORE rootStore = 0;

     hfile = CreateFile(filename, FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
     if (INVALID_HANDLE_VALUE == hfile) wprintf(L"CreateFile failed !\n");

     hsection = CreateFileMapping(hfile, 0, PAGE_READONLY, 0, 0, 0);
     if (!hsection) {
         wprintf(L"CreateFileMapping failed !\n");
         goto cleanup;
     }

     pfx = MapViewOfFile(hsection, FILE_MAP_READ, 0, 0, 0);
     if (!pfx) {
         wprintf(L"MapViewOfFile failed !\n");
         goto cleanup;
     }

     CRYPT_DATA_BLOB blob;
     blob.cbData = GetFileSize(hfile, 0);
     blob.pbData = (BYTE*)pfx;
      
     PCCERT_CONTEXT pctx;
     pctx = CertCreateCertificateContext(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,blob.pbData,blob.cbData);

     rootStore = CertOpenStore(    CERT_STORE_PROV_SYSTEM, 0, 0,  
                    CERT_STORE_OPEN_EXISTING_FLAG | CERT_SYSTEM_STORE_LOCAL_MACHINE,  
                    L"Root");
     if (!rootStore ) {
         wprintf(L"CertOpenSystemStore Root failed !\n");
         goto cleanup;
     }

     if (CertAddCertificateContextToStore(rootStore, pctx, CERT_STORE_ADD_NEW, 0)) {
         wprintf(L"Import succeeded.\n");
         goto cleanup;
     }

cleanup:
     if (pfx) UnmapViewOfFile(pfx);
     if (hsection) CloseHandle(hsection);
     if (INVALID_HANDLE_VALUE != hfile) CloseHandle(hfile);
}


большинство команд понятны - это не столько с++, сколько крипто апи. первый затык при переводе это:
CRYPT_DATA_BLOB blob;
blob.cbData = GetFileSize(hfile, 0);
blob.pbData = (BYTE*)pfx;
GetFileSize(hfile, 0); понятно, размер файла сертификата вроде бы. а вот что такое (BYTE*)pfx? pfx тоже вроде ясно... из кода pfx = MapViewOfFile это вроде как просмотр карты файла чтоли. а вот что такое (BYTE*)?
 
filsДата: Суббота, 09.06.2012, 09:34 | Сообщение # 2
Сержант
Группа: Администраторы
Сообщений: 24
Статус: Offline
Quote (SeregaZ)
а вот что такое (BYTE*)
Это явное преобразование типов переменных. В Си с этим строго!
Судя по всему, на пурике будет такой код.
Code
blob\pbData = pfx
 
SeregaZДата: Суббота, 09.06.2012, 11:57 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
вроде как выяснили - это вроде как начальный адрес в памяти, где хранится считанный сертификат. по идее этот пример должен дать понять что под этим (BYTE*)pfx подразумевалось:

Code

   DataSection
     mydata:
       IncludeBinary "D:\RSA.p12"
     endofmydata:
   EndDataSection

cbData = ?endofmydata - ?mydata
pbData = ?mydata;


да и все равно дальше затык - CertCreateCertificateContext и CertOpenStore и CertAddCertificateContextToStore - синтаксис никто не знает smile как правильно открывать, читать, вписывать информацию не понятно smile
 
PatraIIIutelДата: Пятница, 29.06.2012, 08:50 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 1
Статус: Offline
ам это не верно!

тесто рецепт видео приколы про девушек
 
PureBasic - форум » Вопросы по PureBasic (Windows) » Вопросы новичков » перевод из с++ в purebasic
  • Страница 1 из 1
  • 1
Поиск:

Копировать материалы сайта без разрешения автора, ЗАПРЕЩЕНО!

Сделать бесплатный сайт с uCoz