2014-09-27 3 views
0

Windows XP 및 Vista에서 CapiCOM dll을 사용하여 X509 인증서를 처리 할 수있었습니다.
그러나이 경로는 Window 7 (이상)에서 사용되지 않습니다.Windows 7의 상점에 X509 인증서 추가

Delphi 도움말 (XE6)에서 Data.DBXCommon.TX509Certificate에서만 X509 코드를 찾을 수 있지만 Windows 인증서 저장소와 관련이없는 것처럼 보입니다.

MSDN은 system.dllsystem.security.dll를 사용하는 나에게 말한다, 그러나 XE6는 이들에 대한 헤더 파일을 제공하지 않는 것 : I에 어떻게

(누락 System.dll을 헤더 파일) No system/system.security header files included

Windows 7에서 작동하도록 다음 코드를 번역 하시겠습니까?

uses 
    Capicom_TLB, CapicomConst, ActiveX; 

{$R *.dfm} 

procedure TForm11.Button1Click(Sender: TObject); 
var 
    CertificateFilename: PWideChar; 
    Store: TStore; 
    Certificate: ICertificate2; 
    Password: WideString; 
begin 
    if FileOpenDialog1.Execute then begin 
    CertificateFilename:= StringToOleStr(FileOpenDialog1.FileName); 
    Store:= TStore.Create(Self); 
    try 
     Password:= ''; 
     Store.Open(CAPICOM_LOCAL_MACHINE_STORE, CAPICOM_ROOT_STORE, CAPICOM_STORE_OPEN_READ_WRITE); 
     Certificate:= TCertificate.Create(Self) as ICertificate2; 
     Certificate.Load(CertificateFilename^, Password, CAPICOM_KEY_STORAGE_DEFAULT, CAPICOM_LOCAL_MACHINE_KEY); 
     Store.Add(Certificate as ICertificate2); 
    finally 
     Store.Close; 
     SysFreeString(CertificateFilename); 
    end; 
    end; 
end; 

Windows XP에서 Windows 8/9까지 작동하는 코드는 보너스가 될 수 있습니다.

답변

1

내 웹 검색에 따르면 Crypto API는 찾고있는 관리되지 않는 인터페이스입니다. CryptUIWizImport이 필요한 조치를 취하는 가장 쉬운 방법이라고 생각합니다. http://blogs.msdn.com/b/alejacma/archive/2008/01/31/how-to-import-a-certificate-without-user-interaction-c-c.aspx

내가이 일을 개인적인 경험은 그래서 마크의 넓은하지 않을 수 있습니다

이 문서에서는 함수를 호출하는 방법을 보여주는 몇 가지 간단한 코드가 있습니다.

+0

MSDN 문서의 설명에서 올바르게 나타납니다. 이 함수가 어느 DLL에 존재하는지 알아낼 수 있는지 알아 봅시다. – Johan

+0

그것은'CryptUI.dll'에 있습니다 : 함수 CryptUIWizImport (dwFlags : DWORD; HWndParent : HWND; WizardTitle : PWideString; ImportSrc : PCCRYPTUI_WIZ_IMPORT_SRC_INFO; hDestCertStore : THandle) : BOOL; stdcall; external 'CryptUI.dll'; ' – Johan

+0

CryptUI dll 함수를 사용해 보았습니다. 그러나 사용 된 구조체는 매우 미미하게 복잡하여 그 접근법을 단순히 수행 할 수 없습니다. 대신 커맨드 라인 접근법을 시도 할 것입니다. – Johan