【发布时间】:2014-01-07 12:29:11
【问题描述】:
我想让ie的IWebBrowser不需要选择证书,所以我用InternetSetOption()来做。代码是:
HCERTSTORE hMyStore = CertOpenSystemStore(0, _T("MY");
PCCERT_CONTEXT pDesiredCert = NULL;
pDesiredCert=CertFindCertificateInStore(
hMyStore,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
CERT_FIND_SUBJECT_STR,
L"cnstr",
NULL);
if (InternetSetOption (NULL, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
(LPVOID)pDesiredCert, sizeof(CERT_CONTEXT)) == FALSE) {
DOWRD i = GetLastError();
}
...
我在“我的”商店获得证书。当我使用InternetSetOption()设置证书时,它返回false,错误代码是12018。我搜索了一些关于这个错误代码的信息:
“12018 ERROR_INTERNET_INCORRECT_HANDLE_TYPE 为该操作提供的句柄类型不正确。”
我想设置全局设置,所以我将第一个参数设置为NULL,函数InternetSetOption()中的第一个参数不能是NULL吗?我怎样才能正确设置选项?
【问题讨论】:
-
为什么 c# 被标记?这是什么语言?如果 c++ 从标签中删除 c#
-
对不起,因为我认为 C# 使用了一些 api。我已经删除了。
-
您不能使用 NULL 句柄,并且 IE 不会公开它使用的 HINTERNET 句柄。当然,这意味着这种方法注定要失败。通过谷歌搜索“为 Internet Explorer 安装证书”取得成功。
标签: winapi visual-c++ wininet