www.pudn.com > CA.rar > UsbInfoPage.cpp
// 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://目录
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;
}