Commit ba316028b1050a3d3059d210843ea9c67aa5a6ce

Authored by Eric Menezes Noronha
1 parent 50cd216a
Exists in master

Inserção da classe hardware.

cacic-teste/cacic-teste.pro
@@ -21,6 +21,7 @@ SOURCES += \ @@ -21,6 +21,7 @@ SOURCES += \
21 testcacic.cpp \ 21 testcacic.cpp \
22 ../src/ccacic.cpp \ 22 ../src/ccacic.cpp \
23 ../src/cacic_computer.cpp \ 23 ../src/cacic_computer.cpp \
  24 + ../src/cacic_hardware.cpp \
24 ../src/operatingsystem.cpp \ 25 ../src/operatingsystem.cpp \
25 ../src/cacic_software.cpp \ 26 ../src/cacic_software.cpp \
26 # ../src/qtservice/src/qtservice.cpp \ 27 # ../src/qtservice/src/qtservice.cpp \
@@ -34,6 +35,7 @@ HEADERS += \ @@ -34,6 +35,7 @@ HEADERS += \
34 testcacic.h \ 35 testcacic.h \
35 ../src/ccacic.h \ 36 ../src/ccacic.h \
36 ../src/cacic_computer.h \ 37 ../src/cacic_computer.h \
  38 + ../src/cacic_hardware.h \
37 ../src/cacic_comm.h \ 39 ../src/cacic_comm.h \
38 ../src/console.h \ 40 ../src/console.h \
39 ../src/operatingsystem.h \ 41 ../src/operatingsystem.h \
cacic-teste/testcacic.cpp
@@ -243,6 +243,12 @@ void CTestCacic::testColetaSoftware() @@ -243,6 +243,12 @@ void CTestCacic::testColetaSoftware()
243 QVERIFY(!OCacicSoftware.toJsonObject().empty()); 243 QVERIFY(!OCacicSoftware.toJsonObject().empty());
244 } 244 }
245 245
  246 +void CTestCacic::testColetaHardware()
  247 +{
  248 + OCacicHardware.iniciaColeta();
  249 + QVERIFY(false);
  250 +}
  251 +
246 void CTestCacic::cleanupTestCase() 252 void CTestCacic::cleanupTestCase()
247 { 253 {
248 OCacic.deleteFile("configRequest.json"); 254 OCacic.deleteFile("configRequest.json");
cacic-teste/testcacic.h
@@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
5 #include <ccacic.h> 5 #include <ccacic.h>
6 #include <cacic_computer.h> 6 #include <cacic_computer.h>
7 #include <cacic_software.h> 7 #include <cacic_software.h>
  8 +#include <cacic_hardware.h>
8 #include <console.h> 9 #include <console.h>
9 #include <operatingsystem.h> 10 #include <operatingsystem.h>
10 #include <QtTest/QtTest> 11 #include <QtTest/QtTest>
@@ -30,6 +31,7 @@ private: @@ -30,6 +31,7 @@ private:
30 CCacic OCacic; 31 CCacic OCacic;
31 CACIC_Computer OCacicComp; 32 CACIC_Computer OCacicComp;
32 cacic_software OCacicSoftware; 33 cacic_software OCacicSoftware;
  34 + cacic_hardware OCacicHardware;
33 QString testPath; 35 QString testPath;
34 QString testIniPath; 36 QString testIniPath;
35 QJsonObject session; 37 QJsonObject session;
@@ -70,6 +72,7 @@ private slots: @@ -70,6 +72,7 @@ private slots:
70 void testRemoveRegistry(); 72 void testRemoveRegistry();
71 void testIniciarDaemon(); 73 void testIniciarDaemon();
72 void testColetaSoftware(); 74 void testColetaSoftware();
  75 + void testColetaHardware();
73 void cleanupTestCase(); 76 void cleanupTestCase();
74 }; 77 };
75 78
gercols/gercols.cpp
@@ -45,11 +45,9 @@ void Gercols::run() @@ -45,11 +45,9 @@ void Gercols::run()
45 //emite sinal para começar a coleta 45 //emite sinal para começar a coleta
46 emit iniciaColeta(); 46 emit iniciaColeta();
47 47
48 -  
49 - //salva coleta em json  
50 - qDebug() << oColeta->toJsonObject();  
51 //salva json em arquivo 48 //salva json em arquivo
52 oCacic.setJsonToFile(oColeta->toJsonObject(), "coleta.json"); 49 oCacic.setJsonToFile(oColeta->toJsonObject(), "coleta.json");
  50 + oCacic.deleteFile("configReq.json");
53 //emite sinal "finished" pra finalizar a aplicação 51 //emite sinal "finished" pra finalizar a aplicação
54 emit finished(); 52 emit finished();
55 } 53 }
gercols/gercols.pro
@@ -26,6 +26,7 @@ SOURCES += \ @@ -26,6 +26,7 @@ SOURCES += \
26 ../src/ccacic.cpp \ 26 ../src/ccacic.cpp \
27 ../src/cacic_computer.cpp \ 27 ../src/cacic_computer.cpp \
28 ../src/cacic_software.cpp \ 28 ../src/cacic_software.cpp \
  29 + ../src/cacic_hardware.cpp \
29 ../src/operatingsystem.cpp \ 30 ../src/operatingsystem.cpp \
30 ../src/ccoleta.cpp \ 31 ../src/ccoleta.cpp \
31 ./gercols.cpp 32 ./gercols.cpp
@@ -35,6 +36,7 @@ HEADERS += \ @@ -35,6 +36,7 @@ HEADERS += \
35 ../src/ccacic.h \ 36 ../src/ccacic.h \
36 ../src/cacic_computer.h \ 37 ../src/cacic_computer.h \
37 ../src/cacic_software.h \ 38 ../src/cacic_software.h \
  39 + ../src/cacic_hardware.h \
38 ../src/operatingsystem.h \ 40 ../src/operatingsystem.h \
39 ../src/console.h \ 41 ../src/console.h \
40 ../src/ccoleta.h \ 42 ../src/ccoleta.h \
install-cacic/install-cacic.pro.user
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE QtCreatorProject> 2 <!DOCTYPE QtCreatorProject>
3 -<!-- Written by QtCreator 3.1.2, 2014-08-18T18:02:05. --> 3 +<!-- Written by QtCreator 3.1.2, 2014-08-20T18:37:20. -->
4 <qtcreator> 4 <qtcreator>
5 <data> 5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable> 6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -217,7 +217,9 @@ @@ -217,7 +217,9 @@
217 <value type="int">14</value> 217 <value type="int">14</value>
218 </valuelist> 218 </valuelist>
219 <value type="int" key="PE.EnvironmentAspect.Base">2</value> 219 <value type="int" key="PE.EnvironmentAspect.Base">2</value>
220 - <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> 220 + <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes">
  221 + <value type="QString">PROCESSOR_ARCHITECTURE=x64</value>
  222 + </valuelist>
221 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">install-cacic</value> 223 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">install-cacic</value>
222 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> 224 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
223 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:E:/LightBase/cacic-agente-project/cacic-agente/install-cacic/install-cacic.pro</value> 225 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:E:/LightBase/cacic-agente-project/cacic-agente/install-cacic/install-cacic.pro</value>
src/cacic_hardware.cpp
@@ -3,3 +3,188 @@ @@ -3,3 +3,188 @@
3 cacic_hardware::cacic_hardware() 3 cacic_hardware::cacic_hardware()
4 { 4 {
5 } 5 }
  6 +
  7 +void cacic_hardware::iniciaColeta()
  8 +{
  9 +#ifdef Q_OS_WIN
  10 + this->coletaHardware = coletaWin();
  11 +#else
  12 + this->coletaHardware = coletaLinux();
  13 +#endif
  14 +}
  15 +
  16 +QJsonObject cacic_hardware::coletaWin()
  17 +{
  18 + QJsonObject coleta;
  19 + wmi();
  20 + return coleta;
  21 +}
  22 +
  23 +QJsonObject cacic_hardware::coletaLinux()
  24 +{
  25 + QJsonObject coleta;
  26 +
  27 + return coleta;
  28 +}
  29 +
  30 +
  31 +QJsonObject cacic_hardware::toJsonObject()
  32 +{
  33 + QJsonObject coleta;
  34 +
  35 + return coleta;
  36 +}
  37 +
  38 +int cacic_hardware::wmi()
  39 +{
  40 +// HRESULT hres;
  41 +
  42 +// // Step 1: --------------------------------------------------
  43 +// // Initialize COM. ------------------------------------------
  44 +
  45 +// hres = CoInitializeEx(0, COINIT_MULTITHREADED);
  46 +// if (FAILED(hres))
  47 +// {
  48 +// cout << "Failed to initialize COM library. Error code = 0x"
  49 +// << hex << hres << endl;
  50 +// return 1; // Program has failed.
  51 +// }
  52 +
  53 +// // Step 2: --------------------------------------------------
  54 +// // Set general COM security levels --------------------------
  55 +
  56 +// hres = CoInitializeSecurity(
  57 +// NULL,
  58 +// -1, // COM authentication
  59 +// NULL, // Authentication services
  60 +// NULL, // Reserved
  61 +// RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
  62 +// RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
  63 +// NULL, // Authentication info
  64 +// EOAC_NONE, // Additional capabilities
  65 +// NULL // Reserved
  66 +// );
  67 +
  68 +
  69 +// if (FAILED(hres))
  70 +// {
  71 +// cout << "Failed to initialize security. Error code = 0x"
  72 +// << hex << hres << endl;
  73 +// CoUninitialize();
  74 +// return 1; // Program has failed.
  75 +// }
  76 +
  77 +// // Step 3: ---------------------------------------------------
  78 +// // Obtain the initial locator to WMI -------------------------
  79 +
  80 +// IWbemLocator *pLoc = NULL;
  81 +
  82 +// hres = CoCreateInstance(
  83 +// CLSID_WbemLocator,
  84 +// 0,
  85 +// CLSCTX_INPROC_SERVER,
  86 +// IID_IWbemLocator, (LPVOID *) &pLoc);
  87 +
  88 +// if (FAILED(hres))
  89 +// {
  90 +// cout << "Failed to create IWbemLocator object."
  91 +// << " Err code = 0x"
  92 +// << hex << hres << endl;
  93 +// CoUninitialize();
  94 +// return 1; // Program has failed.
  95 +// }
  96 +
  97 +// // Step 4: -----------------------------------------------------
  98 +// // Connect to WMI through the IWbemLocator::ConnectServer method
  99 +
  100 +// IWbemServices *pSvc = NULL;
  101 +
  102 +// // Connect to the local root\cimv2 namespace
  103 +// // and obtain pointer pSvc to make IWbemServices calls.
  104 +// hres = pLoc->ConnectServer(
  105 +// _bstr_t(L"ROOT\\CIMV2"),
  106 +// NULL,
  107 +// NULL,
  108 +// 0,
  109 +// NULL,
  110 +// 0,
  111 +// 0,
  112 +// &pSvc
  113 +// );
  114 +
  115 +// if (FAILED(hres))
  116 +// {
  117 +// cout << "Could not connect. Error code = 0x"
  118 +// << hex << hres << endl;
  119 +// pLoc->Release();
  120 +// CoUninitialize();
  121 +// return 1; // Program has failed.
  122 +// }
  123 +
  124 +// cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;
  125 +
  126 +
  127 +// // Step 5: --------------------------------------------------
  128 +// // Set security levels on the proxy -------------------------
  129 +
  130 +// hres = CoSetProxyBlanket(
  131 +// pSvc, // Indicates the proxy to set
  132 +// RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
  133 +// RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
  134 +// NULL, // Server principal name
  135 +// RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
  136 +// RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
  137 +// NULL, // client identity
  138 +// EOAC_NONE // proxy capabilities
  139 +// );
  140 +
  141 +// if (FAILED(hres))
  142 +// {
  143 +// cout << "Could not set proxy blanket. Error code = 0x"
  144 +// << hex << hres << endl;
  145 +// pSvc->Release();
  146 +// pLoc->Release();
  147 +// CoUninitialize();
  148 +// return 1; // Program has failed.
  149 +// }
  150 +
  151 +// // Step 6: --------------------------------------------------
  152 +// // Use the IWbemServices pointer to make requests of WMI ----
  153 +
  154 +// // For example, get the name of the operating system.
  155 +// // The IWbemService::ExecQueryAsync method will call
  156 +// // the QuerySink::Indicate method when it receives a result
  157 +// // and the QuerySink::Indicate method will display the OS name
  158 +// QuerySink* pResponseSink = new QuerySink();
  159 +// hres = pSvc->ExecQueryAsync(
  160 +// bstr_t("WQL"),
  161 +// bstr_t("SELECT * FROM Win32_OperatingSystem"),
  162 +// WBEM_FLAG_BIDIRECTIONAL,
  163 +// NULL,
  164 +// pResponseSink);
  165 +
  166 +// if (FAILED(hres))
  167 +// {
  168 +// cout << "Query for operating system name failed."
  169 +// << " Error code = 0x"
  170 +// << hex << hres << endl;
  171 +// pSvc->Release();
  172 +// pLoc->Release();
  173 +// pResponseSink->Release();
  174 +// CoUninitialize();
  175 +// return 1; // Program has failed.
  176 +// }
  177 +
  178 +// // Step 7: -------------------------------------------------
  179 +// // Wait to get the data from the query in step 6 -----------
  180 +// Sleep(500);
  181 +// pSvc->CancelAsyncCall(pResponseSink);
  182 +
  183 +// // Cleanup
  184 +// // ========
  185 +// pSvc->Release();
  186 +// pLoc->Release();
  187 +// CoUninitialize();
  188 +
  189 + return 0; // Program successfully completed.
  190 +}
src/cacic_hardware.h
1 #ifndef CACIC_HARDWARE_H 1 #ifndef CACIC_HARDWARE_H
2 #define CACIC_HARDWARE_H 2 #define CACIC_HARDWARE_H
  3 +#include <ccacic.h>
  4 +#include <wbemidl.h>
  5 +#include <querysink.h>
  6 +#include <iostream>
  7 +using namespace std;
  8 +#include <comutil.h>
  9 +# pragma comment(lib, "wbemuuid.lib")
3 10
4 class cacic_hardware 11 class cacic_hardware
5 { 12 {
6 public: 13 public:
7 cacic_hardware(); 14 cacic_hardware();
  15 + void iniciaColeta();
  16 + QJsonObject toJsonObject();
  17 +
  18 +private:
  19 + QJsonObject coletaHardware;
  20 + int wmi();
  21 +
  22 + QJsonObject coletaWin();
  23 + QJsonObject coletaLinux();
8 }; 24 };
9 25
10 #endif // CACIC_HARDWARE_H 26 #endif // CACIC_HARDWARE_H
src/cacic_software.cpp
@@ -16,20 +16,35 @@ void cacic_software::iniciaColeta() @@ -16,20 +16,35 @@ void cacic_software::iniciaColeta()
16 QJsonObject cacic_software::coletaWin() 16 QJsonObject cacic_software::coletaWin()
17 { 17 {
18 QJsonObject softwaresJson; 18 QJsonObject softwaresJson;
19 - QSettings softwares("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat);  
20 -// qDebug() << softwares.childGroups();  
21 - foreach (QString group, softwares.childGroups()){  
22 - QVariantMap software;  
23 - softwares.beginGroup(group);  
24 - software["DisplayName"] = softwares.value("DisplayName");  
25 - software["Publisher"] = softwares.value("Publisher");  
26 - software["InstallLocation"] = softwares.value("InstallLocation");  
27 - software["InstallDate"] = softwares.value("InstallDate");  
28 - software["URLInfoAbout"] = softwares.value("URLInfoAbout");  
29 - softwares.endGroup();  
30 - softwaresJson[group] = QJsonObject::fromVariantMap(software);  
31 - } 19 + QStringList regedit;
  20 + regedit.append("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
  21 + regedit.append("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
  22 + foreach(QString registry, regedit){
  23 + QSettings softwares(registry, QSettings::NativeFormat);
  24 + // qDebug() << softwares.childGroups();
  25 + foreach (QString group, softwares.childGroups()){
  26 + QVariantMap software;
  27 + softwares.beginGroup(group);
  28 + qDebug() << softwares.fileName() << softwares.value("DisplayName");
  29 + if (!softwares.value("DisplayName").isNull())
  30 + software["DisplayName"] = softwares.value("DisplayName");
  31 + if (!softwares.value("Publisher").isNull())
  32 + software["Publisher"] = softwares.value("Publisher");
  33 + if (!softwares.value("InstallLocation").isNull())
  34 + software["InstallLocation"] = softwares.value("InstallLocation");
  35 + if (!softwares.value("InstallDate").isNull())
  36 + software["InstallDate"] = softwares.value("InstallDate");
  37 + if (!softwares.value("URLInfoAbout").isNull())
  38 + software["URLInfoAbout"] = softwares.value("URLInfoAbout");
  39 + if (!softwares.value("UninstallString").isNull())
  40 + software["UninstallString"] = software.value("UninstallString");
  41 + if (!softwares.value("QuietUninstallString").isNull())
  42 + software["QuietUninstallString"] = software.value("QuietUninstallString");
  43 + softwares.endGroup();
  44 + softwaresJson[group] = QJsonObject::fromVariantMap(software);
  45 + }
32 // qDebug() << softwaresJson; 46 // qDebug() << softwaresJson;
  47 + }
33 return softwaresJson; 48 return softwaresJson;
34 } 49 }
35 50
src/cacic_software.h
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 #define CACIC_SOFTWARE_H 2 #define CACIC_SOFTWARE_H
3 #include <QtCore> 3 #include <QtCore>
4 #include <ccacic.h> 4 #include <ccacic.h>
  5 +
5 class cacic_software 6 class cacic_software
6 { 7 {
7 public: 8 public: