来自Python ctypes的Microsoft ICertAdmin2接口

2024-09-24 22:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用ctypes从Python中使用microsoftsicertadmin2接口。在

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

到目前为止,我可以加载证书adm.dll. e、 g

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

但是,我不确定我现在需要做什么来从ICertAdmin2中访问方法,例如。 ICertAdmin2::ImportKey。在

任何指导都将不胜感激。在

更新

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

^{pr2}$

更新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))

Tags: fromimportcomclientwindowsoutctypesdll
1条回答
网友
1楼 · 发布于 2024-09-24 22:29:48

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

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

相关问题 更多 >