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

📄 usbinfopage.cpp

📁 基本实现了数字证书的制作、SSL安全通讯、加解密操作等功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// UsbInfoPage.cpp : implementation file
//

#include "stdafx.h"
#include "UsbKey.h"
#include "UsbInfoPage.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUsbInfoPage property page

IMPLEMENT_DYNCREATE(CUsbInfoPage, CPropertyPage)

CUsbInfoPage::CUsbInfoPage() : CPropertyPage(CUsbInfoPage::IDD)
{
	//{{AFX_DATA_INIT(CUsbInfoPage)
	//}}AFX_DATA_INIT
	m_handle=((CUsbKeyApp * )AfxGetApp())->m_handle;
	m_type=-1;
}

CUsbInfoPage::~CUsbInfoPage()
{
}

void CUsbInfoPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUsbInfoPage)
	DDX_Control(pDX, IDC_LIST_INFO, m_List);
	DDX_Control(pDX, IDC_TREE, m_Tree);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUsbInfoPage, CPropertyPage)
	//{{AFX_MSG_MAP(CUsbInfoPage)
	ON_NOTIFY(NM_RCLICK, IDC_TREE, OnRclickTree)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
	ON_COMMAND(ID_MENU_CREATEDIR, OnMenuCreatedir)
	ON_COMMAND(ID_MENU_DELDIR, OnMenuDeldir)
	ON_COMMAND(ID_MENU_KEYFILE, OnMenuKeyfile)
	ON_COMMAND(ID_MENU_POPFILE, OnMenuPopfile)
	ON_COMMAND(ID_MENU_DELFILE, OnMenuDelfile)
	ON_COMMAND(ID_MENU_PUTFILE, OnMenuPutfile)
	ON_BN_CLICKED(IDC_B_OK, OnBOk)
	ON_BN_CLICKED(IDC_B_CANLE, OnBCanle)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////////

bool CUsbInfoPage::OperateMsg(CString operand,EPAS_STATUS status)//状态,何种操作
{
	CString info;
	bool b_result=false;
    switch( status )
    {
	case FT_SUCCESS:
		info="操作成功";
		b_result=true;
		break;
	case FT_CANNOT_OPEN_DRIVER:
		info=("Error: Can't open the driver");
		break;
	case FT_INVALID_DRVR_VERSION:
		info=("Error : Driver version not supported.");
		break;
	case FT_INVALID_COMMAND:
		info= ("Error : Invalid command sent to API.");
		break;
	case FT_ACCESS_DENIED:
		info= ("Error : Access denied.");
		break;
	case FT_ALREADY_ZERO: 
		info= ("Error : Counter already zero.");
		break;
	case FT_UNIT_NOT_FOUND:
		info= ("Error : Device not found.");
		break;
	case FT_DEVICE_REMOVED:
		info= ("Error : Device removed.");
		break;
	case FT_COMMUNICATIONS_ERROR: 
		info= ("Error : Device communication error.");
		break;
	case FT_DIR_NOT_FOUND:
		info= ("Error : Directory does not exist.");
		break;
	case FT_FILE_NOT_FOUND:
		info= ("Error : File not found.");
		break;
	case FT_MEM_CORRUPT:
		info= ("Error : Device memory is corrupted.");
		break;
	case FT_INTERNAL_HW_ERROR:
		info= ("Error : Internal hardware error.");
		break;
	case FT_INVALID_RESP_SIZE:
		info= ("Error : Invalid response received from the device.");
		break;
	case FT_PIN_EXPIRED: 
		info= ("Error : PIN retry attempts has expired.");
		break;
	case FT_ALREADY_EXISTS: 
		info= ("Error : Directory or file already exist.");
		break;
	case FT_NOT_ENOUGH_MEMORY: 
		info= ("Error : Not enough memory to perform the operation.");
		break;
	case FT_INVALID_PARAMETER: 
		info= ("Error : Invalid parameter sent to API.");
		break;
	case FT_INPUT_TOO_LONG: 
		info= ("Error : Input data is too long.");
		break;
	case FT_INVALID_FILE_SELECTED: 
		info= ("Error : Invalid file selected or operation.");
		break;
	case FT_DEVICE_IN_USE: 
		info= ("Error : The device is currently in use.");
		break;
	case FT_INVALID_API_VERSION: 
		info= ("Error : The version of this library is not supported.");
		break;
	case FT_TIME_OUT_ERROR: 
		info= ("Error : Communication time-out.");
		break;
	case FT_ITEM_NOT_FOUND: 
		info= ("Error : Item not found."); 
		break;
	case FT_COMMAND_ABORTED: 
		info= ("Error : Communication error, command aborted.");
		break;
	case FT_INVALID_STATUS: 
		info= ("Error : Invalid status.");
		break;
	default: 
		info= ("Error : An unknown error occurred.");
    }
	if(b_result!=true)
		m_List.AddMsg(operand+"   "+info,M_ERROR);
	return b_result;
}

/////////////////////////////////////////////////////////////////////////////
// CUsbInfoPage message handlers
bool CUsbInfoPage::ListDir(unsigned long parDid,HTREEITEM hItem)//查找目录结构
{
	EPAS_STATUS retval = FT_SUCCESS;
	EPAS_FILEINFO fi;
	ZeroMemory(&fi,sizeof(fi));
	retval = epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,parDid,NULL);
	if(!OperateMsg("epas_ChangeDir",retval))
		return false;
	for(int i=0;i<255;i++)
	{
		retval = epas_Directory(m_handle,0,i,&fi,sizeof(fi));
		if(FT_SUCCESS!=retval)
			break;
		if(EPAS_FILETYPE_DIR == fi.ucFileType)
		{
			CString strID;
			strID.Format("%X",fi.ulID);
			HTREEITEM hItemB=m_Tree.InsertItem(strID,1,2,hItem);
			m_Tree.SetItemData(hItemB,1);//目录1
			ListDir(fi.ulID,hItemB);
			retval = epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,parDid,NULL);
			if(!OperateMsg("epas_ChangeDir",retval))
				return false;
		}
		if(EPAS_FILETYPE_DATA == fi.ucFileType)
		{
			CString strID;
			strID.Format("%X",fi.ulID);
			HTREEITEM hItemA=m_Tree.InsertItem(strID,3,3,hItem);
			m_Tree.SetItemData(hItemA,2);//文件2
		}
		if(EPAS_FILETYPE_KEY== fi.ucFileType)//密药
		{	
			CString strID;
			strID.Format("%X",fi.ulID);
			HTREEITEM hItemA=m_Tree.InsertItem(strID,4,4,hItem);
			m_Tree.SetItemData(hItemA,2);//文件2

		}
		if(EPAS_FILETYPE_UNUSED == fi.ucFileType)
			break;
	}
	m_Tree.Expand(hItem,TVE_EXPAND);
	m_Tree.SetRedraw(TRUE);
	return true;	
}

bool CUsbInfoPage::GetDir() //取得目录结构
{
	// TODO: Add your control notification handler code here
	m_Tree.SetRedraw(FALSE);
	m_Tree.DeleteAllItems();
	HTREEITEM m_hRoot=m_Tree.InsertItem("Root",0,0);
	m_Tree.SetItemData(m_hRoot,0);//跟目录
	return ListDir(0,m_hRoot);
}

bool CUsbInfoPage::GetSysInfo()
{
	EPAS_SYSINFO sysInfo;
	ZeroMemory(&sysInfo,sizeof(sysInfo));
	EPAS_STATUS m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_SYSINFO,NULL,&sysInfo,sizeof(sysInfo));
	if(OperateMsg("epas_GetProperty",m_epsRet))
	{
		printf("\n=>> Free memory space:  %d bytes",sysInfo.ulFreeSpace);
		m_FreeDevice=sysInfo.ulFreeSpace;//得到剩余磁盘空间
		printf("\n=>> Max directory levels: %d",sysInfo.ucMaxDirLevels);
		printf("\n=>> File system type: %d",sysInfo.ucFileSysType);
	}
/*
	EPAS_VERSIONINFO version;
	ZeroMemory(&version,sizeof(version));

	m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_VERSIONINFO,NULL,&version,sizeof(version));
	if(OperateMsg("epas_GetProperty",m_epsRet))
	{
		printf("\n=>> Firmware Version: %d.%d\n=>> Product Code: %X",
				version.ucFwVerMajor,
				version.ucFwVerMinor,
				version.ucProductCode);		
	}
	
	unsigned long capa = 0;
	m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_CAPABILITIES,NULL,&capa,sizeof(capa));
	if(OperateMsg("epas_GetProperty",m_epsRet))
	{
		printf("\n=>> Capabilities: %X",capa);
	}
	
	
	unsigned long memSize = 0;
	m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_MEM_SIZE,NULL,&memSize,sizeof(memSize));
	if(OperateMsg("epas_GetProperty",m_epsRet))
	{
		printf("\n=>> Total memory size: %d bytes",memSize);
	}

	char fName[EPAS_FRIENDLY_NAME_SIZE+1];
	ZeroMemory(fName,EPAS_FRIENDLY_NAME_SIZE);
	m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_FRIENDLY_NAME,NULL,fName,EPAS_FRIENDLY_NAME_SIZE);
	if(OperateMsg("epas_GetProperty",m_epsRet))
	{
		printf("\n=>> Friendly token name: %s",fName);
	}
	
	unsigned long sn[2];
	m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_SERNUM,NULL,sn,sizeof(sn));
	if(OperateMsg("epas_GetProperty",m_epsRet))
	{
		printf("\n=>> Hardware serial number: 0x%08lX%08lX",sn[0],sn[1]);
	}
*/	return true;
}
void CUsbInfoPage::GetFreeDevice()
{
	GetSysInfo();
	CString strFree;
	strFree.Format("%d",m_FreeDevice);
	GetDlgItem(IDC_EDIT)->SetWindowText(strFree);

}

ULONG CUsbInfoPage::GetID()//得到文件、目录ID
{
	HTREEITEM handle=m_Tree.GetSelectedItem();
	if(handle==0)
		return -1;
	CString selectF=m_Tree.GetItemText(handle);
	char iBuf[80]={0};
	ULONG id;
	strcpy(iBuf,selectF);
	sscanf(iBuf,"%lx",&id);
	return id;

}

ULONG CUsbInfoPage::GetParentID()//得到父id
{	
	HTREEITEM handle=m_Tree.GetSelectedItem();
	if(handle==0)
		return -1;
	ULONG id;
	HTREEITEM hParent=m_Tree.GetParentItem(handle);
	CString selectF=m_Tree.GetItemText(hParent);
	if(m_Tree.GetItemText(hParent)=="Root")	
		id=0;
	else
	{
		char iBuf[80]={0};
		strcpy(iBuf,selectF);
		sscanf(iBuf,"%lx",&id);
		
	}
	return id;


}

CString CUsbInfoPage::Conver(int i)
{
	if(i==0)
		return "任何人";
	if(i==1)
		return "用户";
	if(i==2)
		return "管理员";
	if(i==7)
		return "禁止";
	else
		return "不知道";

}

void CUsbInfoPage::GetFileDirInfo(UINT type,DWORD id)//得到目录、文件信息
{
	if(type==1000)//跟目录
	{
		SetDlgItemText(IDC_EDIT_ID,"ROOT");
		SetDlgItemText(IDC_EDIT_TYPE,"ROOT");
		SetDlgItemText(IDC_EDIT_SPACE,"ROOT");
		SetDlgItemText(IDC_EDIT_READ,"ROOT");
		SetDlgItemText(IDC_EDIT_WRITE,"ROOT");
		SetDlgItemText(IDC_EDIT_CRYPT,"ROOT");
		return;
	}
	EPAS_FILEINFO fileInfo;
    m_epsRet=epas_GetFileInfo(m_handle,type,id,0,&fileInfo,sizeof(EPAS_FILEINFO));
	if(OperateMsg("epas_GetFileInfo",m_epsRet))
	{
		char buf[10]={0};
		SetDlgItemText(IDC_EDIT_ID,itoa(fileInfo.ulID,buf,16));
		SetDlgItemText(IDC_EDIT_TYPE,itoa(fileInfo.ucFileType,buf,10));
		SetDlgItemText(IDC_EDIT_SPACE,itoa(fileInfo.ulFileSize,buf,10));

		SetDlgItemText(IDC_EDIT_READ,Conver(fileInfo.ucReadAccess));
		SetDlgItemText(IDC_EDIT_WRITE,Conver(fileInfo.ucWriteAccess));
		SetDlgItemText(IDC_EDIT_CRYPT,Conver(fileInfo.ucCryptAccess));
		
	}
}

BOOL CUsbInfoPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_imgList.Create(24,24,TRUE|ILC_COLOR8,2,2);
	HICON hIcon = NULL;

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_ROOT), IMAGE_ICON, 24, 24, 0);
	m_imgList.Add(hIcon);
	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_DIRC), IMAGE_ICON, 24, 24, 0);
	m_imgList.Add(hIcon);
	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_DIRO), IMAGE_ICON, 24, 24, 0);
	m_imgList.Add(hIcon);
	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICONFILE), IMAGE_ICON, 24, 24, 0);
	m_imgList.Add(hIcon);
	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICONKEY), IMAGE_ICON, 24, 24, 0);
	m_imgList.Add(hIcon);

	m_Tree.SetImageList(&m_imgList,TVSIL_NORMAL);

//	m_Tree.SetBkColor(RGB(200,100,0));

	epas_ResetSecurityState(m_handle,0);
	GetDir();
	GetFreeDevice();
//	GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CUsbInfoPage::OnRclickTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	HTREEITEM handle=m_Tree.GetSelectedItem();
	if(handle==NULL) return;
//	m_Tree.SetCheck(handle,TRUE);
	DWORD info=m_Tree.GetItemData(handle);
	
	POINT point;
	GetCursorPos(&point);
	CMenu menu;
	menu.LoadMenu(IDR_MENU_INFO);
	CMenu* pPopup = menu.GetSubMenu(0);
	ASSERT(pPopup);
//	if(m_VerifySo==false)
//		pPopup->EnableMenuItem(ID_MENU_FORMAT,MF_BYCOMMAND|MF_GRAYED); 
	switch(info)
	{
	case 0: //根目录
		pPopup->EnableMenuItem(ID_MENU_DELDIR,MF_BYCOMMAND|MF_GRAYED); 
		pPopup->EnableMenuItem(ID_MENU_DELFILE,MF_BYCOMMAND|MF_GRAYED); 
	break;
	case 1://目录

⌨️ 快捷键说明

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