📄 minica.cpp
字号:
//sCert = CertDB._chINFO;
memcpy(sCert, pCertDB[j]->_chINFO, pCertDB[j]->_uLENGTH);
dCertLen = pCertDB[j]->_uLENGTH;
memcpy(sKey, pCertDB[j+1]->_chINFO, pCertDB[j+1]->_uLENGTH);
dKeyLen = pCertDB[j+1]->_uLENGTH;
sPwd = pCertDB[j+1]->_chPWD;
bExter = TRUE; //已经加载到了
if(IsWindow(p_List->m_hWnd))
{
CString str;
CString strInfo;
if(i == 0)
strInfo = MiniCT_1801;
else if(i == 1)
strInfo = MiniCT_1806;
else if(i == 2)
strInfo = MiniCT_1807;
else if(i == 3)
strInfo = MiniCT_1808;
else if(i == 4)
strInfo = MiniCT_1809;
str.Format("加载外部%s...", strInfo);
p_List->AddMsg(str,M_WARING);
}
break;
}
}
}
}
if(!bExter) //没有加载到外部证书
{
HRSRC hRsrc = FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_CERT),"CERT");
dCertLen = SizeofResource(NULL, hRsrc);
HGLOBAL hgCert = LoadResource(NULL,hRsrc);
memcpy(sCert, (LPSTR)LockResource(hgCert), dCertLen);
hRsrc = FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_KEY),"CERT");
dKeyLen = SizeofResource(NULL, hRsrc);
hgCert = LoadResource(NULL,hRsrc);
memcpy(sKey, (LPSTR)LockResource(hgCert), dKeyLen);
if(IsWindow(p_List->m_hWnd))
{
CString str;
// str.Format("加载内部%s...",strInfo);
str.Format("加载内部证书...",strInfo);
p_List->AddMsg(str,M_WARING);
}
}
return TRUE;
}
OsType CMiniCaApp::GetOsType()
{
OsType ShellType;
DWORD winVer;
OSVERSIONINFO *osvi;
winVer=GetVersion();
if(winVer<0x80000000)
{/*NT */
ShellType=WinNT3;
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL)
{
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if(osvi->dwMajorVersion==4L)ShellType=WinNT4;
else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==0L)ShellType=Win2000;
else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==1L)ShellType=WinXP;
free(osvi);
}
}
else if(LOBYTE(LOWORD(winVer))<4)
ShellType=Win32s;
else
{
ShellType=Win95;
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL)
{
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)ShellType=Win98;
else if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)ShellType=WinME;
free(osvi);
}
}
return ShellType;
}
CImageList * CMiniCaApp::GetImgList()
{
return &m_ImgList;
}
CString CMiniCaApp::GetAppPath()
{
return m_AppPath;
}
BOOL CMiniCaApp::IsHpxs()
{
return m_bHpxs;
}
//---------------------------------------------------------------------------
//函数输入Gb字符,返回Big5字符
//---------------------------------------------------------------------------
CString CMiniCaApp::Gb2Big5(CString sGb)
{
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszBig5=NULL; //Big5编码的字符
CString sBig5; //返回的字符串
int iLen=0; //需要转换的字符数
pszGbs = sGb.GetBuffer(0); //读入需要转换的字符参数
//计算转换的字符数
iLen = MultiByteToWideChar (936, 0, pszGbs, -1, NULL,0) ;
//给pszGbt分配内存
pszGbt = new char[iLen*2+1];
//转换Gb码简体到Gb码繁体,使用API函数LCMapString
int iSucceed = LCMapString(0x0804,LCMAP_TRADITIONAL_CHINESE, pszGbs, -1, pszGbt, iLen*2);
//给wszUnicode分配内存
wszUnicode = new wchar_t[iLen+1];
//转换Gb码到Unicode码,使用了API函数MultiByteToWideChar
iSucceed = MultiByteToWideChar (936, 0, pszGbt, -1, wszUnicode,iLen);
//计算转换的字符数
iLen = WideCharToMultiByte (950, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ;
//给pszBig5分配内存
pszBig5 = new char[iLen+1];
//转换Unicode码到Big5码,使用API函数WideCharToMultiByte
iSucceed = WideCharToMultiByte(950, 0, (PWSTR) wszUnicode, -1, pszBig5,iLen, NULL, NULL) ;
//返回Big5码字符
sBig5 = pszBig5;
//释放内存
delete [] wszUnicode;
delete [] pszGbt;
delete [] pszBig5;
return sBig5;
}
//----------------------------
//函数输入Big5字符,返回Gb简体字符
//----------------------------
CString CMiniCaApp::Big2Gb(CString sBig)
{
char* pszBig5=NULL; //Big5编码的字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
CString sGb; //返回的字符串
int iLen=0; //需要转换的字符数
pszBig5=sBig.GetBuffer(0); //读入需要转换的字符参数
//计算转换的字符数
iLen=MultiByteToWideChar (950, 0, pszBig5, -1, NULL,0) ;
//给wszUnicode分配内存
wszUnicode=new wchar_t[iLen+1];
//转换Big5码到Unicode码,使用了API函数MultiByteToWideChar
MultiByteToWideChar (950, 0, pszBig5, -1, wszUnicode,iLen);
//计算转换的字符数
iLen=WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ;
//给pszGbt分配内存
pszGbt=new char[iLen+1];
//给pszGbs分配内存
pszGbs=new char[iLen+1];
//转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte
WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, pszGbt,iLen, NULL, NULL) ;
//转换Gb码繁体到Gb码简体,使用API函数LCMapString
LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, pszGbt, -1, pszGbs, iLen);
//返回Gb码简体字符
sGb=pszGbs;
//释放内存
delete [] wszUnicode;
delete [] pszGbt;
delete [] pszGbs;
return sGb;
}
BOOL CMiniCaApp::CharSetIsBig()
{
HDC hDc = GetWindowDC(NULL);
int CharSet = GetTextCharset(hDc);
ReleaseDC(NULL, hDc);
m_bIsBig = (CharSet == CHINESEBIG5_CHARSET) ? TRUE : FALSE;
return m_bIsBig;
}
BOOL CMiniCaApp::IsBig()
{
return m_bIsBig;
}
CString CMiniCaApp::NormalCode(CString strGb)
{
if(m_bIsBig) //繁体环境
return Gb2Big5(strGb);
else
return strGb;
}
CString CMiniCaApp::LmToHText(UCHAR * pValue, UINT uLen) //乱码转16进制
{
char * pBuf = new char[2*uLen+1];
memset(pBuf, 0, 2*uLen+1);
for(unsigned i=0; i<uLen; i++)
{
sprintf(pBuf+i*2,"%02X",pValue[i]);//02x标示1个16进制变为2个字符,空补零
}
CString str;
str.Format("%s",pBuf);
delete [] pBuf;
return str;
}
UINT CMiniCaApp::HTextToLm(char * pValue,char * pOut) //16进制转乱码
{
UINT uLen = strlen(pValue);
char temp[3]={0};//临时变量
char * lm = new char[uLen];
memset(lm,0,uLen);
for(UINT j=0;j<uLen;j+=2)
{
strncpy(temp,pValue+j,2);
lm[j/2]=HexToTen(temp);
}
memcpy(pOut,lm,uLen/2);
delete [] lm;
return uLen/2;
}
BOOL CMiniCaApp::IsXpStyle()
{
return m_ThemeHelper.IsAppThemed();
}
/*
1、建議把嚮導改成spy by sby 的形式導引...
2、建議加入選項設定的help查詢功能
3、提高編碼到4096或更高..因為現在的加密要求以非常要求
4、建議提供線上申請憑證機制。
5、建議加入對目錄檔案做加密解密的功能...
6、建議獨立出一支開啟瀏覽加密後的文件檔的程式^^*/
int CMiniCaApp::ExitInstance()
{
// TODO: Add your specialized code here and/or call the base class
// _CrtDumpMemoryLeaks(); // leak 内存泄漏检测 2 - 2
m_ImgList.DeleteImageList();
//以下某些东西可能会使程序发生异常,需要最后添加
/* CRYPTO_cleanup_all_ex_data();
ERR_remove_state(0);
CONF_modules_unload(1);
CONF_modules_free();
ERR_free_strings();
EVP_cleanup();*/
return CWinApp::ExitInstance();
}
BOOL CMiniCaApp::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (CSplashWnd::PreTranslateAppMessage(pMsg))
{
return TRUE; //splash 3 -3
}
return CWinApp::PreTranslateMessage(pMsg);
}
BOOL WINAPI CMiniCaApp::MakeSureDirectoryPathExists(LPCTSTR pszDirPath)
{
LPTSTR p, pszDirCopy;
DWORD dwAttributes;
// Make a copy of the string for editing.
__try
{
pszDirCopy = (LPTSTR)_tCharAlloc(lstrlen(pszDirPath) + 1);
if(pszDirCopy == NULL)
return FALSE;
lstrcpy(pszDirCopy, pszDirPath);
p = pszDirCopy;
// If the second character in the path is "\", then this is a UNC
// path, and we should skip forward until we reach the 2nd \ in the path.
if((*p == TEXT('\\')) && (*(p+1) == TEXT('\\')))
{
p++; // Skip over the first \ in the name.
p++; // Skip over the second \ in the name.
// Skip until we hit the first "\" (\\Server\).
while(*p && *p != TEXT('\\'))
{
p = CharNext(p);
}
// Advance over it.
if(*p)
{
p++;
}
// Skip until we hit the second "\" (\\Server\Share\).
while(*p && *p != TEXT('\\'))
{
p = CharNext(p);
}
// Advance over it also.
if(*p)
{
p++;
}
}
else if(*(p+1) == TEXT(':')) // Not a UNC. See if it's <drive>:
{
p++;
p++;
// If it exists, skip over the root specifier
if(*p && (*p == TEXT('\\')))
{
p++;
}
}
while(*p)
{
if(*p == TEXT('\\'))
{
*p = TEXT('\0');
dwAttributes = GetFileAttributes(pszDirCopy);
// Nothing exists with this name. Try to make the directory name and error if unable to.
if(dwAttributes == 0xffffffff)
{
if(!CreateDirectory(pszDirCopy, NULL))
{
if(GetLastError() != ERROR_ALREADY_EXISTS)
{
_tCharFree(pszDirCopy);
return FALSE;
}
}
}
else
{
if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
{
// Something exists with this name, but it's not a directory... Error
_tCharFree(pszDirCopy);
return FALSE;
}
}
*p = TEXT('\\');
}
p = CharNext(p);
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
// SetLastError(GetExceptionCode());
_tCharFree(pszDirCopy);
return FALSE;
}
_tCharFree(pszDirCopy);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -