123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907 |
- #include "pch.h"
- #include "Global.h"
- #include <SetupAPI.h>
- #include <InitGuid.h>
- #include <WinIoCtl.h>
- #pragma comment(lib, "SetupAPI.lib")
- namespace Global
- {
- //////////////////////////////////////////////////////////////////////////
- // 全局变量;
- BOOL g_bTestHost = FALSE;
- TCHAR g_szCurModuleDir[MAX_PATH] = { 0 };
- TCHAR g_szCurModulePath[MAX_PATH] = { 0 };
- TCHAR g_szFna[MAX_PATH] = { 0 };
- TCHAR g_szConfig[MAX_PATH] = { 0 };
- std::string g_strMacs;
- std::vector<MacAddress> g_vtMac;
- TConfig g_tConfig;
- Global::TChassis g_AutoOnlineChassis;
- // usb;
- static GUID UsbClassGuid = { 0xA5DCBF10L, 0x6530, 0x11D2, {0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED} };
- // mac;
- static GUID MacClassGuid = { 0xAD498944, 0x762F, 0x11D0, {0x8D, 0xCB, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C} };
- // hdd;
- static GUID HDDClassGuid = { 0x53F56307, 0xB6BF, 0x11D0, {0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B} };
- //////////////////////////////////////////////////////////////////////////
- // 全局函数;
- /************************************************************************/
- /* 函数:WriteTextLog[7/28/2009 Jeff];
- /* 描述:写文本日志;
- /* 参数:;
- /* [IN] :;
- /* 返回:void;
- /* 注意:;
- /* 示例:;
- /*
- /* 修改:;
- /* 日期:;
- /* 内容:;
- /************************************************************************/
- void WriteTextLog(const TCHAR* format, ...)
- {
- if (Global::g_tConfig.com.size() == 0)
- {
- return;
- }
- // 将日志内容输入到文件中;
- // 获取今年年份;
- __time64_t gmt = time(NULL); // 获取当前日历时间(1900-01-01开始的Unix时间戳);
- struct tm gmtm = { 0 };
- localtime_s(&gmtm, &gmt); // 时间戳转成本地时间;
- // 解析出日志路径;
- TCHAR szlogpath[MAX_PATH] = { 0 };
- _stprintf_s(szlogpath, _T("%slog\\Serial Port%s Log %02d%02d.txt"), g_szCurModuleDir, Global::g_tConfig.com.substr(3, 1).c_str(), gmtm.tm_mon + 1, gmtm.tm_mday);
- // 打开或创建文件;
- FILE* fp = NULL;
- //if (_taccess(szlogpath, 0) != -1)
- #ifndef UNICODE
- if (_access(szlogpath, 0) != -1)
- #else
- if (_taccess(szlogpath, 0) != -1)
- #endif
- { // 存在;
- if (0 == _tfopen_s(&fp, szlogpath, _T("a+")))
- // 移动到末尾;
- fseek(fp, 0, SEEK_END);
- }
- else
- { // 不存在;
- _tfopen_s(&fp, szlogpath, _T("w+"));
- }
- if (fp == NULL)
- return;
- // 格式化前设置语言区域;
- TCHAR* old_locale = _tcsdup(_tsetlocale(LC_CTYPE, NULL));
- _tsetlocale(LC_CTYPE, _T("chs")); //设定中文;
- // 格式化日志内容;
- va_list args = NULL;
- int len = 0;
- TCHAR* buffer = NULL;
- va_start(args, format);
- // _vscprintf doesn't count. terminating '\0'
- len = _vsctprintf(format, args) + 1;
- buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
- _vstprintf_s(buffer, len, format, args);
- _ftprintf(fp, _T("%04d-%02d-%02d %02d:%02d:%02d %s\n"), gmtm.tm_year + 1990, gmtm.tm_mon + 1, gmtm.tm_mday, gmtm.tm_hour, gmtm.tm_min, gmtm.tm_sec, buffer);
- // 关闭文件,释放资源并设置回原语言区域;
- free(buffer);
- fclose(fp);
- _tsetlocale(LC_CTYPE, old_locale);
- free(old_locale); //还原区域设定;
- }
- void replace_str(std::string& str, const std::string& before, const std::string& after)
- {
- for (std::string::size_type pos(0); pos != std::string::npos; pos += after.length())
- {
- pos = str.find(before, pos);
- if (pos != std::string::npos)
- str.replace(pos, before.length(), after);
- else
- break;
- }
- }
- void WriteReportLog(int type, std::string des, const TCHAR* format, ...)
- {
- if (Global::g_tConfig.com.size() == 0)
- return;
- TCHAR* old_locale = _tcsdup(_tsetlocale(LC_CTYPE, NULL));
- _tsetlocale(LC_CTYPE, _T("chs")); //设定中文;
- // 格式化日志内容;
- va_list args = NULL;
- int len = 0;
- TCHAR* buffer = NULL;
- va_start(args, format);
- // _vscprintf doesn't count. terminating '\0'
- len = _vsctprintf(format, args) + 1;
- buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
- if (buffer == NULL)
- {
- _tsetlocale(LC_CTYPE, old_locale);
- free(old_locale); //还原区域设定;
- return;
- }
- _vstprintf_s(buffer, len, format, args);
- std::string content = buffer;
- content.erase(std::remove(content.begin(), content.end(), '\n'), content.end());
- content.erase(std::remove(content.begin(), content.end(), '\t'), content.end());
- std::map<std::string, std::string> report_data;
- report_data.insert(std::pair<std::string, std::string>(des, content));
- report_data.insert(std::pair<std::string, std::string>("PC-MAC", g_strMacs));
- report_data.insert(std::pair<std::string, std::string>("TV-VER", g_midInfo.version));
- report_data.insert(std::pair<std::string, std::string>("TV-CLIENTTYPE", g_midInfo.clienttype));
- report_data.insert(std::pair<std::string, std::string>("FAC-IP", g_midInfo.factoryip));
- report_data.insert(std::pair<std::string, std::string>("FAC-NAME", g_midInfo.factoryname));
- report_data.insert(std::pair<std::string, std::string>("HOST", g_midInfo.host));
- if ( type == 0 )
- g_db.InsertReportInfo("NetWork", report_data);
- else if ( type == 1 )
- g_db.InsertReportInfo("Serial", report_data);
-
- // 关闭文件,释放资源并设置回原语言区域;
- free(buffer);
- _tsetlocale(LC_CTYPE, old_locale);
- free(old_locale); //还原区域设定;
- }
- // 读取配置文件-预留;
- void GetConfig()
- {
- // 读取文件;
- FILE* pf = NULL;
- _tfopen_s(&pf, _T("./Config.json"), _T("rb"));
- if (!pf)
- return;
- // 获取文件长度;
- fseek(pf, 0, SEEK_END);
- size_t file_size = ftell(pf);
- fseek(pf, 0, SEEK_SET);
- // 读取文件内容;
- byte* pdata = (byte*)malloc(file_size);
- fread(pdata, file_size, 1, pf);
- fclose(pf);
- // Json数据;
- cJSON* pJson = cJSON_Parse((const char*)pdata);
- if (pJson == NULL)
- {
- goto end;
- }
- // 获取数据;
- g_tConfig.com = cJSON_GetObjectItem(pJson, _T("COM")) ? cJSON_GetObjectItem(pJson, _T("COM"))->valuestring : "";
- g_tConfig.baudrate = cJSON_GetObjectItem(pJson, _T("Baudrate")) ? cJSON_GetObjectItem(pJson, _T("Baudrate"))->valuestring : "115200";
- g_tConfig.mode = cJSON_GetObjectItem(pJson, _T("Mode")) ? cJSON_GetObjectItem(pJson, _T("Mode"))->valueint : 0;
- g_tConfig.warncount = cJSON_GetObjectItem(pJson, _T("WarnCount")) ? cJSON_GetObjectItem(pJson, _T("WarnCount"))->valueint : 200;
- g_tConfig.waitboot = cJSON_GetObjectItem(pJson, _T("WaitBoot")) ? cJSON_GetObjectItem(pJson, _T("WaitBoot"))->valueint : 5000;
- g_tConfig.bootread = cJSON_GetObjectItem(pJson, _T("BootRead")) ? cJSON_GetObjectItem(pJson, _T("BootRead"))->valueint : 0;
- g_tConfig.serverurl = cJSON_GetObjectItem(pJson, _T("server-url")) ? cJSON_GetObjectItem(pJson, _T("server-url"))->valuestring : "";
- g_tConfig.chassis = cJSON_GetObjectItem(pJson, _T("Chassis")) ? cJSON_GetObjectItem(pJson, _T("Chassis"))->valuestring : "";
- g_tConfig.waitend = cJSON_GetObjectItem(pJson, _T("WaitEnd")) ? cJSON_GetObjectItem(pJson, _T("WaitEnd"))->valueint : 1000;
- // 频道;
- cJSON* pItem = NULL;
- cJSON* pChannel = cJSON_GetObjectItem(pJson, "Channel");
- if (pChannel)
- {
- int nCount = cJSON_GetArraySize(pChannel);
- for (int i = 0; i < nCount; i++)
- {
- pItem = cJSON_GetArrayItem(pChannel, i);
- if (pItem && pItem->child)
- {
- g_tConfig.channel.insert(pair<std::string, std::string>(pItem->child->string, pItem->child->valuestring));
- }
- }
- }
- // 语言;
- cJSON* pLanguage = cJSON_GetObjectItem(pJson, "Language");
- if (pLanguage)
- {
- int nCount = cJSON_GetArraySize(pLanguage);
- for (int i = 0; i < nCount; i++)
- {
- pItem = cJSON_GetArrayItem(pLanguage, i);
- if (pItem && pItem->child)
- {
- g_tConfig.language.insert(pair<std::string, std::string>(pItem->child->string, pItem->child->valuestring));
- }
- }
- }
- // 文件夹;
- cJSON* pKeyFolder = cJSON_GetObjectItem(pJson, "KeyFolder");
- if (pKeyFolder)
- {
- int nCount = cJSON_GetArraySize(pKeyFolder);
- for (int i = 0; i < nCount; i++)
- {
- pItem = cJSON_GetArrayItem(pKeyFolder, i);
- if (pItem && pItem->child)
- {
- g_tConfig.keyfolder.insert(pair<std::string, std::string>(pItem->child->string, pItem->child->valuestring));
- }
- }
- }
- // read check;
- cJSON *pReadCheck = cJSON_GetObjectItem(pJson, "ReadCheck");
- if ( pReadCheck )
- {
- g_tConfig.readcheck.IsPID = cJSON_GetObjectItem(pReadCheck, _T("PID")) ? cJSON_GetObjectItem(pReadCheck, _T("PID"))->valueint : 1;
- g_tConfig.readcheck.IsCHANNEL = cJSON_GetObjectItem(pReadCheck, _T("CHANNEL")) ? cJSON_GetObjectItem(pReadCheck, _T("CHANNEL"))->valueint : 1;
- g_tConfig.readcheck.IsOSD = cJSON_GetObjectItem(pReadCheck, _T("OSD")) ? cJSON_GetObjectItem(pReadCheck, _T("OSD"))->valueint : 1;
- g_tConfig.readcheck.IsSHOP = cJSON_GetObjectItem(pReadCheck, _T("SHOP")) ? cJSON_GetObjectItem(pReadCheck, _T("SHOP"))->valueint : 1;
- g_tConfig.readcheck.IsDID = cJSON_GetObjectItem(pReadCheck, _T("DID")) ? cJSON_GetObjectItem(pReadCheck, _T("DID"))->valueint : 1;
- g_tConfig.readcheck.IsMAC = cJSON_GetObjectItem(pReadCheck, _T("MAC")) ? cJSON_GetObjectItem(pReadCheck, _T("MAC"))->valueint : 1;
- g_tConfig.readcheck.IsHDCP = cJSON_GetObjectItem(pReadCheck, _T("HDCP")) ? cJSON_GetObjectItem(pReadCheck, _T("HDCP"))->valueint : 1;
- g_tConfig.readcheck.IsHDCP22 = cJSON_GetObjectItem(pReadCheck, _T("HDCP22")) ? cJSON_GetObjectItem(pReadCheck, _T("HDCP22"))->valueint : 1;
- g_tConfig.readcheck.IsWIDI = cJSON_GetObjectItem(pReadCheck, _T("WIDI")) ? cJSON_GetObjectItem(pReadCheck, _T("WIDI"))->valueint : 1;
- g_tConfig.readcheck.IsWIDEVINE = cJSON_GetObjectItem(pReadCheck, _T("WIDEVINE")) ? cJSON_GetObjectItem(pReadCheck, _T("WIDEVINE"))->valueint : 1;
- g_tConfig.readcheck.IsESN = cJSON_GetObjectItem(pReadCheck, _T("ESN")) ? cJSON_GetObjectItem(pReadCheck, _T("ESN"))->valueint : 1;
- g_tConfig.readcheck.IsCI = cJSON_GetObjectItem(pReadCheck, _T("CI")) ? cJSON_GetObjectItem(pReadCheck, _T("CI"))->valueint : 1;
- }
- #ifdef SUPER_VER
- // write check;
- cJSON* pWriteCheck = cJSON_GetObjectItem(pJson, "WriteCheck");
- if (pWriteCheck)
- {
- //g_tConfig.writecheck.IsPID = cJSON_GetObjectItem(pWriteCheck, _T("PID")) ? cJSON_GetObjectItem(pWriteCheck, _T("PID"))->valueint : 1;
- //g_tConfig.writecheck.IsCHANNEL = cJSON_GetObjectItem(pWriteCheck, _T("CHANNEL")) ? cJSON_GetObjectItem(pWriteCheck, _T("CHANNEL"))->valueint : 1;
- //g_tConfig.writecheck.IsOSD = cJSON_GetObjectItem(pWriteCheck, _T("OSD")) ? cJSON_GetObjectItem(pWriteCheck, _T("OSD"))->valueint : 1;
- //g_tConfig.writecheck.IsSHOP = cJSON_GetObjectItem(pWriteCheck, _T("SHOP")) ? cJSON_GetObjectItem(pWriteCheck, _T("SHOP"))->valueint : 1;
- g_tConfig.writecheck.IsDID = cJSON_GetObjectItem(pWriteCheck, _T("DID")) ? cJSON_GetObjectItem(pWriteCheck, _T("DID"))->valueint : 1;
- g_tConfig.writecheck.IsMAC = cJSON_GetObjectItem(pWriteCheck, _T("MAC")) ? cJSON_GetObjectItem(pWriteCheck, _T("MAC"))->valueint : 1;
- g_tConfig.writecheck.IsHDCP = cJSON_GetObjectItem(pWriteCheck, _T("HDCP")) ? cJSON_GetObjectItem(pWriteCheck, _T("HDCP"))->valueint : 1;
- g_tConfig.writecheck.IsHDCP22 = cJSON_GetObjectItem(pWriteCheck, _T("HDCP22")) ? cJSON_GetObjectItem(pWriteCheck, _T("HDCP22"))->valueint : 1;
- g_tConfig.writecheck.IsWIDI = cJSON_GetObjectItem(pWriteCheck, _T("WIDI")) ? cJSON_GetObjectItem(pWriteCheck, _T("WIDI"))->valueint : 1;
- g_tConfig.writecheck.IsWIDEVINE = cJSON_GetObjectItem(pWriteCheck, _T("WIDEVINE")) ? cJSON_GetObjectItem(pWriteCheck, _T("WIDEVINE"))->valueint : 1;
- g_tConfig.writecheck.IsESN = cJSON_GetObjectItem(pWriteCheck, _T("ESN")) ? cJSON_GetObjectItem(pWriteCheck, _T("ESN"))->valueint : 1;
- g_tConfig.writecheck.IsCI = cJSON_GetObjectItem(pWriteCheck, _T("CI")) ? cJSON_GetObjectItem(pWriteCheck, _T("CI"))->valueint : 1;
- }
- // write done;
- cJSON* pWriteDone = cJSON_GetObjectItem(pJson, "WriteDone");
- if (pWriteDone)
- {
- g_tConfig.writedone.IsPID = cJSON_GetObjectItem(pWriteDone, _T("PID")) ? cJSON_GetObjectItem(pWriteDone, _T("PID"))->valueint : 1;
- g_tConfig.writedone.IsCHANNEL = cJSON_GetObjectItem(pWriteDone, _T("CHANNEL")) ? cJSON_GetObjectItem(pWriteDone, _T("CHANNEL"))->valueint : 1;
- g_tConfig.writedone.IsOSD = cJSON_GetObjectItem(pWriteDone, _T("OSD")) ? cJSON_GetObjectItem(pWriteDone, _T("OSD"))->valueint : 1;
- g_tConfig.writedone.IsSHOP = cJSON_GetObjectItem(pWriteDone, _T("SHOP")) ? cJSON_GetObjectItem(pWriteDone, _T("SHOP"))->valueint : 1;
- g_tConfig.writedone.IsDID = cJSON_GetObjectItem(pWriteDone, _T("DID")) ? cJSON_GetObjectItem(pWriteDone, _T("DID"))->valueint : 1;
- g_tConfig.writedone.IsMAC = cJSON_GetObjectItem(pWriteDone, _T("MAC")) ? cJSON_GetObjectItem(pWriteDone, _T("MAC"))->valueint : 1;
- g_tConfig.writedone.IsHDCP = cJSON_GetObjectItem(pWriteDone, _T("HDCP")) ? cJSON_GetObjectItem(pWriteDone, _T("HDCP"))->valueint : 1;
- g_tConfig.writedone.IsHDCP22 = cJSON_GetObjectItem(pWriteDone, _T("HDCP22")) ? cJSON_GetObjectItem(pWriteDone, _T("HDCP22"))->valueint : 1;
- g_tConfig.writedone.IsWIDI = cJSON_GetObjectItem(pWriteDone, _T("WIDI")) ? cJSON_GetObjectItem(pWriteDone, _T("WIDI"))->valueint : 1;
- g_tConfig.writedone.IsWIDEVINE = cJSON_GetObjectItem(pWriteDone, _T("WIDEVINE")) ? cJSON_GetObjectItem(pWriteDone, _T("WIDEVINE"))->valueint : 1;
- g_tConfig.writedone.IsESN = cJSON_GetObjectItem(pWriteDone, _T("ESN")) ? cJSON_GetObjectItem(pWriteDone, _T("ESN"))->valueint : 1;
- g_tConfig.writedone.IsCI = cJSON_GetObjectItem(pWriteDone, _T("CI")) ? cJSON_GetObjectItem(pWriteDone, _T("CI"))->valueint : 1;
- }
- #endif
- // 配置;
- cJSON* pChassis = cJSON_GetObjectItem(pJson, "Chassis-list");
- if (pChassis)
- {
- int nCount = cJSON_GetArraySize(pChassis);
- for (int i = 0; i < nCount; i++)
- {
- pItem = cJSON_GetArrayItem(pChassis, i);
- if (pItem && pItem->child)
- {
- std::string name;
- TChassis tchassis;
- name = cJSON_GetObjectItem(pItem, _T("name")) ? cJSON_GetObjectItem(pItem, _T("name"))->valuestring : "";
- tchassis.IsCopyDID = cJSON_GetObjectItem(pItem, _T("IsCopyDID")) ? cJSON_GetObjectItem(pItem, _T("IsCopyDID"))->valueint : 0;
- tchassis.IsCopyMAC = cJSON_GetObjectItem(pItem, _T("IsCopyMAC")) ? cJSON_GetObjectItem(pItem, _T("IsCopyMAC"))->valueint : 0;
- tchassis.IsCopyKEY = cJSON_GetObjectItem(pItem, _T("IsCopyKEY")) ? cJSON_GetObjectItem(pItem, _T("IsCopyKEY"))->valueint : 0;
- tchassis.IsCopyESN = cJSON_GetObjectItem(pItem, _T("IsCopyESN")) ? cJSON_GetObjectItem(pItem, _T("IsCopyESN"))->valueint : 0;
- tchassis.IsCopyWiDi = cJSON_GetObjectItem(pItem, _T("IsCopyWiDi")) ? cJSON_GetObjectItem(pItem, _T("IsCopyWiDi"))->valueint : 0;
- tchassis.IsCopyWidevine = cJSON_GetObjectItem(pItem, _T("IsCopyWidevine")) ? cJSON_GetObjectItem(pItem, _T("IsCopyWidevine"))->valueint : 0;
- tchassis.IsCopyKEY2_2 = cJSON_GetObjectItem(pItem, _T("IsCopyKEY2_2")) ? cJSON_GetObjectItem(pItem, _T("IsCopyKEY2_2"))->valueint : 0;
- tchassis.IsCopyKEY2_3 = cJSON_GetObjectItem(pItem, _T("IsCopyKEY2_3")) ? cJSON_GetObjectItem(pItem, _T("IsCopyKEY2_3"))->valueint : 0;
- tchassis.IsCopyCikey = cJSON_GetObjectItem(pItem, _T("IsCopyCikey")) ? cJSON_GetObjectItem(pItem, _T("IsCopyCikey"))->valueint : 0;
- tchassis.IsCopyChannel = cJSON_GetObjectItem(pItem, _T("IsCopyChannel")) ? cJSON_GetObjectItem(pItem, _T("IsCopyChannel"))->valueint : 0;
- tchassis.IsCopyWB = cJSON_GetObjectItem(pItem, _T("IsCopyWB")) ? cJSON_GetObjectItem(pItem, _T("IsCopyWB"))->valueint : 0;
- tchassis.IsDisplayClientType = cJSON_GetObjectItem(pItem, _T("IsDisplayClientType")) ? cJSON_GetObjectItem(pItem, _T("IsDisplayClientType"))->valueint : 0;
- tchassis.IsWritePID = cJSON_GetObjectItem(pItem, _T("IsWritePID")) ? cJSON_GetObjectItem(pItem, _T("IsWritePID"))->valueint : 0;
- tchassis.IsWBInit = cJSON_GetObjectItem(pItem, _T("IsWBInit")) ? cJSON_GetObjectItem(pItem, _T("IsWBInit"))->valueint : 0;
- tchassis.IsMTKInit = cJSON_GetObjectItem(pItem, _T("IsMTKInit")) ? cJSON_GetObjectItem(pItem, _T("IsMTKInit"))->valueint : 0;
- tchassis.IsOsdLanguage = cJSON_GetObjectItem(pItem, _T("IsOsdLanguage")) ? cJSON_GetObjectItem(pItem, _T("IsOsdLanguage"))->valueint : 0;
- tchassis.IsShopLanguage = cJSON_GetObjectItem(pItem, _T("IsShopLanguage")) ? cJSON_GetObjectItem(pItem, _T("IsShopLanguage"))->valueint : 0;
- tchassis.IsCopyClientType = cJSON_GetObjectItem(pItem, _T("IsCopyClientType")) ? cJSON_GetObjectItem(pItem, _T("IsCopyClientType"))->valueint : 0;
- tchassis.IsMGKKeyEnb = cJSON_GetObjectItem(pItem, _T("IsMGKKeyEnb")) ? cJSON_GetObjectItem(pItem, _T("IsMGKKeyEnb"))->valueint : 0;
- tchassis.IsNovaTakHDCPEnb = cJSON_GetObjectItem(pItem, _T("IsNovaTakHDCPEnb")) ? cJSON_GetObjectItem(pItem, _T("IsNovaTakHDCPEnb"))->valueint : 0;
- tchassis.ProjectID = cJSON_GetObjectItem(pItem, _T("ProjectID")) ? cJSON_GetObjectItem(pItem, _T("ProjectID"))->valueint : 0;
- tchassis.Channel = cJSON_GetObjectItem(pItem, _T("Channel")) ? cJSON_GetObjectItem(pItem, _T("Channel"))->valuestring : "";
- tchassis.WBFile = cJSON_GetObjectItem(pItem, _T("WBFile")) ? cJSON_GetObjectItem(pItem, _T("WBFile"))->valuestring : "";
- tchassis.Delay = cJSON_GetObjectItem(pItem, _T("Delay")) ? cJSON_GetObjectItem(pItem, _T("Delay"))->valueint : 50;
- tchassis.CheckString = cJSON_GetObjectItem(pItem, _T("CheckString")) ? cJSON_GetObjectItem(pItem, _T("CheckString"))->valuestring : "";
- tchassis.ClientType = cJSON_GetObjectItem(pItem, _T("ClientType")) ? cJSON_GetObjectItem(pItem, _T("ClientType"))->valuestring : "";
- tchassis.MACType = cJSON_GetObjectItem(pItem, _T("MACType")) ? cJSON_GetObjectItem(pItem, _T("MACType"))->valuestring : "";
- tchassis.HDCPKeyType = cJSON_GetObjectItem(pItem, _T("HDCPKeyType")) ? cJSON_GetObjectItem(pItem, _T("HDCPKeyType"))->valuestring : "";
- tchassis.HDCPKey22Type = cJSON_GetObjectItem(pItem, _T("HDCPKey22Type")) ? cJSON_GetObjectItem(pItem, _T("HDCPKey22Type"))->valuestring : "";
- tchassis.HDCPKey23Type = cJSON_GetObjectItem(pItem, _T("HDCPKey23Type")) ? cJSON_GetObjectItem(pItem, _T("HDCPKey23Type"))->valuestring : "";
- tchassis.ESNType = cJSON_GetObjectItem(pItem, _T("ESNType")) ? cJSON_GetObjectItem(pItem, _T("ESNType"))->valuestring : "";
- tchassis.WiDiType = cJSON_GetObjectItem(pItem, _T("WiDiType")) ? cJSON_GetObjectItem(pItem, _T("WiDiType"))->valuestring : "";
- tchassis.WidevineType = cJSON_GetObjectItem(pItem, _T("WidevineType")) ? cJSON_GetObjectItem(pItem, _T("WidevineType"))->valuestring : "";
- tchassis.CIKeyType = cJSON_GetObjectItem(pItem, _T("CIKeyType")) ? cJSON_GetObjectItem(pItem, _T("CIKeyType"))->valuestring : "";
- tchassis.MGKKeyType = cJSON_GetObjectItem(pItem, _T("MGKKeyType")) ? cJSON_GetObjectItem(pItem, _T("MGKKeyType"))->valuestring : "";
- tchassis.NovaTakHDCPType = cJSON_GetObjectItem(pItem, _T("NovaTakHDCPType")) ? cJSON_GetObjectItem(pItem, _T("NovaTakHDCPType"))->valuestring : "";
- g_tConfig.chassislist.insert(std::pair<std::string, CHASSIS>(name, tchassis));
- }
- }
- }
- end:
- if (pdata)
- free(pdata);
- if (pJson)
- cJSON_Delete(pJson);
- }
- void SetConfig()
- {
- // Json数据;
- cJSON* pJson = cJSON_CreateObject();
- cJSON_AddStringToObject(pJson, "COM", g_tConfig.com.c_str());
- cJSON_AddStringToObject(pJson, "server-url", g_tConfig.serverurl.c_str());
- cJSON_AddStringToObject(pJson, "Chassis", g_tConfig.chassis.c_str());
- cJSON_AddNumberToObject(pJson, "Mode", g_tConfig.mode);
- cJSON_AddNumberToObject(pJson, "WarnCount", g_tConfig.warncount);
- cJSON_AddNumberToObject(pJson, "WaitBoot", g_tConfig.waitboot);
- cJSON_AddNumberToObject(pJson, "WaitEnd", g_tConfig.waitend);
- cJSON_AddBoolToObject(pJson, "BootRead", g_tConfig.bootread);
- cJSON_AddStringToObject(pJson, "Baudrate", g_tConfig.baudrate.c_str());
- // 频道;
- cJSON* pItem = NULL;
- cJSON* pChannel = cJSON_AddArrayToObject(pJson, _T("Channel"));
- if (pChannel)
- {
- std::map<std::string, std::string>::iterator it = g_tConfig.channel.begin();
- for (; it != g_tConfig.channel.end(); it++)
- {
- pItem = cJSON_AddObjectToObject(pChannel, it->first.c_str());
- cJSON_AddStringToObject(pItem, it->first.c_str(), it->second.c_str());
- }
- }
- // 语言;
- cJSON* pLanguage = cJSON_AddArrayToObject(pJson, _T("Language"));
- if (pLanguage)
- {
- std::map<std::string, std::string>::iterator it = g_tConfig.language.begin();
- for (; it != g_tConfig.language.end(); it++)
- {
- pItem = cJSON_AddObjectToObject(pLanguage, it->first.c_str());
- cJSON_AddStringToObject(pItem, it->first.c_str(), it->second.c_str());
- }
- }
- // 文件夹;
- cJSON* pKeyFolder = cJSON_AddArrayToObject(pJson, _T("KeyFolder"));
- if (pKeyFolder)
- {
- std::map<std::string, std::string>::iterator it = g_tConfig.keyfolder.begin();
- for (; it != g_tConfig.keyfolder.end(); it++)
- {
- pItem = cJSON_AddObjectToObject(pKeyFolder, it->first.c_str());
- cJSON_AddStringToObject(pItem, it->first.c_str(), it->second.c_str());
- }
- }
- // read check;
- cJSON* pReadCheck = cJSON_AddObjectToObject(pJson, "ReadCheck");
- if (pReadCheck)
- {
- cJSON_AddBoolToObject(pReadCheck, _T("PID"), g_tConfig.readcheck.IsPID);
- cJSON_AddBoolToObject(pReadCheck, _T("CHANNEL"), g_tConfig.readcheck.IsCHANNEL);
- cJSON_AddBoolToObject(pReadCheck, _T("OSD"), g_tConfig.readcheck.IsOSD);
- cJSON_AddBoolToObject(pReadCheck, _T("SHOP"), g_tConfig.readcheck.IsSHOP);
- cJSON_AddBoolToObject(pReadCheck, _T("DID"), g_tConfig.readcheck.IsDID);
- cJSON_AddBoolToObject(pReadCheck, _T("MAC"), g_tConfig.readcheck.IsMAC);
- cJSON_AddBoolToObject(pReadCheck, _T("HDCP"), g_tConfig.readcheck.IsHDCP);
- cJSON_AddBoolToObject(pReadCheck, _T("HDCP22"), g_tConfig.readcheck.IsHDCP22);
- cJSON_AddBoolToObject(pReadCheck, _T("WIDI"), g_tConfig.readcheck.IsWIDI);
- cJSON_AddBoolToObject(pReadCheck, _T("WIDEVINE"), g_tConfig.readcheck.IsWIDEVINE);
- cJSON_AddBoolToObject(pReadCheck, _T("ESN"), g_tConfig.readcheck.IsESN);
- cJSON_AddBoolToObject(pReadCheck, _T("CI"), g_tConfig.readcheck.IsCI);
- }
- #ifdef SUPER_VER
- // write check;
- cJSON* pWriteCheck = cJSON_AddObjectToObject(pJson, "WriteCheck");
- if (pWriteCheck)
- {
- //cJSON_AddBoolToObject(pWriteCheck, _T("PID"), g_tConfig.writecheck.IsPID);
- //cJSON_AddBoolToObject(pWriteCheck, _T("CHANNEL"), g_tConfig.writecheck.IsCHANNEL);
- //cJSON_AddBoolToObject(pWriteCheck, _T("OSD"), g_tConfig.writecheck.IsOSD);
- //cJSON_AddBoolToObject(pWriteCheck, _T("SHOP"), g_tConfig.writecheck.IsSHOP);
- cJSON_AddBoolToObject(pWriteCheck, _T("DID"), g_tConfig.writecheck.IsDID);
- cJSON_AddBoolToObject(pWriteCheck, _T("MAC"), g_tConfig.writecheck.IsMAC);
- cJSON_AddBoolToObject(pWriteCheck, _T("HDCP"), g_tConfig.writecheck.IsHDCP);
- cJSON_AddBoolToObject(pWriteCheck, _T("HDCP22"), g_tConfig.writecheck.IsHDCP22);
- cJSON_AddBoolToObject(pWriteCheck, _T("WIDI"), g_tConfig.writecheck.IsWIDI);
- cJSON_AddBoolToObject(pWriteCheck, _T("WIDEVINE"), g_tConfig.writecheck.IsWIDEVINE);
- cJSON_AddBoolToObject(pWriteCheck, _T("ESN"), g_tConfig.writecheck.IsESN);
- cJSON_AddBoolToObject(pWriteCheck, _T("CI"), g_tConfig.writecheck.IsCI);
- }
- // write done;
- cJSON* pWriteDone= cJSON_AddObjectToObject(pJson, "WriteDone");
- if (pWriteDone)
- {
- cJSON_AddBoolToObject(pWriteDone, _T("PID"), g_tConfig.writedone.IsPID);
- cJSON_AddBoolToObject(pWriteDone, _T("CHANNEL"), g_tConfig.writedone.IsCHANNEL);
- cJSON_AddBoolToObject(pWriteDone, _T("OSD"), g_tConfig.writedone.IsOSD);
- cJSON_AddBoolToObject(pWriteDone, _T("SHOP"), g_tConfig.writedone.IsSHOP);
- cJSON_AddBoolToObject(pWriteDone, _T("DID"), g_tConfig.writedone.IsDID);
- cJSON_AddBoolToObject(pWriteDone, _T("MAC"), g_tConfig.writedone.IsMAC);
- cJSON_AddBoolToObject(pWriteDone, _T("HDCP"), g_tConfig.writedone.IsHDCP);
- cJSON_AddBoolToObject(pWriteDone, _T("HDCP22"), g_tConfig.writedone.IsHDCP22);
- cJSON_AddBoolToObject(pWriteDone, _T("WIDI"), g_tConfig.writedone.IsWIDI);
- cJSON_AddBoolToObject(pWriteDone, _T("WIDEVINE"), g_tConfig.writedone.IsWIDEVINE);
- cJSON_AddBoolToObject(pWriteDone, _T("ESN"), g_tConfig.writedone.IsESN);
- cJSON_AddBoolToObject(pWriteDone, _T("CI"), g_tConfig.writedone.IsCI);
- }
- #endif
- // 配置;
- cJSON* pChassis = cJSON_AddArrayToObject(pJson, _T("Chassis-list"));
- if (pChassis)
- {
- std::map<std::string, TChassis>::iterator it = g_tConfig.chassislist.begin();
- for (; it != g_tConfig.chassislist.end(); it++)
- {
- pItem = cJSON_AddObjectToObject(pChassis, it->first.c_str());
- cJSON_AddStringToObject(pItem, _T("name"), it->first.c_str());
- // bool
- cJSON_AddBoolToObject(pItem, _T("IsCopyDID"), it->second.IsCopyDID);
- cJSON_AddBoolToObject(pItem, _T("IsCopyMAC"), it->second.IsCopyMAC);
- cJSON_AddBoolToObject(pItem, _T("IsCopyKEY"), it->second.IsCopyKEY);
- cJSON_AddBoolToObject(pItem, _T("IsCopyESN"), it->second.IsCopyESN);
- cJSON_AddBoolToObject(pItem, _T("IsCopyWiDi"), it->second.IsCopyWiDi);
- cJSON_AddBoolToObject(pItem, _T("IsCopyWidevine"), it->second.IsCopyWidevine);
- cJSON_AddBoolToObject(pItem, _T("IsCopyKEY2_2"), it->second.IsCopyKEY2_2);
- cJSON_AddBoolToObject(pItem, _T("IsCopyKEY2_3"), it->second.IsCopyKEY2_3);
- cJSON_AddBoolToObject(pItem, _T("IsCopyCikey"), it->second.IsCopyCikey);
- cJSON_AddBoolToObject(pItem, _T("IsCopyChannel"), it->second.IsCopyChannel);
- cJSON_AddBoolToObject(pItem, _T("IsCopyWB"), it->second.IsCopyWB);
- cJSON_AddBoolToObject(pItem, _T("IsDisplayClientType"), it->second.IsDisplayClientType);
- cJSON_AddBoolToObject(pItem, _T("IsWritePID"), it->second.IsWritePID);
- cJSON_AddBoolToObject(pItem, _T("IsWBInit"), it->second.IsWBInit);
- cJSON_AddBoolToObject(pItem, _T("IsMTKInit"), it->second.IsMTKInit);
- cJSON_AddBoolToObject(pItem, _T("IsOsdLanguage"), it->second.IsOsdLanguage);
- cJSON_AddBoolToObject(pItem, _T("IsShopLanguage"), it->second.IsShopLanguage);
- cJSON_AddBoolToObject(pItem, _T("IsCopyClientType"), it->second.IsCopyClientType);
- cJSON_AddBoolToObject(pItem, _T("IsMGKKeyEnb"), it->second.IsMGKKeyEnb);
- cJSON_AddBoolToObject(pItem, _T("IsNovaTakHDCPEnb"), it->second.IsNovaTakHDCPEnb);
- // ini
- cJSON_AddNumberToObject(pItem, _T("ProjectID"), it->second.ProjectID);
- cJSON_AddNumberToObject(pItem, _T("Delay"), it->second.Delay);
- // string
- cJSON_AddStringToObject(pItem, _T("Channel"), it->second.Channel.c_str());
- cJSON_AddStringToObject(pItem, _T("WBFile"), it->second.WBFile.c_str());
- cJSON_AddStringToObject(pItem, _T("CheckString"), it->second.CheckString.c_str());
- cJSON_AddStringToObject(pItem, _T("ClientType"), it->second.ClientType.c_str());
- cJSON_AddStringToObject(pItem, _T("MACType"), it->second.MACType.c_str());
- cJSON_AddStringToObject(pItem, _T("HDCPKeyType"), it->second.HDCPKeyType.c_str());
- cJSON_AddStringToObject(pItem, _T("HDCPKey22Type"), it->second.HDCPKey22Type.c_str());
- cJSON_AddStringToObject(pItem, _T("HDCPKey23Type"), it->second.HDCPKey23Type.c_str());
- cJSON_AddStringToObject(pItem, _T("ESNType"), it->second.ESNType.c_str());
- cJSON_AddStringToObject(pItem, _T("WiDiType"), it->second.WiDiType.c_str());
- cJSON_AddStringToObject(pItem, _T("WidevineType"), it->second.WidevineType.c_str());
- cJSON_AddStringToObject(pItem, _T("CIKeyType"), it->second.CIKeyType.c_str());
- cJSON_AddStringToObject(pItem, _T("MGKKeyType"), it->second.MGKKeyType.c_str());
- cJSON_AddStringToObject(pItem, _T("NovaTakHDCPType"), it->second.NovaTakHDCPType.c_str());
- }
- }
- char* pJsonText = cJSON_Print(pJson);
- // 保存到文件中;
- FILE* pf = NULL;
- _tfopen_s(&pf, _T("./Config.json"), _T("wb"));
- if (pf)
- {
- fwrite(pJsonText, _tcslen(pJsonText), 1, pf);
- fclose(pf);
- }
- if (pJsonText)
- delete[] pJsonText;
- cJSON_Delete(pJson);
- }
- // 去除空格;
- std::string& trim(std::string& str)
- {
- int nIndex = 0;
- while ((nIndex = str.find_first_of(' ')) != std::string::npos)
- str.erase(nIndex, 1);
- return str;
- }
- // hModule 模块句柄 NULL表示当前模块;
- bool GetVersion(IN const TCHAR* fname, OUT WORD* pdwFileVersion, OUT WORD* pdwProductVerion)
- {
- VS_FIXEDFILEINFO* pVi = NULL;
- DWORD dwHandle = 0;
- int size = GetFileVersionInfoSize(fname, &dwHandle);
- if (size > 0)
- {
- BYTE* buffer = new BYTE[size];
- memset(buffer, 0, size);
- if (GetFileVersionInfo(fname, 0, size, buffer))
- {
- if (VerQueryValue(buffer, _T("\\"), (LPVOID*)& pVi, (PUINT)& size))
- {
- pdwFileVersion[0] = HIWORD(pVi->dwFileVersionMS);
- pdwFileVersion[1] = LOWORD(pVi->dwFileVersionMS);
- pdwFileVersion[2] = HIWORD(pVi->dwFileVersionLS);
- pdwFileVersion[3] = LOWORD(pVi->dwFileVersionLS);
- pdwProductVerion[0] = HIWORD(pVi->dwProductVersionMS);
- pdwProductVerion[1] = LOWORD(pVi->dwProductVersionMS);
- pdwProductVerion[2] = HIWORD(pVi->dwProductVersionLS);
- pdwProductVerion[3] = LOWORD(pVi->dwProductVersionLS);
- delete[] buffer;
- return true;
- }
- }
- delete[] buffer;
- }
- return false;
- }
- BOOL GetVersion(IN HMODULE hModule, OUT DWORD(&dwFVArray)[4], OUT DWORD(&dwPVArray)[4])
- {
- TCHAR fname[MAX_PATH];
- VS_FIXEDFILEINFO* pVi;
- DWORD dwHandle;
- if (GetModuleFileName(hModule, fname, MAX_PATH))
- {
- INT nSize = GetFileVersionInfoSize(fname, &dwHandle);
- if (nSize > 0)
- {
- BYTE* pBuffer = new BYTE[nSize];
- memset(pBuffer, 0, nSize);
- if (GetFileVersionInfo(fname, 0, nSize, pBuffer))
- {
- if (VerQueryValue(pBuffer, _T("\\"), (LPVOID*)& pVi, (PUINT)& nSize))
- {
- dwFVArray[0] = HIWORD(pVi->dwFileVersionMS);
- dwFVArray[1] = LOWORD(pVi->dwFileVersionMS);
- dwFVArray[2] = HIWORD(pVi->dwFileVersionLS);
- dwFVArray[3] = LOWORD(pVi->dwFileVersionLS);
- dwPVArray[0] = HIWORD(pVi->dwProductVersionMS);
- dwPVArray[1] = LOWORD(pVi->dwProductVersionMS);
- dwPVArray[2] = HIWORD(pVi->dwProductVersionLS);
- dwPVArray[3] = LOWORD(pVi->dwProductVersionLS);
- delete[]pBuffer;
- return TRUE;
- }
- }
- if (pBuffer)
- delete[]pBuffer;
- }
- }
- return FALSE;
- }
- WCHAR* ASCII2UNICODE(IN LPCCH lpASCIIStr)
- {
- if (lpASCIIStr == NULL)
- return NULL;
- // 获取宽字符字节数;
- int cchWideChar = MultiByteToWideChar(CP_ACP, 0, lpASCIIStr, -1, NULL, 0);
- if (cchWideChar == 0)
- return NULL;
- // 转换成宽字符串;
- WCHAR* pWideChar = new WCHAR[cchWideChar + 1];
- memset(pWideChar, 0, sizeof(WCHAR) * (cchWideChar + 1));
- int nWriteNum = MultiByteToWideChar(CP_ACP, 0, lpASCIIStr, -1, pWideChar, cchWideChar);
- if (nWriteNum != cchWideChar)
- {
- if (pWideChar)
- delete[] pWideChar;
- return NULL;
- }
- return pWideChar;
- }
- BOOL UNICODE2UTF8(IN LPWCH lpUNICODEStr, OUT string& strResult)
- {
- if (lpUNICODEStr == NULL)
- return FALSE;
- // 获取多字节字符字节数;
- int cbMultiByte = WideCharToMultiByte(CP_UTF8, 0, lpUNICODEStr, -1, NULL, 0, NULL, NULL);
- if (cbMultiByte == 0)
- return FALSE;
- // 转换成多字节字符;
- CHAR* pResult = new CHAR[cbMultiByte];
- memset(pResult, 0, cbMultiByte);
- int nWriteNum = WideCharToMultiByte(CP_UTF8, 0, lpUNICODEStr, -1, pResult, cbMultiByte, NULL, NULL);
- if (nWriteNum != cbMultiByte)
- return FALSE;
- strResult = pResult;
- if (pResult)
- delete[] pResult;
- return TRUE;
- }
- BOOL ASCII2UTF8(IN LPCCH lpASCIIStr, OUT string& strResult)
- {
- // 将ASCII字符串转成UNICODE字符串;
- WCHAR* pWideChar = ASCII2UNICODE(lpASCIIStr);
- if (pWideChar == NULL)
- return FALSE;
- // 再将UICODE转成UTF8;
- BOOL bResult = UNICODE2UTF8(pWideChar, strResult);
- if (pWideChar)
- delete[] pWideChar;
- return bResult;
- }
- string EnCode_UTF8URL(IN const CHAR* pText)
- {
- string tt = "";
- string dd = "";
- ASCII2UTF8(pText, tt);
- size_t len = tt.length();
- for (size_t i = 0; i < len; i++)
- {
- if (isalnum((BYTE)tt.at(i)))
- {
- char tempbuff[2] = { 0 };
- sprintf_s(tempbuff, "%c", (BYTE)tt.at(i));
- dd.append(tempbuff);
- }
- else if (isspace((BYTE)tt.at(i)))
- {
- dd.append("+");
- }
- else
- {
- char tempbuff[4];
- sprintf_s(tempbuff, "%%%X%X", ((BYTE)tt.at(i)) >> 4, ((BYTE)tt.at(i)) % 16);
- dd.append(tempbuff);
- }
- }
- return dd;
- }
- void EnCode_UTF8URL(IN const CHAR* pText, OUT string& strResult)
- {
- string tt = "";
- ASCII2UTF8(pText, tt);
- size_t len = tt.length();
- for (size_t i = 0; i < len; i++)
- {
- if (isalnum((BYTE)tt.at(i)))
- {
- char tempbuff[2] = { 0 };
- sprintf_s(tempbuff, "%c", (BYTE)tt.at(i));
- strResult.append(tempbuff);
- }
- else if (isspace((BYTE)tt.at(i)))
- {
- strResult.append("+");
- }
- else
- {
- char tempbuff[4];
- sprintf_s(tempbuff, "%%%X%X", ((BYTE)tt.at(i)) >> 4, ((BYTE)tt.at(i)) % 16);
- strResult.append(tempbuff);
- }
- }
- }
- // 通过注册表查找系统当前串口信息;
- BOOL GetSysSerialPort(std::vector<std::string>& vtports)
- {
- HKEY hKey;
- LSTATUS lReg = 0;
- DWORD dwMaxValLen = 0;
- DWORD dwValNum = 0;
- lReg = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_QUERY_VALUE, &hKey);
- if (lReg != ERROR_SUCCESS)
- {
- LOG4C((LOG_WARN, "Open Registry Error"));
- return FALSE;
- }
- lReg = RegQueryInfoKeyA(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwValNum, &dwMaxValLen, NULL, NULL, NULL);
- if (lReg != ERROR_SUCCESS)
- {
- LOG4C((LOG_WARN, "Getting Key Info Error"));
- return FALSE;
- }
- if (vtports.size())
- {
- vtports.clear();
- }
- LPSTR lpValName, lpComNum;
- DWORD dwValName, dwValSize = 6;
- for (DWORD i = 0; i < dwValNum; i++)
- {
- dwValName = dwMaxValLen + 1;
- dwValSize = 6;
- lpValName = (LPSTR)VirtualAlloc(NULL, dwValName, MEM_COMMIT, PAGE_READWRITE);
- lReg = RegEnumValueA(hKey, i, lpValName, &dwValName, NULL, NULL, NULL, NULL);
- if ((lReg != ERROR_SUCCESS) && (lReg != ERROR_NO_MORE_ITEMS))
- {
- LOG4C((LOG_WARN, "Enum Registry Error or No More Items"));
- continue;
- }
- lpComNum = (LPSTR)VirtualAlloc(NULL, 6, MEM_COMMIT, PAGE_READWRITE);
- lReg = RegQueryValueExA(hKey, lpValName, NULL, NULL, (LPBYTE)lpComNum, &dwValSize);
- if (lReg != ERROR_SUCCESS)
- {
- LOG4C((LOG_WARN, "Can not get the name of the port"));
- continue;
- }
- vtports.push_back(lpComNum);
- VirtualFree(lpValName, 0, MEM_RELEASE);
- VirtualFree(lpComNum, 0, MEM_RELEASE);
- }
- return TRUE;
- }
- INT GetMacAddress()
- {
- HDEVINFO hDevInfo;
- DWORD MemberIndex, RequiredSize;
- SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
- PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;
- INT nTotal = 0;
- INT nNICKind = 0;
- // 获取设备信息集;
- hDevInfo = SetupDiGetClassDevs(&MacClassGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
- if (hDevInfo == INVALID_HANDLE_VALUE)
- {
- return -1;
- }
- g_vtMac.clear();
- // 枚举设备信息集中所有设备;
- DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
- for (MemberIndex = 0; SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &MacClassGuid, MemberIndex, &DeviceInterfaceData); MemberIndex++)
- {
- // 获取接收缓冲区大小,函数返回值为FALSE,GetLastError()=ERROR_INSUFFICIENT_BUFFER;
- SetupDiGetDeviceInterfaceDetail(hDevInfo, &DeviceInterfaceData, NULL, 0, &RequiredSize, NULL);
- // 申请接收缓冲区;
- DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(RequiredSize);
- if ( DeviceInterfaceDetailData == NULL)
- continue;
- DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
- // 获取设备细节信息;
- if (SetupDiGetDeviceInterfaceDetail(hDevInfo, &DeviceInterfaceData, DeviceInterfaceDetailData, RequiredSize, NULL, NULL))
- {
- HANDLE hDeviceFile;
- BOOL isOK = FALSE;
- if (_tcsnicmp(DeviceInterfaceDetailData->DevicePath + 4, TEXT("pci"), 3) != 0)
- {
- free(DeviceInterfaceDetailData);
- DeviceInterfaceDetailData = NULL;
- continue;
- }
- MacAddress tagMacAddress;
- tagMacAddress.nNICKind = NIC_PCI;
- _stprintf_s(tagMacAddress.szNICKind, _T("%s"), _T("NIC_PCI"));
- // 获取设备句柄;
- hDeviceFile = CreateFile(DeviceInterfaceDetailData->DevicePath,
- 0,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- if (hDeviceFile != INVALID_HANDLE_VALUE)
- {
- ULONG dwID;
- BYTE ucData[8];
- DWORD dwByteRet;
- // 获取原生MAC地址;
- dwID = OID_802_3_PERMANENT_ADDRESS;
- isOK = DeviceIoControl(hDeviceFile, IOCTL_NDIS_QUERY_GLOBAL_STATS, &dwID, sizeof(dwID), ucData, sizeof(ucData), &dwByteRet, NULL);
- if (isOK)
- {
- ++nTotal;
- _stprintf_s(tagMacAddress.szDevicePath, _T("%s"), DeviceInterfaceDetailData->DevicePath);
- memset(tagMacAddress.szMacAddress, 0, sizeof(TCHAR) * MAX_PATH);
- // 将字节数组转换成16进制字符串;
- for (DWORD i = 0; i < dwByteRet; i++)
- {
- _stprintf_s(&tagMacAddress.szMacAddress[i * 3], MAX_PATH - (i * 3), (i != dwByteRet - 1) ? _T("%02X-") : _T("%02X"), ucData[i]);
- }
- g_vtMac.push_back(tagMacAddress);
- }
- CloseHandle(hDeviceFile);
- }
- }
- free(DeviceInterfaceDetailData);
- DeviceInterfaceDetailData = NULL;
- }
- SetupDiDestroyDeviceInfoList(hDevInfo);
- #if 1
- g_strMacs.clear();
- std::vector<MacAddress>::iterator it = g_vtMac.begin();
- for (; it != g_vtMac.end(); it++)
- {
- g_strMacs.append(it->szMacAddress);
- g_strMacs.append("&");
- }
- #endif
- return nTotal;
- }
- BOOL IsValidString(LPCTSTR lpszString)
- {
- if (lpszString == NULL)
- return FALSE;
- do
- {
- // ASCII可显示的字符;
- if (*lpszString < 32 || *lpszString > 126)
- {
- return FALSE;
- }
- } while (*++lpszString);
- return TRUE;
- }
- } // namespace Global
|