vc通过COM方式调用CertEnroll
通過CertEnroll在CA上(1創建證書請求2得到證書3安裝證書)
http://www.cnblogs.com/rippleyong/archive/2008/12/15/1355417.html?適用windows server 2008以上
http://www.cnblogs.com/stephenxie/articles/1114804.html
?
?
vc++
BSTR bstrDN = NULL;
BSTR bstrReq = NULL;
BSTR bstrOID = NULL;
ICEnroll4 * pEnroll = NULL;
HRESULT hr;
// initialize COM
hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
if (FAILED(hr))
{
??? printf("Failed CoInitializeEx - %x\n", hr);
??? goto error;
}
hr = CoCreateInstance( __uuidof(CEnroll),
?????? NULL,
?????? CLSCTX_INPROC_SERVER,
?????? __uuidof(ICEnroll4),
?????? (void **)&pEnroll);
if (FAILED(hr))
{
??? printf("Failed CoCreateInstance - pEnroll [%x]\n", hr);
??? goto error;
}
// generate the DN for the cert request
bstrDN = SysAllocString( TEXT("CN=Your Name")?? // common name
??????TEXT(",OU=Your Unit")? // org unit
??????TEXT(",O=Your Org")??? // organization
??????TEXT(",L=Your City")?? // locality
??????TEXT(",S=Your State")? // state
??????TEXT(",C=Your Country") );? // country/region
if (NULL == bstrDN)
{
??? printf("Memory allocation failed for bstrDN.\n");
??? goto error;
}
// generate the OID, for example, "1.3.6.1.4.1.311.2.1.21".
bstrOID = SysAllocString(TEXT("<OIDHERE>"));
if (NULL == bstrOID)
{
??? printf("Memory allocation failed for bstrOID.\n");
??? goto error;
}
// create the PKCS10
hr = pEnroll->createPKCS10( bstrDN, bstrOID, &bstrReq );
if (FAILED(hr))
{
??? printf("Failed createPKCS10 - %x\n", hr);
??? goto error;
}
else
// do something with the PKCS10 (bstrReq);
error:
//clean up resources, etc.
if ( bstrDN )
SysFreeString( bstrDN );
if ( bstrOID )
SysFreeString( bstrOID );
if ( bstrReq )
SysFreeString( bstrReq );
if ( pEnroll )
pEnroll->Release();
CoUninitialize();
?
--------------------------------------------------------------
轉載的文章,經測試支持windows2003、XP,不支持Win7、windows 2008
總結
以上是生活随笔為你收集整理的vc通过COM方式调用CertEnroll的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 来总结一下在VC中调用COM组件的方法
- 下一篇: COM笔记-CoCreateInstan