我试图从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))
GetIssuedCertificate
的最后一个参数是指向LONG的指针。 使用byref()
传递它。 你也应该通过一个BSTR作为第一和第三个参数。
out = request.GetIssuedCertificate( 'ca1\\simpleca' ), 1, None )