⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbinfopage.cpp

📁 基本实现了数字证书的制作、SSL安全通讯、加解密操作等功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		pPopup->EnableMenuItem(ID_MENU_CREATEDIR,MF_BYCOMMAND|MF_GRAYED); 
		pPopup->EnableMenuItem(ID_MENU_POPFILE,MF_BYCOMMAND|MF_GRAYED); 
		pPopup->EnableMenuItem(ID_MENU_DELFILE,MF_BYCOMMAND|MF_GRAYED); 
		break;
	case 2://文件
		pPopup->EnableMenuItem(ID_MENU_DELDIR,MF_BYCOMMAND|MF_GRAYED); 
	//	pPopup->EnableMenuItem(ID_MENU_POPFILE,MF_BYCOMMAND|MF_GRAYED); 
	//	pPopup->EnableMenuItem(ID_MENU_DELFILE,MF_BYCOMMAND|MF_GRAYED); 
		break;
	}

	pPopup->TrackPopupMenu(TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_LEFTALIGN,
		point.x, point.y, this, NULL);
	menu.DestroyMenu();     	
//	*pResult = 0;
}


void CUsbInfoPage::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	HTREEITEM handle=m_Tree.GetSelectedItem();
	if(handle==0)
		return ;
	DWORD info=m_Tree.GetItemData(handle);
	if(!info)
	{
		GetFileDirInfo(1000,0);
		return;//跟目录
	}
	ULONG id=GetID();
	if(info==1)//目录
	{
		EPAS_STATUS m_epsRet=epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,0,NULL);
		if(OperateMsg("epas_ChangeDir",m_epsRet))
		    GetFileDirInfo(EPAS_DIR_BY_ID,id);//得到目录信息
		
	}
	if(info==2) //文件,移动当前目录为父窗口
	{
		BeginWaitCursor(); 
		EPAS_STATUS m_epsRet=epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,GetParentID(),NULL);
		OperateMsg("epas_ChangeDir",m_epsRet);
		//得到文件信息
	    GetFileDirInfo(0,id);
		EndWaitCursor();
		return;
	}
	BeginWaitCursor(); //目录
	if(m_Tree.GetItemText(handle)=="Root")
		id=0;
	m_epsRet=epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,id,NULL);
	OperateMsg("epas_ChangeDir",m_epsRet);
	EndWaitCursor();	
	*pResult = 0;
}

bool CUsbInfoPage::CreateDir(CString id)
{
	EPAS_DIRINFO di;
	ZeroMemory(&di,sizeof(EPAS_DIRINFO));
	char iBuf[80]={0};
	strcpy(iBuf,id);
	sscanf(iBuf,"%lx",&di.ulID);
	BeginWaitCursor(); 
	m_epsRet=epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,0,NULL);
	m_epsRet = epas_CreateDir(m_handle,0,NULL,NULL,&di,sizeof(di));
	EndWaitCursor();
	if(!OperateMsg("epas_CreateDir",m_epsRet))
		return false;
	else
		return true;
}


void CUsbInfoPage::OnMenuCreatedir() 
{
	// TODO: Add your command handler code here
	m_type=0;	
	m_List.AddMsg("请输入目录ID",M_WARING);
	GetDlgItem(IDC_EDIT_INPUTID)->SetFocus();

}

void CUsbInfoPage::OnMenuDeldir() 
{
	// TODO: Add your command handler code here
	ULONG id=GetID();
	if(id==-1) return;
	BeginWaitCursor(); 
	m_epsRet = epas_DeleteDir(m_handle,EPAS_DIR_BY_LONG_ID,id,NULL);
	EndWaitCursor();
	if(!OperateMsg("epas_DeleteDir",m_epsRet))
		return ;
	GetDir();
	GetFreeDevice();
	((CUsbKeyApp * )AfxGetApp())->m_ChangeKey=true;

	
}

void CUsbInfoPage::OnMenuKeyfile() 
{
	// TODO: Add your command handler code here
	BeginWaitCursor(); 
	EPAS_FILEINFO fi;
	unsigned char pucKey1[16];
	unsigned char pucKey2[16];
	unsigned char pucTarget[16];
	unsigned long ulWritten;
	UCHAR buf[2]={11};
	UCHAR *p=buf;
	MD5_HMAC(
		NULL,
		0,
		p,
		lstrlen((char*)p),
		pucKey1,
		pucKey2,
		pucTarget
		);

	// Create first key file.
	ZeroMemory(&fi, sizeof(EPAS_FILEINFO));
	
	fi.ulID = 100;
	fi.ulFileSize = 16;
	fi.ucFileType = EPAS_FILETYPE_KEY;
	fi.ucReadAccess = EPAS_ACCESS_NONE;
	fi.ucWriteAccess = EPAS_ACCESS_ANYONE;
	fi.ucCryptAccess = EPAS_ACCESS_ANYONE;
	
	m_epsRet = epas_CreateFile(
		m_handle,
		0,
		&fi,
		sizeof(EPAS_FILEINFO)
		);
	
	m_epsRet = epas_Write(
		m_handle,
		0,
		0,
		pucKey1,
		16,
		&ulWritten);
	OperateMsg("epas_key1",m_epsRet);
	// Create second key file.
	ZeroMemory(&fi, sizeof(EPAS_FILEINFO));
	
	fi.ulID = 200;
	fi.ulFileSize = 16;
	fi.ucFileType = EPAS_FILETYPE_KEY;
	fi.ucReadAccess = EPAS_ACCESS_NONE;
	fi.ucWriteAccess = EPAS_ACCESS_ANYONE;
	fi.ucCryptAccess = EPAS_ACCESS_ANYONE;
	
	m_epsRet = epas_CreateFile(
		m_handle,
		0,
		&fi,
		sizeof(EPAS_FILEINFO)
		);
		
	m_epsRet = epas_Write(
		m_handle,
		0,
		0,
		pucKey2,
		16,
		&ulWritten);
	OperateMsg("epas_key2",m_epsRet);
	EndWaitCursor();
	GetDir();
	GetFreeDevice();
	
}

bool CUsbInfoPage::PutFile(CString id)
{
	CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		"所有文件(*.*)|*.*||",NULL );
	if(dlg.DoModal()!=IDOK) return false;
	CString filename=dlg.GetPathName();
	CFile File;
	if(!File.Open(filename, CFile::modeRead | CFile::typeBinary))
		return false;
	int len=File.GetLength();		//得到文件大小
	EPAS_FILEINFO fi;
	ZeroMemory(&fi,sizeof(EPAS_FILEINFO));
	BeginWaitCursor(); 
	char iBuf[80]={0};
	strcpy(iBuf,id);
	sscanf(iBuf,"%lx",&fi.ulID);
	fi.ucFileType = EPAS_FILETYPE_DATA;
	fi.ulFileSize = len;
	fi.ucReadAccess = EPAS_ACCESS_ANYONE;
	fi.ucWriteAccess = EPAS_ACCESS_ANYONE;
	fi.ucCryptAccess = EPAS_ACCESS_ANYONE;
	
	m_epsRet = epas_CreateFile(
		m_handle,//设备上下文
		0,//必须为0
		&fi,
		sizeof(EPAS_FILEINFO)//fi参数缓冲区尺寸
		);	
	if(!OperateMsg("epas_CreateFile",m_epsRet))
		return false;
	
	File.Seek(0,CFile::begin);
	BYTE m_buf[8000]={0};
	unsigned long num=File.Read(m_buf, 8000);
	
	unsigned long ulWritten;
	m_epsRet = epas_Write(
		m_handle,//设备上下文
		0,//必须为0
		0,//相对文件头的偏移seek
		m_buf,//保存文件内容的缓冲区
		num,//要写入尺寸
		&ulWritten//成功写入尺寸
		);
	OperateMsg("epas_Write",m_epsRet);
	if(num!=ulWritten)
	{
		m_List.AddMsg("写入大小不相等",M_ERROR);
		return false;
	}
	epas_CloseFile(m_handle);
	OperateMsg("epas_CloseFile",m_epsRet);
	EndWaitCursor();
	return true;
}

void CUsbInfoPage::OnMenuPutfile() 
{
	// TODO: Add your command handler code here
	m_type=1;
	m_List.AddMsg("请输入文件ID",M_WARING);
	GetDlgItem(IDC_EDIT_INPUTID)->SetFocus();

}

void CUsbInfoPage::OnMenuPopfile() 
{
	// TODO: Add your command handler code here
	EPAS_FILEINFO fi;
	unsigned long ulReaded;
	BYTE pBuf[8000];
	// First, you must open the file and get the information
	// of it.
	ULONG id=GetID();
	if(id==-1) return;
	BeginWaitCursor(); 
	m_epsRet = epas_OpenFile(//打开文件
		m_handle,
		0,//基于当前权限
		id,//文件ID
		&fi,//文件结构
		sizeof(EPAS_FILEINFO)//结构长度
		);
	if (OperateMsg("Open file",m_epsRet))
	{
		m_epsRet = epas_Read(//读文件
			m_handle,
			0,//必须为0
			0,//偏移
			pBuf,//目的缓冲区
			fi.ulFileSize,//要读尺寸
			&ulReaded//成功尺寸
			);
		if(!OperateMsg("Read file",m_epsRet))
		{
			EndWaitCursor();
			return ;
		}
	}
	else
	{
		EndWaitCursor();
		return ;
	}
	EndWaitCursor();
	
	CFileDialog dlg(false,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		"所有文件(*.*)|*.*||",NULL );
	if(dlg.DoModal()!=IDOK) return ;
	CString filename=dlg.GetPathName();
	CFile File;
	if(!File.Open(filename, CFile::modeCreate|CFile::modeWrite))
		return ;
	File.Write(pBuf,ulReaded);
	File.Close();
	m_List.AddMsg("操作成功");
}

void CUsbInfoPage::OnMenuDelfile() 
{
	// TODO: Add your command handler code here
	ULONG id=GetID();
	if(id==-1) return;
	BeginWaitCursor(); 
	m_epsRet = epas_DeleteFile(
		m_handle,
		0,//必须为0
		id//文件ID
		);
	if(!OperateMsg("del file",m_epsRet))
		return ;
	EndWaitCursor();
	GetDir();
	GetFreeDevice();
	((CUsbKeyApp * )AfxGetApp())->m_ChangeKey=true;

}


bool CUsbInfoPage::GetAccessInfo(BYTE * create,BYTE * del,BYTE *max, BYTE *counter)
{
	EPAS_ACCESSINFO aInfo;
	m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_ACCESSINFO,NULL,&aInfo,sizeof(aInfo));
	if(!OperateMsg("epas_GetProperty",m_epsRet))
		return false;
	*create=aInfo.ucCreateAccess;
	*del=aInfo.ucDeleteAccess;
	*max=aInfo.ucMaxPinRetries;
	*counter=aInfo.ucCurPinCounter;
	return true;
}

bool CUsbInfoPage::SetProperty(BYTE * create, BYTE * del)
{
	BYTE crea,delte,max,counter;
	GetAccessInfo(&crea,&delte,&max,&counter);
	EPAS_ACCESSINFO ai;
	ZeroMemory(&ai,sizeof(ai));
	ai.ucCreateAccess = *create;
	ai.ucDeleteAccess = *del;
	ai.ucMaxPinRetries = max;
	ai.ucCurPinCounter = counter;
	
	m_epsRet = epas_SetProperty(m_handle,
		EPAS_PROP_ACCESSINFO,
		NULL,
		&ai,
		sizeof(ai));
	return OperateMsg("epas_SetProperty",m_epsRet);

}

BOOL CUsbInfoPage::OnSetActive() 
{
	// TODO: Add your specialized code here and/or call the base class
	GetDir();
	GetFreeDevice();
	
	return CPropertyPage::OnSetActive();
}

void CUsbInfoPage::OnBOk() //执行操作
{
	// TODO: Add your control notification handler code here
	if(m_type==-1)
		return;
	CString id;
	GetDlgItemText(IDC_EDIT_INPUTID,id);
	if(id=="")
	{
		m_List.AddMsg("ID为空",M_WARING);
		return;
	}
	if(m_type==0)//目录
	{
		if(CreateDir(id))
			m_List.AddMsg("建立目录成功");
		else
			m_List.AddMsg("建立目录失败",M_ERROR);
	}
	else if(m_type==1)//文件
	{
		if(PutFile(id))
			m_List.AddMsg("上传文件成功");
		else
			m_List.AddMsg("上传文件失败",M_ERROR);
	}
	m_type=-1;
	GetDir();
	GetFreeDevice();

}

void CUsbInfoPage::OnBCanle() //取消操作
{
	// TODO: Add your control notification handler code here
	m_type=-1;
}


bool CUsbInfoPage::Format()
{
	BeginWaitCursor(); 
	m_epsRet = epas_DeleteDir(m_handle,EPAS_DIR_BY_LONG_ID,EPAS_ROOT_DIR,NULL);
	EndWaitCursor();
	if(OperateMsg("FORMAT",m_epsRet))
		return true;
	else 
		return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -