微软ICertAdmin2接口从Python ctypes

我试图从ctypes使用Python的Microsofts ICertAdmin2接口。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383234(v=vs.85).aspx

到目前为止,我可以加载Certadm.dll。 例如

import ctypes # Load DLL into memory. dll = ctypes.WinDLL ("c:\\windows\\system32\\Certadm.dll") 

但是,我不知道我现在需要做什么来访问ICertAdmin2内的方法,例如ICertAdmin2 :: ImportKey。

任何指导将非常感激。

UPDATE

现在使用Python的“comtypes”库。 这就是我想要的。

 >>import comtypes >>certadmin = CreateObject("CertificateAuthority.Admin") >>certadmin._ICertAdmin__com_DenyRequest('WIN-3CF41NBPT85\cjndem-CA', 42) Traceback (most recent call last): File "<input>", line 1, in <module> COMError: (-2147024809, 'The parameter is incorrect.', (u'CCertAdmin::DenyRequest: The parameter is incorrect. 0x80070057 (WIN32: 87)', u'CertificateAuthority.Admin', None, 0, None)) 

更新3

这似乎现在工作:

 >>import comtypes >>from comtypes.client import CreateObject >>out = comtypes.BSTR('') >>certadmin = CreateObject("CertificateAuthority.Admin") >>certadmin._ICertAdmin2__com_GetArchivedKey('ca1\\simpleca', 51, 1 , out) >>print out BSTR(u'MIIiHwYJKoZIhvcNAQcCoIIiEDC........... 

不过这个:

 >>import comtypes >>from comtypes.client import CreateObject >>out = comtypes.c_long() >>request = CreateObject("CertificateAuthority.Request") >>request._ICertRequest2__com_GetIssuedCertificate('ca1\\simpleca', 1, u'-1', out ) >>print out COMError: (-2147024809, 'The parameter is incorrect.', (u'CCertRequest::GetIssuedCertificate: The parameter is incorrect. 0x80070057 (WIN32: 87)', u'CertificateAuthority.Request', None, 0, None)) 

Solutions Collecting From Web of "微软ICertAdmin2接口从Python ctypes"

GetIssuedCertificate的最后一个参数是指向LONG的指针。 使用byref()传递它。 你也应该通过一个BSTR作为第一和第三个参数。

 out = request.GetIssuedCertificate( 'ca1\\simpleca' ), 1, None )