python - 来自 Python ctypes 的 Microsoft ICertAdmin2 接口(interface)

标签 python windows dll ctypes

我正在尝试使用 ctypes 从 Python 中使用 Microsoft 的 ICertAdmin2 接口(interface)。

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。

任何指导将不胜感激。

更新

现在使用 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 )

关于python - 来自 Python ctypes 的 Microsoft ICertAdmin2 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21686894/

相关文章:

python - 对 findall() 列表进行切片以获取值

python - 从 OCR 文本中提取分段符?

python - Alpha Vantage "KeyError: ' 时间序列(每日 )'"

c++ - Cmake 缺少 DLL

c++ - 在不重新链接的情况下更新依赖于 Boost 库的库的 Boost 版本

python - 存储函数时如何传递预定义参数

.net - 是否可以在 Windows 中禁用特定智能卡硬件 ID 的自动智能卡微型驱动程序安装?

windows - 将一个文本文件中的多行合并为一行

c++ - 阻止 alt+shift 事件或禁止以编程方式更改语言

c - TclLib C DLL,避免 Tcl_DuplicateObj,调用时出现共享对象错误