CaCertManPage.cpp
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:18k
源码类别:

CA认证

开发平台:

Visual C++

  1. // CaCertManPage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "minica.h"
  5. #include "CaCertManPage.h"
  6. #include "MiniMainDlg.h"
  7. #include "CaCertIniSetPage.h"
  8. #include ".GenericClassLanguage.h"
  9. #include "minict.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CCaCertManPage property page
  17. IMPLEMENT_DYNCREATE(CCaCertManPage, CPropertyPage)
  18. CCaCertManPage::CCaCertManPage() : CPropertyPage(CCaCertManPage::IDD)
  19. {
  20. //{{AFX_DATA_INIT(CCaCertManPage)
  21. // NOTE: the ClassWizard will add member initialization here
  22. //}}AFX_DATA_INIT
  23. m_pRootItem = NULL;
  24. m_pRevokwItem = NULL;
  25. m_bDbReady = TRUE;
  26. }
  27. CCaCertManPage::~CCaCertManPage()
  28. {
  29. }
  30. void CCaCertManPage::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CPropertyPage::DoDataExchange(pDX);
  33. //{{AFX_DATA_MAP(CCaCertManPage)
  34. DDX_Control(pDX, IDC_LIST, m_List);
  35. //}}AFX_DATA_MAP
  36. }
  37. BEGIN_MESSAGE_MAP(CCaCertManPage, CPropertyPage)
  38. //{{AFX_MSG_MAP(CCaCertManPage)
  39. ON_WM_DESTROY()
  40. ON_NOTIFY(NM_RCLICK, IDC_LIST, OnRclickList)
  41. //}}AFX_MSG_MAP
  42. END_MESSAGE_MAP()
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CCaCertManPage message handlers
  45. BOOL CCaCertManPage::IsDbReady()
  46. {
  47. return m_bDbReady;
  48. }
  49. BOOL CCaCertManPage::OnInitDialog() 
  50. {
  51. CPropertyPage::OnInitDialog();
  52. // TODO: Add extra initialization here
  53. m_Image.Create(16,16,TRUE|ILC_COLOR24,20,1);
  54. //24:每个图片的宽度为24
  55. //24:每个图片的高度为24
  56. //TRUE  该图以透明方式显示
  57. //ILC_COLOR24,  颜色数为24位(其他可选常量祥见有关API)
  58. //16:    创建时容量为3个图片
  59. //1:    图片数量超出当前容量时,自动扩容,每次扩容1个图片的容量
  60. HICON hIcon =  NULL;
  61. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  62. MAKEINTRESOURCE(IDI_ICON_ENC), IMAGE_ICON, 16, 16, 0);
  63. m_Image.Add(hIcon);//0 - 有效
  64. DestroyIcon(hIcon);
  65. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  66. MAKEINTRESOURCE(IDI_ICON_REVOKE), IMAGE_ICON, 16, 16, 0);
  67. m_Image.Add(hIcon);//1   - 作废
  68. DestroyIcon(hIcon);
  69. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  70. MAKEINTRESOURCE(IDI_ICON_KEY2), IMAGE_ICON, 16, 16, 0);
  71. m_Image.Add(hIcon);//2   - 目录
  72. DestroyIcon(hIcon);
  73. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  74. MAKEINTRESOURCE(IDI_ICON_CERT), IMAGE_ICON, 16, 16, 0);
  75. m_Image.Add(hIcon);//3   - 证书
  76. DestroyIcon(hIcon);
  77. m_List.SetImageList(&m_Image, LVSIL_SMALL);
  78. m_List.SetExtendedStyle(LVS_EX_GRIDLINES);
  79. m_List.InsertColumn(0, MiniCT_0600, LVCFMT_LEFT, 130); //MiniCT_0600 "证书分类"
  80. m_List.InsertColumn(1, MiniCT_0601, LVCFMT_LEFT, 40); //MiniCT_0601 "序号"
  81. m_List.InsertColumn(2, MiniCT_0602, LVCFMT_LEFT, 40); //MiniCT_0602 "密钥"
  82. m_List.InsertColumn(3, MiniCT_0603, LVCFMT_LEFT, 120); //MiniCT_0603 "用户信息"
  83. m_List.InsertColumn(4, MiniCT_0604, LVCFMT_LEFT, 70); //MiniCT_0604 "起始时间"
  84. m_List.InsertColumn(5, MiniCT_0605, LVCFMT_LEFT, 50); //MiniCT_0605 "有效期"
  85. CItemInfo* lpRoot = new CItemInfo();
  86. lpRoot->SetImage(0);
  87. lpRoot->SetItemText(_T(MiniCT_0606)); //MiniCT_0606 "已颁发证书"
  88. m_pRootItem = m_List.InsertRootItem(lpRoot);//previous on N.Y.P.D we call it CreateTreeCtrl(lp)
  89. if( m_pRootItem == NULL )
  90. return 0;
  91. CItemInfo* lpRevoke = new CItemInfo();
  92. lpRevoke->SetImage(1);
  93. lpRevoke->SetItemText(_T(MiniCT_0607)); //MiniCT_0607 "已作废证书"
  94. m_pRevokwItem = m_List.InsertRootItem(lpRevoke);//previous on N.Y.P.D we call it CreateTreeCtrl(lp)
  95. ////////////连接数据库///////////////////////////////////////////////////////////
  96. CString lpszFile = ((CMiniCaApp *)AfxGetApp())->GetAppPath() + "\MiniCA.mdb";
  97. CString connect;
  98. connect.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;
  99. Persist Security Info=False;Jet OLEDB:Database Password=hpxs",lpszFile);
  100. try
  101. {
  102. m_pDb.Open(connect);
  103. }
  104. catch(CADOException & eAdo)
  105. {
  106. AddMsg(eAdo.GetErrorMessage(), M_ERROR);
  107. m_bDbReady = FALSE;
  108. return FALSE;
  109. }
  110. if(GetCertType())
  111. QueryCert(0);
  112. m_toolTip.Create(this);
  113. m_toolTip.AddTool(GetDlgItem(IDC_LIST), "已颁发证书树列");
  114. return TRUE;  // return TRUE unless you set the focus to a control
  115.               // EXCEPTION: OCX Property Pages should return FALSE
  116. }
  117. BOOL CCaCertManPage::GetCertType()//查询数据库里面CERTTYPE表
  118. {
  119. BOOL bSucceed = TRUE;
  120. CString SQL;
  121. if(CMiniCaApp::IsBig())
  122. {
  123. SQL.Format("select * from CERTTYPEbig"); //如果繁体环境,则打开CERTTYPEbig
  124. }
  125. else
  126. SQL.Format("select * from CERTTYPE");
  127. CADORecordset* pRs = new CADORecordset(&m_pDb);
  128. try
  129. {
  130. pRs->Open(SQL, CADORecordset::openQuery);
  131. int id = 0;
  132. CString strName;
  133. while(!pRs->IsEof())//记录
  134. pRs->GetFieldValue("CERT_TYPE", id);
  135. pRs->GetFieldValue("CERT_NAME", strName);
  136. CItemInfo* lpItemInfo = new CItemInfo();
  137. lpItemInfo->SetItemText(strName);
  138. lpItemInfo->SetImage(2);
  139. stuCerType * pstuCert = new stuCerType; //最后要销毁
  140. pstuCert->m_pItem = m_List.InsertItem(m_pRootItem, lpItemInfo, TRUE);
  141. // pstuCert->m_pItem = m_List.InsertItem(m_pRevokwItem, lpItemInfo, TRUE);
  142. pstuCert->m_Type = id;
  143. m_ObCerType.AddTail(pstuCert);
  144. pRs->MoveNext();;//转到下一条纪录
  145. }
  146. }
  147. catch(CADOException & eAdo)
  148. {
  149. AddMsg(eAdo.GetErrorMessage(), M_ERROR);
  150. return FALSE;
  151. }
  152. if(pRs->IsOpen())
  153. {
  154. pRs->Close();
  155. }
  156. delete pRs;
  157. return bSucceed;
  158. }
  159. void CCaCertManPage::OnDestroy() 
  160. {
  161. CPropertyPage::OnDestroy();
  162. // TODO: Add your message handler code here
  163. //销毁 m_ObCerType
  164. stuCerType * pstuCert = NULL;
  165. for(; !m_ObCerType.IsEmpty(); )
  166. {
  167. pstuCert = (stuCerType *)m_ObCerType.RemoveHead();
  168. delete pstuCert;
  169. }
  170. if(m_pDb.IsOpen())
  171. m_pDb.Close();
  172. }
  173. UINT CCaCertManPage::GetCertSn()
  174. {
  175. int id = 0;
  176. if(!m_pDb.IsOpen())
  177. return -1;
  178. CADORecordset* pRs = new CADORecordset(&m_pDb);
  179. try
  180. {
  181. pRs->Open("Select MAX_SN from CERTSN", CADORecordset::openQuery);
  182. if(!pRs->IsEof())//存在纪录
  183. {
  184. pRs->GetFieldValue("MAX_SN", id);
  185. }
  186. }
  187. catch(CADOException & eAdo)
  188. {
  189. AddMsg(eAdo.GetErrorMessage(), M_ERROR);
  190. id = -2;
  191. }
  192. if(pRs->IsOpen())
  193. {
  194. pRs->Close();
  195. }
  196. delete pRs;
  197. return ++id;
  198. }
  199. void CCaCertManPage::SaveDb(stuSUBJECT * pSUBJECT, const int uCertLen,
  200. const int iCertType,const int uCertDay, 
  201. void * p12, const int p12l, CString pwd)
  202. {
  203. CADORecordset* pRs = new CADORecordset(&m_pDb);
  204. try
  205. {
  206. pRs->Open("CACERT", CADORecordset::openTable);
  207. pRs->AddNew();
  208. pRs->SetFieldValue("CERTTYPE", (long)iCertType);
  209. CString strCn = pSUBJECT->GetCN();
  210. pRs->SetFieldValue("CN", strCn);
  211. pRs->SetFieldValue("DAY", (long)uCertDay);
  212. //添加用户信息
  213. CString strUserInfo;
  214. while(pSUBJECT != NULL)//遍历链表
  215. {
  216. strUserInfo += pSUBJECT->cInfo;
  217. strUserInfo += " ";
  218. pSUBJECT = pSUBJECT->Link;
  219. }
  220. pRs->SetFieldValue("USERINFO", strUserInfo);
  221. // UINT uLen = strUserInfo.GetLength();
  222. // pRs->AppendChunk("USERINFO", strUserInfo.GetBuffer(0), uLen);
  223. // strUserInfo.ReleaseBuffer();
  224. pRs->AppendChunk("CERTPFX", p12, p12l);
  225. pRs->SetFieldValue("PFXPWD", pwd);
  226. pRs->SetFieldValue("KEYLEN", (long)uCertLen);
  227. COleDateTime time = COleDateTime::GetCurrentTime();
  228. pRs->SetFieldValue("BEGINTIME", time);
  229. pRs->Update();
  230. LONG lId = 0;
  231. pRs->GetFieldValue("ID", lId);//得到id
  232. SetCertSn(lId);
  233. //由于新证书制作成功,则数证管理界面中增加此证书
  234. CString sSN, sKey, sInfo, sDay, sTime;
  235. sSN.Format("%d", lId);
  236. sKey.Format("%d", uCertLen);
  237. sDay.Format("%d", uCertDay);
  238. sTime = time.Format();
  239. InsertCert(strCn, sSN, sKey, strUserInfo, sTime, sDay, iCertType);
  240. }
  241. catch(CADOException & eAdo)
  242. {
  243. AddMsg(eAdo.GetErrorMessage(), M_ERROR);
  244. }
  245. if(pRs->IsOpen())
  246. {
  247. pRs->Close();
  248. }
  249. delete pRs;
  250. }
  251. void CCaCertManPage::SetCertSn(long lSn) //设置数据库中证书序号
  252. {
  253. CString SQL;
  254. SQL.Format("Update CERTSN set MAX_SN = %d",lSn);
  255. m_pDb.Execute(SQL);
  256. }
  257. BOOL CCaCertManPage::SelectCert(CString strSQL)
  258. {
  259. BOOL bSucceed = FALSE;
  260. CADORecordset* pRs = new CADORecordset(&m_pDb);
  261. try
  262. {
  263. pRs->Open(strSQL, CADORecordset::openQuery);
  264. while(!pRs->IsEof())//记录
  265. CString sCN, 
  266. sSN,
  267. sKey,
  268. sInfo,
  269. sBegin,
  270. sDay;
  271. int Type = 0;
  272. pRs->GetFieldValue("CN", sCN);
  273. pRs->GetFieldValue("ID", sSN);
  274. pRs->GetFieldValue("KEYLEN", sKey);
  275. pRs->GetFieldValue("USERINFO", sInfo);
  276. pRs->GetFieldValue("BEGINTIME", sBegin);
  277. pRs->GetFieldValue("DAY", sDay);
  278. pRs->GetFieldValue("CERTTYPE", Type);
  279. InsertCert(sCN, sSN, sKey, sInfo, sBegin, sDay, Type);
  280. pRs->MoveNext();//转到下一条纪录
  281. }
  282. bSucceed = TRUE;
  283. }
  284. catch(CADOException & eAdo)
  285. {
  286. AddMsg(eAdo.GetErrorMessage(), M_ERROR);
  287. }
  288. if(pRs->IsOpen())
  289. {
  290. pRs->Close();
  291. }
  292. delete pRs;
  293. return bSucceed;
  294. }
  295. BOOL CCaCertManPage::SelectRevoke(CString strSQL)
  296. {
  297. BOOL bSucceed = FALSE;
  298. CADORecordset* pRs = new CADORecordset(&m_pDb);
  299. try
  300. {
  301. pRs->Open(strSQL, CADORecordset::openQuery);
  302. while(!pRs->IsEof())//记录
  303. CString sCN, 
  304. sSN,
  305. sKey,
  306. sInfo,
  307. sBegin,
  308. sDay;
  309. int Type = 0;
  310. pRs->GetFieldValue("CN", sCN);
  311. pRs->GetFieldValue("ID", sSN);
  312. pRs->GetFieldValue("KEYLEN", sKey);
  313. pRs->GetFieldValue("USERINFO", sInfo);
  314. pRs->GetFieldValue("BEGINTIME", sBegin);
  315. pRs->GetFieldValue("DAY", sDay);
  316. pRs->GetFieldValue("CERTTYPE", Type);
  317. CItemInfo* lpItemInfoi = new CItemInfo();
  318. lpItemInfoi->SetItemText(sCN);
  319. lpItemInfoi->SetImage(3);
  320. //序号,密钥,用户信息,起始时间,有效期
  321. lpItemInfoi->AddSubItemText(sSN);
  322. lpItemInfoi->AddSubItemText(sKey);
  323. lpItemInfoi->AddSubItemText(sInfo);
  324. lpItemInfoi->AddSubItemText(sBegin);
  325. lpItemInfoi->AddSubItemText(sDay);
  326. stuCerType * pstu = NULL;
  327. m_List.InsertItem(m_pRevokwItem, lpItemInfoi);
  328. pRs->MoveNext();;//转到下一条纪录
  329. }
  330. bSucceed = TRUE;
  331. }
  332. catch(CADOException & eAdo)
  333. {
  334. AddMsg(eAdo.GetErrorMessage(), M_ERROR);
  335. }
  336. if(pRs->IsOpen())
  337. {
  338. pRs->Close();
  339. }
  340. delete pRs;
  341. return bSucceed;
  342. }
  343. void CCaCertManPage::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) 
  344. {
  345. // TODO: Add your control notification handler code here
  346. //判断是否选中证书
  347. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  348. //判断当时选中几个证书
  349. UINT nSelect  =  m_List.GetSelectedCount();
  350. //得到序号值,如果不空认为选中证书
  351. CString strID = m_List.GetItemText(pNMListView->iItem,1);
  352. if(strID.IsEmpty())
  353. {
  354. //判断是否选中以作废证书
  355. // CString strName = m_List.GetItemText(pNMListView->iItem, 0);
  356. // if(strName == "已作废证书")
  357. {
  358. // AfxMessageBox("黑名单");
  359. }
  360. return;
  361. }
  362. CPoint pt;
  363. GetCursorPos(&pt); // 当前鼠标坐标
  364. // if(GetCount()<=0)
  365. // return;
  366. BCMenu m_PopMenu;
  367. m_PopMenu.LoadMenu(IDR_MENU_DBMEN);
  368. m_PopMenu.LoadToolbar(IDR_MINICAMENU);
  369. CLanguage::TranslateMenu(&m_PopMenu, MAKEINTRESOURCE(IDR_MENU_DBMEN));
  370. CMenu * pPopup = m_PopMenu.GetSubMenu(0);
  371. SetForegroundWindow(); //点击可以关闭
  372. ASSERT(pPopup);
  373. if(nSelect > 1)
  374. pPopup->EnableMenuItem(ID_MENUITEM_VIEWCERT,MF_GRAYED | MF_BYCOMMAND);//如果选择多个,则屏蔽查看证书选择
  375. UINT nSelection = pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL|
  376. TPM_NONOTIFY|TPM_RETURNCMD,pt.x, pt.y,this, NULL);
  377. m_PopMenu.DestroyMenu();
  378. /* //循环多个选项,生成SQL语句
  379. // CUIntArray iniArray;
  380. CString strIDSet;//ID集合
  381. POSITION pos = m_List.GetFirstSelectedItemPosition();
  382. if (pos == NULL)
  383. return;
  384. while (pos)
  385. {
  386. CString strTemp;
  387. int iSelect = m_List.GetNextSelectedItem(pos);
  388. strTemp = m_List.GetItemText(iSelect, 1);
  389. if(!strTemp.IsEmpty())
  390. {
  391. strIDSet += strTemp;
  392. strIDSet += ",";
  393. // iniArray.Add(iSelect);
  394. }
  395. }
  396. UINT m_NameType = 0;
  397. CMiniMainDlg * pMain = (CMiniMainDlg *)AfxGetMainWnd();
  398. CCertDbPage * pDb = (CCertDbPage *)(pMain->GetPage("CCertDbPage"));
  399. if(pDb)
  400. {
  401. m_NameType = pDb->GetNameType();
  402. }
  403. CString SQL;
  404. SQL.Format("Select ID,CN,PFXPWD,CERTPFX,CERTSTATE from CACERT Where ID in (%s)",strIDSet);
  405. //Select PFXPWD,CERTPFX,CERTSTATE from CACERT Where ID in (1,2,3,4,5,6,7,8,9,) 
  406. UINT id = 0;
  407. _RecordsetPtr m_pRecordset;
  408. try
  409. {
  410. if (m_pConnection == NULL)
  411. {
  412. return;
  413. }
  414. _variant_t Affected;//影响行数
  415. HRESULT hr = m_pRecordset.CreateInstance(_uuidof(Recordset));
  416. m_pRecordset->Open(_bstr_t(SQL), _variant_t((IDispatch*)m_pConnection,true),
  417. adOpenDynamic,adLockOptimistic,adCmdText);//打开表
  418. while(!m_pRecordset->adoEOF)//存在纪录
  419. {
  420. //得到公钥、私钥、pfx文件名称
  421. _variant_t vt = m_pRecordset->Fields->GetItem("CN")->Value;
  422. CString strCN;
  423. Variant2CString(vt, strCN);
  424. vt = m_pRecordset->Fields->GetItem("ID")->Value;
  425. CString strID;
  426. Variant2CString(vt, strID);
  427. CString strName;
  428. if(0 == m_NameType)//用户名
  429. {
  430. strName.Format("\M%s", strCN);
  431. }
  432. else if(1 == m_NameType)//序号
  433. {
  434. strName.Format("\M%s", strID);
  435. }
  436. else if(2 == m_NameType)//用户名 + 序号
  437. {
  438. strName.Format("\M%s%s", strCN, strID);
  439. }
  440. else if(3 == m_NameType)//序号 + 用户名
  441. {
  442. strName.Format("\M%s%s", strID, strCN);
  443. }
  444. CString strCertName = m_Path + strName + "Cert.Cer";
  445. CString strKeyName = m_Path + strName + "Key.Cer";
  446. CString strPfxName = m_Path + strName + ".Pfx";
  447. _variant_t PFXPwd = m_pRecordset->Fields->GetItem("PFXPWD")->Value;
  448. CString strPfxPwd;
  449. Variant2CString(PFXPwd,strPfxPwd);
  450. _variant_t varBLOB;
  451. long lDataSize = m_pRecordset->Fields->GetItem("CERTPFX")->ActualSize;
  452. if(lDataSize <= 0) return;
  453. varBLOB = m_pRecordset->Fields->GetItem("CERTPFX")->GetChunk(lDataSize);
  454. if(varBLOB.vt == (VT_ARRAY | VT_UI1))
  455. {
  456. BYTE * pBuf = new BYTE[lDataSize + 1];
  457. memset(pBuf, 0, lDataSize + 1);
  458. SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
  459. if(nSelection == ID_MENUITEM_VIEWCERT)//查看
  460. {
  461. X509 * x509 = NULL;
  462. char out[100] = {0};
  463. x509 = CCertKey::LoadCert((char *)pBuf,lDataSize,strPfxPwd.GetBuffer(0),out);
  464. strPfxPwd.ReleaseBuffer();
  465. if(x509)
  466. ((CMiniMainDlg *)AfxGetMainWnd())->ViewCertInfo(0,0,x509);
  467. }
  468. else if(nSelection == ID_MENUITEM_DOWNCERT)//保存公钥
  469. {
  470. char out[100]={0};
  471. if(!ParsePfx((char *)pBuf, lDataSize, strPfxPwd.GetBuffer(0), strCertName,
  472. NULL,NULL,PEM,out))
  473. AddMsg(out, ERROR);
  474. strPfxPwd.ReleaseBuffer();
  475. }
  476. else if(nSelection == ID_MENUITEM_DOWNKEY)//保存私钥
  477. {
  478. char out[100]={0};
  479. if(!ParsePfx((char *)pBuf, lDataSize, strPfxPwd.GetBuffer(0), NULL,
  480. strKeyName,strPfxPwd.GetBuffer(0),PEM,out))
  481. AddMsg(out, ERROR);
  482. strPfxPwd.ReleaseBuffer();
  483. }
  484. else if(nSelection == ID_MENUITEM_DOWNPFX)//保存PFX
  485. {
  486. CFile file;
  487. if(file.Open(strPfxName,CFile::modeCreate|CFile::modeWrite)) //存文件
  488. {
  489. file.Write(pBuf,lDataSize);
  490. file.Close();
  491. }
  492. }
  493. else if(nSelection == ID_MENUITEM_REVOKEPFX)//作废PFX
  494. {
  495. m_pRecordset->Fields->GetItem("CERTSTATE")->PutValue(_variant_t((long)-1));
  496. m_pRecordset->Update();
  497. CString info;
  498. info.Format("证书%s作废成功", strID);
  499. AddMsg(info);
  500. int index = m_List.GetSelectedItem();
  501. CSuperGridCtrl::CTreeItem * pSelItem = m_List.GetTreeItem(index);
  502. if(pSelItem != NULL)
  503. {
  504. m_List.DeleteItemEx(pSelItem, index);
  505. } //删除项目,移动项目到作废列表
  506. }
  507. SafeArrayUnaccessData (varBLOB.parray);//Decrements the lock count of an array
  508. }
  509. m_pRecordset->MoveNext();//转到下一条纪录
  510. }
  511. if(m_pRecordset!=NULL && m_pRecordset->State)
  512. m_pRecordset->Close();
  513. // AddMsg("导出成功");
  514. }
  515. catch (_com_error &e)
  516. {
  517. DisplayError(e);
  518. }
  519. */
  520. *pResult = 0;
  521. }
  522. void CCaCertManPage::AddMsg(CString info, DWORD type)
  523. {
  524. ((CMiniMainDlg *)AfxGetMainWnd())->AddMsg(MiniCT_0000, info, type);
  525. }
  526. void CCaCertManPage::QueryCert(BOOL bDelAll)
  527. {
  528. //得到查询期限
  529. CString strQuery, strQCert, strQRevoke;
  530. strQCert.Format("Select * from CACERT Where CERTSTATE = 1 %s", strQuery);
  531. SelectCert(strQCert);
  532. strQRevoke.Format("Select * from CACERT Where CERTSTATE = -1 %s", strQuery);
  533. SelectRevoke(strQRevoke);
  534. }
  535. void CCaCertManPage::InsertCert(CString CN, CString SN, CString Key, CString Info, 
  536. CString Begin, CString Day, UINT Type) //证书为3
  537. {
  538. CItemInfo* lpItemInfoi = new CItemInfo();
  539. lpItemInfoi->SetItemText(CN);
  540. lpItemInfoi->SetImage(3);
  541. //序号,密钥,用户信息,起始时间,有效期
  542. lpItemInfoi->AddSubItemText(SN);
  543. lpItemInfoi->AddSubItemText(Key);
  544. lpItemInfoi->AddSubItemText(Info);
  545. lpItemInfoi->AddSubItemText(Begin);
  546. lpItemInfoi->AddSubItemText(Day);
  547. stuCerType * pstu = NULL;
  548. for(POSITION pos = m_ObCerType.GetHeadPosition(); pos != NULL ; m_ObCerType.GetNext(pos))
  549. {
  550. pstu = (stuCerType *)m_ObCerType.GetAt(pos);
  551. if(pstu->m_Type == Type)
  552. break;
  553. }
  554. m_List.InsertItem(pstu->m_pItem, lpItemInfoi, TRUE);
  555. }
  556. void CCaCertManPage::SetNamePath(const CString &strPath)
  557. {
  558. m_Path = strPath;
  559. }
  560. void CCaCertManPage::TranslateCT()
  561. {
  562. CHeaderCtrl * pHeader = m_List.GetHeaderCtrl();
  563. if (pHeader)
  564. {
  565. CString str = MiniCT_0600;
  566. HDITEM hdi;
  567. hdi.mask = HDI_TEXT;
  568. hdi.pszText = (LPTSTR)((LPCTSTR)str);
  569. pHeader->SetItem(0, &hdi);
  570. str = MiniCT_0601;
  571. hdi.pszText = (LPTSTR)((LPCTSTR)str);
  572. pHeader->SetItem(1, &hdi);
  573. str = MiniCT_0602;
  574. hdi.pszText = (LPTSTR)((LPCTSTR)str);
  575. pHeader->SetItem(2, &hdi);
  576. str = MiniCT_0603;
  577. hdi.pszText = (LPTSTR)((LPCTSTR)str);
  578. pHeader->SetItem(3, &hdi);
  579. str = MiniCT_0604;
  580. hdi.pszText = (LPTSTR)((LPCTSTR)str);
  581. pHeader->SetItem(4, &hdi);
  582. str = MiniCT_0605;
  583. hdi.pszText = (LPTSTR)((LPCTSTR)str);
  584. pHeader->SetItem(5, &hdi);
  585. }
  586. int nItem = m_List.GetCurIndex(m_pRootItem);
  587. m_List.SetItemText(nItem, 0, MiniCT_0606);
  588. nItem = m_List.GetCurIndex(m_pRevokwItem);
  589. m_List.SetItemText(nItem, 0, MiniCT_0607);
  590. }
  591. BOOL CCaCertManPage::PreTranslateMessage(MSG* pMsg) 
  592. {
  593. // TODO: Add your specialized code here and/or call the base class
  594. {
  595. // Let the ToolTip process this message.
  596. m_toolTip.RelayEvent(pMsg);
  597. }
  598. return CPropertyPage::PreTranslateMessage(pMsg);
  599. }