#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); } }
} |
|