| 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 25.03.2019(UTC) Сообщений: 47  Откуда: ХабаровскСказал(а) «Спасибо»: 1 разПоблагодарили: 2 раз в 2 постах
 
 | 
            
		      
                Всем добра!) условия: есть файловый контейнер на диске, есть установленный сертификат и закрытый ключ в хранилище Личное задача: удалить контейнер, соответствующий установленному сертификату на данный момент успешно удаляю сертификат из личного, но вот как удалить и контейнер с диска, пока не понял. Код:procedure TForm1.Test(Sender: TObject);
const ThumbForDel='0123456789ABCD'
var
  hMyStore: Pointer;
  pCertContext, pSignerCert: PCCERT_CONTEXT;
  Thumb: string;
begin
  // Open "MY" store
  hMyStore := CertOpenStore(CERT_STORE_PROV_SYSTEM, X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,
                               0, CERT_SYSTEM_STORE_CURRENT_USER, PChar('MY'));
  if hMyStore=nil then begin Memo1.Lines.Add('ошибка открытия хранилища сертификатов!'); Exit; end;
  try 
      pCertContext := nil;
      repeat
      pCertContext := CertEnumCertificatesInStore(hMyStore, pCertContext);
        if (pCertContext <> nil) then begin
          pSignerCert := CertDuplicateCertificateContext(pCertContext);
          Thumb:=GetCertificateThumb(pSignerCert);
          If Thumb=ThumbForDel then begin
             If CertDeleteCertificateFromStore(pSignerCert) then Memo1.Lines.Add('Thumb '+Thumb+'Deleted');
             pCertContext := nil;
          end;
          if Assigned(pSignerCert) then CertFreeCertificateContext(pSignerCert);
        end;
      until (pCertContext = nil);
      if Assigned(pCertContext) then CertFreeCertificateContext(pCertContext);
      if hMyStore<>nil then CertCloseStore(hMyStore, 0);
    except on E:Exception do ShowMessage('Error '+#13#10+E.Message); end;
end;
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,969  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                Здравствуйте.
 CryptAcquireContextA(hProv, PAnsiChar(ContainerName), PAnsiChar(ProvName), ProvType, CRYPT_DELETEKEYSET)
 | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 25.03.2019(UTC) Сообщений: 47  Откуда: ХабаровскСказал(а) «Спасибо»: 1 разПоблагодарили: 2 раз в 2 постах
 
 | 
            
		      
                Автор: Андрей *  Здравствуйте.
 CryptAcquireContextA(hProv, PAnsiChar(ContainerName), PAnsiChar(ProvName), ProvType, CRYPT_DELETEKEYSET)
 а как получить значение ContainerName из сертификата? | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,969  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                Автор: city-med.info  Автор: Андрей *  Здравствуйте.
 CryptAcquireContextA(hProv, PAnsiChar(ContainerName), PAnsiChar(ProvName), ProvType, CRYPT_DELETEKEYSET)
 а как получить значение ContainerName из сертификата? CertGetCertificateContextProperty(Certificate, CERT_KEY_PROV_INFO_PROP_ID ..  Выделить память, запросить, получить  pwszProvName dwProvType pwszContainerName | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 25.03.2019(UTC) Сообщений: 47  Откуда: ХабаровскСказал(а) «Спасибо»: 1 разПоблагодарили: 2 раз в 2 постах
 
 | 
            
		      
                Автор: Андрей *  
 CertGetCertificateContextProperty(Certificate, CERT_KEY_PROV_INFO_PROP_ID ..
 
 данные получил, спасибо сейчас пытаюсь удалять контейнер, получаю AV Код:             
var   hProv: WCrypt2.PHCRYPTPROV;
begin
CryptAcquireContextA(hProv,
                PAnsiChar('FAT12\BC1BBE2D_ЭЦП\pfx-57d0.000\7F77'),
                PAnsiChar('Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider'),
                80, CRYPT_DELETEKEYSET);
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,969  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                Автор: city-med.info  Автор: Андрей *  
 CertGetCertificateContextProperty(Certificate, CERT_KEY_PROV_INFO_PROP_ID ..
 
 данные получил, спасибо сейчас пытаюсь удалять контейнер, получаю AV Код:             
var   hProv: WCrypt2.PHCRYPTPROV;
begin
CryptAcquireContextA(hProv,
                PAnsiChar('FAT12\BC1BBE2D_ЭЦП\pfx-57d0.000\7F77'),
                PAnsiChar('Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider'),
                80, CRYPT_DELETEKEYSET);
 смотреть внимательно модуль WCrypt2, а лучше забыть про эту реализацию. | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,969  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                JwaWinCrypt Цитата:function CryptAcquireContextA; external advapi32 name 'CryptAcquireContextA';
 function CryptAcquireContextA(var phProv: HCRYPTPROV; pszContainer: LPCSTR;
 pszProvider: LPCSTR; dwProvType: DWORD; dwFlags: DWORD): BOOL; stdcall;
 | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 25.03.2019(UTC) Сообщений: 47  Откуда: ХабаровскСказал(а) «Спасибо»: 1 разПоблагодарили: 2 раз в 2 постах
 
 | 
            
		      
                у меня юникодная среда, в Wcrypt2 вот так описаны функции function CryptAcquireContextW; external ADVAPI32 name 'CryptAcquireContextW'; function CryptAcquireContextW(phProv: PHCRYPTPROV;   pszContainer: PWideChar;   pszProvider: PWideChar;   dwProvType: DWORD;   dwFlags: DWORD): BOOL; stdcall; собственно, и параметры pwszContainerName и pwszProvName тоже PWideChar функцию удаления сейчас так переделал Код:             
var ContainerData: PCRYPT_KEY_PROV_INFO;
 
             ContainerData:=GetCertificateData(pSignerCert);
             Memo1.Lines.Add(ContainerData.pwszContainerName);
             Memo1.Lines.Add(ContainerData.pwszProvName);
             CryptAcquireContextW(hProv, ContainerData.pwszContainerName,
                ContainerData.pwszProvName, ContainerData.dwProvType, CRYPT_DELETEKEYSET);
             FreeMem(ContainerData);
 AV в любых вариациях... | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 25.03.2019(UTC) Сообщений: 47  Откуда: ХабаровскСказал(а) «Спасибо»: 1 разПоблагодарили: 2 раз в 2 постах
 
 | 
            
		      
                Автор: Андрей *  JwaWinCrypt Цитата:function CryptAcquireContextA; external advapi32 name 'CryptAcquireContextA';
 function CryptAcquireContextA(var phProv: HCRYPTPROV; pszContainer: LPCSTR;
 pszProvider: LPCSTR; dwProvType: DWORD; dwFlags: DWORD): BOOL; stdcall;
 исправил описание CryptAcquireContextA как в вашем примере, AV ушла, но контейнер не удаляется. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,969  Сказал «Спасибо»: 605 разПоблагодарили: 2346 раз в 1842 постах
 
 | 
            
		      
                Автор: city-med.info  Автор: Андрей *  JwaWinCrypt Цитата:function CryptAcquireContextA; external advapi32 name 'CryptAcquireContextA';
 function CryptAcquireContextA(var phProv: HCRYPTPROV; pszContainer: LPCSTR;
 pszProvider: LPCSTR; dwProvType: DWORD; dwFlags: DWORD): BOOL; stdcall;
 исправил описание CryptAcquireContextA как в вашем примере, AV ушла, но контейнер не удаляется. Не нужно стесняться вызывать GetLastError + SysErrorMessage, если api выдаёт false | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close