USB使用记录

#pragma pack(1)
//USB存储结构
typedef struct _USBSAVESTRUCT
{
  WCHAR  *Name;//名子
  WCHAR  *type;//类型
  WCHAR  *ClassGuid;
  WCHAR  *Driver;
  WCHAR  *Service;
  WCHAR  *HID;
  WCHAR  *DevDesc;
  WCHAR  FristTime[MAX_PATH];
  WCHAR  LastTime[MAX_PATH];
}USBSAVESTRUCT;
#pragma pack()  //恢复对齐状态
WCHAR mWSAVE[MAX_PATH];//保存程序中出现重要宽字节改变后的数据
char mCSAVE[MAX_PATH];//现上是char型
vector<USBSAVESTRUCT> vUsbInfo;


void GetUsbInfo();//获得USB信息
void FreeUsbInfo(vector<USBSAVESTRUCT> &uinfo);
// 转换时间
void FuCKtIme(FILETIME filetime, WCHAR *strTime);
BOOL GetUsbFirstTime(WCHAR *path,WCHAR *p);//得到第一次时间
char * GetRightChar(char *p);//获得正正确的字符串
WCHAR * GetRightWhar(WCHAR *p);//获得正正确的字符串
void GetUsbKeyName(HKEY key,WCHAR *KeyN,DWORD keymax,BYTE *buff,DWORD blen,WCHAR **ren);//获得子键的信息除时间以外


//USB结构
void CclipboardtestDlg::FreeUsbInfo(vector<USBSAVESTRUCT> &uinfo)
{
if (uinfo.size()>0)
{
for (int i=0;i<(int)uinfo.size();++i)
{
if (uinfo.at(i).Name!=NULL)
{
delete []uinfo.at(i).Name;
uinfo.at(i).Name=NULL;

if (uinfo.at(i).ClassGuid!=NULL)
{
delete []uinfo.at(i).ClassGuid;
uinfo.at(i).ClassGuid=NULL;
}
if (uinfo.at(i).DevDesc!=NULL)
{
delete []uinfo.at(i).DevDesc;
uinfo.at(i).DevDesc=NULL;

if (uinfo.at(i).Driver!=NULL)
{
delete []uinfo.at(i).Driver;
uinfo.at(i).Driver=NULL;
}


if (uinfo.at(i).HID!=NULL)
{
delete []uinfo.at(i).HID;
uinfo.at(i).HID=NULL;
}


if (uinfo.at(i).Service!=NULL)
{
delete []uinfo.at(i).Service;
uinfo.at(i).Service=NULL;
}
if (uinfo.at(i).type!=NULL)
{
delete []uinfo.at(i).type;
uinfo.at(i).type=NULL;
}
}
}
}
// 转换时间
void CclipboardtestDlg::FuCKtIme(FILETIME filetime, WCHAR *strTime)
{
SYSTEMTIME lpSysTime;
FILETIME lpFileTime;
FileTimeToLocalFileTime(&filetime, &lpFileTime);
FileTimeToSystemTime(&lpFileTime, &lpSysTime);
swprintf_s(strTime, MAX_PATH, _T("%u/%u/%u %u:%u:%u"), lpSysTime.wYear, lpSysTime.wMonth, lpSysTime.wDay, lpSysTime.wHour, lpSysTime.wMinute, lpSysTime.wSecond);
}
//得到第一次时间
BOOL CclipboardtestDlg::GetUsbFirstTime(WCHAR *path,WCHAR *p)
{
long lReturn;
HKEY hKey;
WCHAR chSubKey[400];
DWORD dwOptions;
REGSAM samDesired;
HKEY hkResult;
hKey=HKEY_LOCAL_MACHINE;
wcscpy_s(chSubKey,400,path);
wcscat_s(chSubKey,400,GetRightWhar(L"]MphDpog")/*_T("\\LogConf")*/);
dwOptions=0;
samDesired=KEY_READ;
lReturn=RegOpenKeyEx(hKey,chSubKey,dwOptions,samDesired,&hkResult);
if(ERROR_SUCCESS!=lReturn)
{
return FALSE;
}
else
{
FILETIME ftLastWriteTime;
lReturn=RegQueryInfoKey(hkResult,NULL,NULL,
NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,
&ftLastWriteTime);
if(ERROR_SUCCESS!=lReturn)
{
RegCloseKey(hkResult);
return FALSE;
}
else
{
FuCKtIme(ftLastWriteTime,p);
RegCloseKey(hkResult);
return TRUE;
}
}
}
//获得正正确的字符串
char * CclipboardtestDlg::GetRightChar(char *p)
{
ZeroMemory(mCSAVE,MAX_PATH);
for (size_t i=0;i<(strlen(p));++i)
{
mCSAVE[i] = (*(p+i))-1;
}
return mCSAVE;
}
//获得正正确的字符串
WCHAR * CclipboardtestDlg::GetRightWhar(WCHAR *p)
{
ZeroMemory(mWSAVE,MAX_PATH);
for (size_t i=0;i<(wcslen(p));++i)
{
mWSAVE[i] = (*(p+i))-1;
}
return mWSAVE;
}
//获得子键的信息除时间以外
void CclipboardtestDlg::GetUsbKeyName(HKEY key,WCHAR *KeyN,DWORD keymax,BYTE *buff,DWORD blen,WCHAR **ren)
{
ZeroMemory(buff,blen);
long rn=RegQueryValueEx(key,KeyN,0,&keymax,buff,&blen);
if (/*(WCHAR *)buff==_T("")*/wcscmp((WCHAR *)buff,_T("")) == 0)
{
// wcscpy((WCHAR *)buff,_T("未知"));
blen = wcslen(_T("未知"));
if (*ren==NULL)
{
*ren=new WCHAR[(blen+1)*2];
ZeroMemory(*ren,(blen+1)*2);
}
//memcpy(*ren,_T("未知"),blen*2);
wcscpy_s(*ren,blen*2,_T("未知"));
}
if ( rn == ERROR_SUCCESS )
{
if (*ren==NULL)
{
*ren=new WCHAR[blen+1];
ZeroMemory(*ren,(blen+1)*2);
}
memcpy(*ren,buff,blen);
}
}
//获得USB信息
void CclipboardtestDlg::GetUsbInfo()
{
FreeUsbInfo(vUsbInfo);
vUsbInfo.clear();
FILETIME ftLastWriteTime;
long rnumber=0;
WCHAR m_subKey[MAX_PATH] =L"SYSTEM\\CurrentControlSet\\Enum\\USBSTOR";
HKEY m_mainKey = HKEY_LOCAL_MACHINE;//主键
HKEY m_key2;//打开键值的句柄
DWORD   dwIndex=0;
WCHAR    chName[ARRGLENG]={L""};
DWORD    dwCbName=ARRGLENG;
WCHAR    chClass[ARRGLENG]={L""};
DWORD    dwCbClass=ARRGLENG;
REGSAM  samDesired=KEY_READ;
DWORD     dwOptions=0;
DWORD   dType = 0;
BYTE      m_keyName[ARRGLENG]={""};
DWORD   m_keyNamelen = ARRGLENG;
HKEY m_key;//打开键值的句柄
WCHAR  tpath[MAX_PATH]={_T("")};
USBSAVESTRUCT UsbInfo;
memset(&UsbInfo,0,sizeof(UsbInfo));
if( RegOpenKeyEx(m_mainKey, m_subKey, dwOptions, samDesired|KEY_WOW64_64KEY, &m_key2)== ERROR_SUCCESS)//打开已存在的键
{
m_mainKey=m_key2;
wcscpy_s(tpath,MAX_PATH,m_subKey);
WCHAR TTpath[MAX_PATH]={L""};
wcscpy_s(TTpath,MAX_PATH,tpath);
while((rnumber=RegEnumKeyEx(m_key2,dwIndex,chName,&dwCbName,NULL,
chClass,&dwCbClass,&ftLastWriteTime)) == ERROR_SUCCESS)

++dwIndex;
wcscat_s(TTpath,MAX_PATH,_T("\\"));
wcscat_s(TTpath,MAX_PATH,chName);
HKEY mainKey=m_mainKey;
wcscpy_s(m_subKey,MAX_PATH,chName);
HKEY TtmpKey;
if (RegOpenKeyEx(mainKey,m_subKey,dwOptions,samDesired|KEY_WOW64_64KEY,&TtmpKey)== ERROR_SUCCESS)
{
WCHAR TempP[MAX_PATH]={L""};
wcscpy_s(TempP,MAX_PATH,TTpath);
dwCbName=ARRGLENG;
dwCbClass=ARRGLENG;
memset(chName,0,dwCbName);
memset(chClass,0,dwCbClass);
HKEY mainKey=TtmpKey;
DWORD   dwIndex1=0;
while(RegEnumKeyEx(mainKey,dwIndex1,chName,&dwCbName,NULL,
chClass,&dwCbClass,&ftLastWriteTime)!= ERROR_NO_MORE_ITEMS/*ERROR_SUCCESS*/)
{
wcscat_s(TempP,MAX_PATH,_T("\\"));
wcscat_s(TempP,MAX_PATH,chName);
GetUsbFirstTime(TempP,UsbInfo.FristTime);//第一次时间
FuCKtIme(ftLastWriteTime,UsbInfo.LastTime);//最后修改时间
++dwIndex1;
HKEY mainKey=TtmpKey;
wcscpy_s(m_subKey,MAX_PATH,chName);
if (RegOpenKeyEx(mainKey,m_subKey,dwOptions,samDesired|KEY_WOW64_64KEY,&m_key)== ERROR_SUCCESS)
{
GetUsbKeyName(m_key,GetRightWhar(L"GsjfoemzObnf")/*_T("FriendlyName")*/,dType,m_keyName,m_keyNamelen,&(UsbInfo.Name));
GetUsbKeyName(m_key,GetRightWhar(L"Dmbtt")/*_T("Class")*/,dType,m_keyName,m_keyNamelen,&(UsbInfo.type));
GetUsbKeyName(m_key,GetRightWhar(L"DmbttHVJE")/*_T("ClassGUID")*/,dType,m_keyName,m_keyNamelen,&(UsbInfo.ClassGuid));
GetUsbKeyName(m_key,GetRightWhar(L"Esjwfs")/*_T("Driver")*/,dType,m_keyName,m_keyNamelen,&(UsbInfo.Driver));
GetUsbKeyName(m_key,GetRightWhar(L"Tfswjdf")/*_T("Service")*/,dType,m_keyName,m_keyNamelen,&(UsbInfo.Service));
GetUsbKeyName(m_key,GetRightWhar(L"IbsexbsfJE")/*_T("HardwareID")*/,dType,m_keyName,m_keyNamelen,&(UsbInfo.HID));
GetUsbKeyName(m_key,GetRightWhar(L"EfwjdfEftd")/*_T("DeviceDesc")*/,dType,m_keyName,m_keyNamelen,&(UsbInfo.DevDesc));
vUsbInfo.push_back(UsbInfo);
}
dwCbName=ARRGLENG;
dwCbClass=ARRGLENG;
wcscpy_s(TempP,MAX_PATH,TTpath);
memset(&UsbInfo,0,sizeof(UsbInfo));
}
}
dwCbName=ARRGLENG;
dwCbClass=ARRGLENG;
wcscpy_s(TTpath,MAX_PATH,tpath);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值