Commit d6cd8f135e7c62b68af86e98f0108224d795e41e

Authored by Eric Menezes Noronha
1 parent 78a93534
Exists in master

Classe wmi

cacic-teste/cacic-teste.pro
... ... @@ -29,6 +29,7 @@ SOURCES += \
29 29 ../src/vqtconvert.cpp \
30 30 ../src/vregistry.cpp \
31 31 ../src/ccoleta.cpp \
  32 + ../src/wmi.cpp \
32 33 # ../src/qtservice/src/qtservice.cpp \
33 34 # ../src/qtservice/src/qtservice_unix.cpp \
34 35 # ../src/qtservice/src/qtservice_win.cpp \
... ... @@ -48,6 +49,7 @@ HEADERS += \
48 49 ../src/vqtconvert.h \
49 50 ../src/vregistry.h \
50 51 ../src/ccoleta.h \
  52 + ../src/wmi.h \
51 53 # ../src/qtservice/src/qtservice.h \
52 54 # ../src/qtservice/src/qtservice_p.h \
53 55 # ../src/qtservice/src/qtunixserversocket.h \
... ...
cacicD/cacicD.pro
... ... @@ -6,7 +6,7 @@
6 6  
7 7 QT += core
8 8 QT -= gui
9   -
  9 +QT += network
10 10 TARGET = cacicD
11 11 CONFIG += console
12 12 CONFIG -= app_bundle
... ...
cacicD/cacicd.cpp
... ... @@ -4,7 +4,7 @@ cacicD::cacicD(int argc, char **argv) : QtService<QCoreApplication>(argc, argv,
4 4 {
5 5 try{
6 6 setServiceDescription("Cacic Daemon");
7   - setServiceFlags(QtServiceBase::CannotBeStopped);
  7 + setServiceFlags(QtService::Default);
8 8 } catch (...){
9 9 qCritical() << "Error desconhecido no construtor.";
10 10 }
... ...
gercols/gercols.pro
... ... @@ -34,6 +34,7 @@ SOURCES += \
34 34 ./gercols.cpp \
35 35 ../src/vregistry.cpp \
36 36 ../src/vqtconvert.cpp \
  37 + ../src/wmi.cpp \
37 38  
38 39 HEADERS += \
39 40 ../src/ccacic.h \
... ... @@ -46,6 +47,7 @@ HEADERS += \
46 47 ./gercols.h \
47 48 ../src/vregistry.h \
48 49 ../src/vqtconvert.h \
  50 + ../src/wmi.h \
49 51  
50 52 INCLUDEPATH += ../src \
51 53 ../src/crypto++/include/
... ...
gercols/main.cpp
... ... @@ -4,6 +4,7 @@
4 4 int main(int argc, char *argv[])
5 5 {
6 6 QCoreApplication a(argc, argv);
  7 + a.setApplicationName("Gercols");
7 8  
8 9 //crio o objeto que será responsável pela execução
9 10 Gercols *oGercols = new Gercols(&a);
... ...
install-cacic/install-cacic.pro.user
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <!DOCTYPE QtCreatorProject>
3   -<!-- Written by QtCreator 3.1.2, 2014-08-29T15:37:15. -->
  3 +<!-- Written by QtCreator 3.1.2, 2014-09-01T17:24:48. -->
4 4 <qtcreator>
5 5 <data>
6 6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
... ...
src/cacic_computer.cpp
... ... @@ -14,11 +14,11 @@ CACIC_Computer::CACIC_Computer()
14 14 *
15 15 */
16 16 QList<QVariantMap> CACIC_Computer::networkInterfacesRunning(){
17   - QNetworkInterface interface;
  17 + QNetworkInterface netInterface;
18 18 QVariantMap mapInterface;
19 19 QList<QVariantMap> listaMap;
20 20  
21   - foreach (QNetworkInterface in, interface.allInterfaces()) {
  21 + foreach (QNetworkInterface in, netInterface.allInterfaces()) {
22 22 if (!(bool)(in.flags() & QNetworkInterface::IsLoopBack) &&
23 23 !(bool)(in.flags() & QNetworkInterface::IsPointToPoint) &&
24 24 (bool)(in.flags() & QNetworkInterface::IsRunning)){
... ...
src/cacic_hardware.cpp
... ... @@ -16,133 +16,137 @@ QJsonObject cacic_hardware::coletaWin()
16 16 {
17 17 QJsonObject hardware;
18 18 QStringList params;
19   - QJsonValue wmi;
  19 + QJsonValue wmiResult;
20 20 // Win32_ComputerSystem (Caption, Description, Domain, DNSHostName, Manufacturer,
21 21 // Model, Name, PrimaryOwnerName, TotalPhysicalMemory, Workgroup)
22 22 params << "Caption" << "Description" << "Domain" << "DNSHostName" << "Manufacturer" << "Model"
23 23 << "Name" << "PrimaryOwnerName" << "TotalPhysicalMemory" << "Workgroup";
24   - wmi = wmiSearch("Win32_ComputerSystem", params);
25   - if (!wmi.isNull())
26   - hardware["ComputerSystem"] = wmi;
  24 + wmiResult = wmi::wmiSearch("Win32_ComputerSystem", params);
  25 + if (!wmiResult.isNull())
  26 + hardware["ComputerSystem"] = wmiResult;
27 27 //Win32_PortableBattery
28 28 // (Verifica se é notebook)
29 29 params.clear();
30   - hardware["IsNotebook"] = QJsonValue::fromVariant(!wmiSearch("Win32_PortableBattery", params).isNull());
  30 + wmiResult = wmi::wmiSearch("Win32_PortableBattery", params);
  31 + if (!wmiResult.isNull()){
  32 + hardware["IsNotebook"] = QJsonValue::fromVariant(!wmiResult.isNull());
  33 + hardware["PortableBattery"] = wmiResult;
  34 + }
31 35 //Win32_Bios
32 36 // (Manufacturer, SMBIOSBIOSVersion, BIOSVersion, Version, SerialNumber, ReleaseDate)
33 37 params.clear();
34 38 params << "Manufacturer" << "SMBIOSBIOSVersion" << "BIOSVersion" << "Version" << "SerialNumber" << "ReleaseDate";
35   - wmi = wmiSearch("Win32_Bios", params);
36   - if (!wmi.isNull())
37   - hardware["Bios"] = wmi;
  39 + wmiResult = wmi::wmiSearch("Win32_Bios", params);
  40 + if (!wmiResult.isNull())
  41 + hardware["Bios"] = wmiResult;
38 42 //Win32_BaseBoard
39 43 // (Manufacturer, Model, SerialNumber)
40 44 params.clear();
41 45 params << "Manufacturer" << "Model" << "SerialNumber";
42   - wmi = wmiSearch("Win32_Baseboard", params);
43   - if (!wmi.isNull())
44   - hardware["BaseBoard"] = wmi;
  46 + wmiResult = wmi::wmiSearch("Win32_Baseboard", params);
  47 + if (!wmiResult.isNull())
  48 + hardware["BaseBoard"] = wmiResult;
45 49 //Win32_SystemEnclosure
46 50 // (Manufacturer, ChassisTypes, SerialNumber, SMBIOSAssetTag)
47 51 params.clear();
48 52 params << "Manufacturer" << "ChassisTypes" << "SerialNumber" << "SMBIOSAssetTag";
49   - wmi = wmiSearch("Win32_SystemEnclosure", params);
50   - if (!wmi.isNull())
51   - hardware["SystemEnclosure"] = wmi;
  53 + wmiResult = wmi::wmiSearch("Win32_SystemEnclosure", params);
  54 + if (!wmiResult.isNull())
  55 + hardware["SystemEnclosure"] = wmiResult;
52 56 //Win32_FloppyDrive
53 57 // (Manufacturer, Caption, Description, Name, MediaType, Size)
54 58 params.clear();
55 59 params << "Manufacturer" << "Caption" << "Description" << "Name";
56   - wmi = wmiSearch("Win32_FloppyDrive", params);
57   - if (!wmi.isNull())
58   - hardware["FloppyDrive"] = wmi;
  60 + wmiResult = wmi::wmiSearch("Win32_FloppyDrive", params);
  61 + if (!wmiResult.isNull())
  62 + hardware["FloppyDrive"] = wmiResult;
59 63 //Win32_DiskDrive
60 64 // (Manufacturer, Caption, Description, Name, MediaType, Size, SerialNumber, Model, FirmwareRevision)
61 65 params.clear();
62 66 params << "Manufacturer" << "Caption" << "Description" << "Name" << "MediaType" << "Size" << "SerialNumber"
63 67 << "Model" << "FirmwareRevision";
64   - wmi = wmiSearch("Win32_DiskDrive", params);
65   - if (!wmi.isNull())
66   - hardware["DiskDrive"] = wmi;
  68 + wmiResult = wmi::wmiSearch("Win32_DiskDrive", params);
  69 + if (!wmiResult.isNull())
  70 + hardware["DiskDrive"] = wmiResult;
67 71 //Win32_CDROMDrive
68 72 // (Manufacturer, Caption, Description, Name, MediaType, Size)
69 73 params.clear();
70 74 params << "Manufacturer" << "Caption" << "Description" << "MediaType" << "Name" << "Size";
71   - wmi = wmiSearch("Win32_CDROMDrive", params);
72   - if (!wmi.isNull())
73   - hardware["CDROMDrive"] = wmi;
  75 + wmiResult = wmi::wmiSearch("Win32_CDROMDrive", params);
  76 + if (!wmiResult.isNull())
  77 + hardware["CDROMDrive"] = wmiResult;
74 78 //Win32_FloppyController
75 79 // (Manufacturer, Caption, Description, Name)
76 80 params.clear();
77 81 params << "Manufacturer" << "Caption" << "Description" << "Name";
78   - wmi = wmiSearch("Win32_FloppyController", params);
79   - if (!wmi.isNull())
80   - hardware["FloppyController"] = wmi;
  82 + wmiResult = wmi::wmiSearch("Win32_FloppyController", params);
  83 + if (!wmiResult.isNull())
  84 + hardware["FloppyController"] = wmiResult;
81 85 //Win32_SCSIController
82 86 // (Manufacturer, Caption, Description, Name, HardwareVersion)
83 87 params.clear();
84 88 params << "Manufacturer" << "Caption" << "Description" << "Name" << "HardwareVersion";
85   - wmi = wmiSearch("Win32_SCSIController", params);
86   - if (!wmi.isNull())
87   - hardware["SCSIController"] = wmi;
  89 + wmiResult = wmi::wmiSearch("Win32_SCSIController", params);
  90 + if (!wmiResult.isNull())
  91 + hardware["SCSIController"] = wmiResult;
88 92 //Win32_InfraredDevice
89 93 // (Manufacturer, Caption, Description, Name)
90 94 params.clear();
91 95 params << "Manufacturer" << "Caption" << "Description" << "Name";
92   - wmi = wmiSearch("Win32_InfraredDevice", params);
93   - if (!wmi.isNull())
94   - hardware["InfraredDevice"] = wmi;
  96 + wmiResult = wmi::wmiSearch("Win32_InfraredDevice", params);
  97 + if (!wmiResult.isNull())
  98 + hardware["InfraredDevice"] = wmiResult;
95 99 //Win32_USBController
96 100 // (Manufacturer, Caption, Description, Name)
97 101 params.clear();
98 102 params << "Manufacturer" << "Caption" << "Description" << "Name";
99   - wmi = wmiSearch("Win32_USBController", params);
100   - if (!wmi.isNull())
101   - hardware["USBController"] = wmi;
  103 + wmiResult = wmi::wmiSearch("Win32_USBController", params);
  104 + if (!wmiResult.isNull())
  105 + hardware["USBController"] = wmiResult;
102 106 //Win32_PCMCIAController
103 107 // (Manufacturer, Caption, Description, Name)
104 108 params.clear();
105 109 params << "Manufacturer" << "Caption" << "Description" << "Name";
106   - wmi = wmiSearch("Win32_PCMCIAController", params);
107   - if (!wmi.isNull())
108   - hardware["PCMCIAController"] = wmi;
  110 + wmiResult = wmi::wmiSearch("Win32_PCMCIAController", params);
  111 + if (!wmiResult.isNull())
  112 + hardware["PCMCIAController"] = wmiResult;
109 113 //Win32_VideoController
110 114 // (Description, VideoProcessor, AdapterRAM, CurrentHorizontalResolution, CurrentVerticalResolution, Caption, Name)
111 115 params.clear();
112 116 params << "VideoProcessor" << "AdapterRAM" << "Description" << "Name" << "CurrentHorizontalResolution"
113 117 << "CurrentVerticalResolution" << "Caption" << "AcceleratorCapabilities";
114   - wmi = wmiSearch("Win32_VideoController", params);
115   - if (!wmi.isNull())
116   - hardware["VideoController"] = wmi;
  118 + wmiResult = wmi::wmiSearch("Win32_VideoController", params);
  119 + if (!wmiResult.isNull())
  120 + hardware["VideoController"] = wmiResult;
117 121 //Win32_DesktopMonitor
118 122 // (MonitorManufacturer, Caption, Description, MonitorType, Name)
119 123 params.clear();
120 124 params << "MonitorManufacturer" << "Caption" << "Description" << "MonitorType" << "Name";
121   - wmi = wmiSearch("Win32_DesktopMonitor", params);
122   - if (!wmi.isNull())
123   - hardware["DesktopMonitor"] = wmi;
  125 + wmiResult = wmi::wmiSearch("Win32_DesktopMonitor", params);
  126 + if (!wmiResult.isNull())
  127 + hardware["DesktopMonitor"] = wmiResult;
124 128 //Win32_Printer
125 129 // (Name, DriverName, PortName, ServerName, ShareName, HorizontalResolution, VerticalResolution, Comment, Shared, Network)
126 130 params.clear();
127 131 params << "Name" << "DriverName" << "PortName" << "ServerName" << "ShareName" << "HorizontalResolution"
128 132 << "VerticalResolution" << "Comment" << "Shared" << "Network";
129   - wmi = wmiSearch("Win32_Printer", params);
130   - if (!wmi.isNull())
131   - hardware["Printer"] = wmi;
  133 + wmiResult = wmi::wmiSearch("Win32_Printer", params);
  134 + if (!wmiResult.isNull())
  135 + hardware["Printer"] = wmiResult;
132 136 //Win32_PortConnector
133 137 // (ExternalReferenceDesignator, PortType (verificar), ConnectorType (verificar), Manufacturer, Caption, Name)
134 138 params.clear();
135 139 params << "ExternalReferenceDesignator" << "PortType" << "ConnectorType" << "Name" << "Caption" << "Manufacturer";
136   - wmi = wmiSearch("Win32_PortConnector", params);
137   - if (!wmi.isNull())
138   - hardware["PortConnector"] = wmi;
  140 + wmiResult = wmi::wmiSearch("Win32_PortConnector", params);
  141 + if (!wmiResult.isNull())
  142 + hardware["PortConnector"] = wmiResult;
139 143 //Win32_SerialPort
140 144 // (Name, Caption, Description, StatusInfo)
141 145 params.clear();
142 146 params << "Name" << "Caption" << "Description" << "StatusInfo";
143   - wmi = wmiSearch("Win32_SerialPort", params);
144   - if (!wmi.isNull())
145   - hardware["SerialPort"] = wmi;
  147 + wmiResult = wmi::wmiSearch("Win32_SerialPort", params);
  148 + if (!wmiResult.isNull())
  149 + hardware["SerialPort"] = wmiResult;
146 150 //Win32_Processor
147 151 // (MaxClockSpeed, Name, Architecture, NumberOfCores, SocketDesignation, Manufacturer, Architecture, NumberOfCores
148 152 // CurrentClockSpeed, MaxClockSpeed, L2CacheSize, AddressWidth, DataWidth, VoltageCaps, CpuStatus,
... ... @@ -151,154 +155,64 @@ QJsonObject cacic_hardware::coletaWin()
151 155 params << "MaxClockSpeed" << "Name" << "Architecture" << "NumberOfCores" << "SocketDesignation" << "Manufacturer"
152 156 << "Architecture" << "NumberOfCores" << "CurrentClockSpeed" << "MaxClockSpeed" << "L2CacheSize" << "AddressWidth"
153 157 << "DataWidth" << "VoltageCaps" << "CpuStatus" << "ProcessorId" << "UniqueId" << "AddressWidth";
154   - wmi = wmiSearch("Win32_Processor", params);
155   - if (!wmi.isNull())
156   - hardware["Processor"] = wmi;
  158 + wmiResult = wmi::wmiSearch("Win32_Processor", params);
  159 + if (!wmiResult.isNull())
  160 + hardware["Processor"] = wmiResult;
157 161 //Win32_OperatingSystem
158 162 // (Name, Version, CSDVersion, Description, InstallDate, Organization, RegisteredUser, SerialNumber)
159 163 params.clear();
160 164 params << "Name" << "Version" << "CSDVersion" << "Description" << "InstallDate" << "Organization" << "RegisteredUser"
161 165 << "SerialNumber";
162   - wmi = wmiSearch("Win32_OperatingSystem", params);
163   - if (!wmi.isNull())
164   - hardware["OperatingSystem"] = wmi;
  166 + wmiResult = wmi::wmiSearch("Win32_OperatingSystem", params);
  167 + if (!wmiResult.isNull())
  168 + hardware["OperatingSystem"] = wmiResult;
165 169 //Win32_SystemSlot
166 170 // (Name, Description, SlotDesignation, CurrentUsage, Status, Shared)
167 171 params.clear();
168 172 params << "Name" << "Description" << "SlotDesignation" << "CurrentUsage" << "Status" << "Shared";
169   - wmi = wmiSearch("Win32_SystemSlot", params);
170   - if (!wmi.isNull())
171   - hardware["SystemSlot"] = wmi;
  173 + wmiResult = wmi::wmiSearch("Win32_SystemSlot", params);
  174 + if (!wmiResult.isNull())
  175 + hardware["SystemSlot"] = wmiResult;
172 176 //Win32_LogicalDisk
173 177 // (Caption, DriveType, Filesystem, VolumeName, ProviderName, Filesystem, VolumeName, Size, FreeSpace)
174 178 params.clear();
175 179 params << "Caption" << "DriveType" << "Filesystem" << "VolumeName" << "ProviderName" << "Filesystem" << "VolumeName"
176 180 << "Size" << "FreeSpace";
177   - wmi = wmiSearch("Win32_LogicalDisk", params);
178   - if (!wmi.isNull())
179   - hardware["LogicalDisk"] = wmi;
  181 + wmiResult = wmi::wmiSearch("Win32_LogicalDisk", params);
  182 + if (!wmiResult.isNull())
  183 + hardware["LogicalDisk"] = wmiResult;
180 184 //Win32_PhysicalMemory
181 185 // (Caption, Description, BankLabel, DeviceLocator, Capacity, Speed, MemoryType, SerialNumber)
182 186 params.clear();
183 187 params << "Caption" << "Description" << "BankLabel" << "DeviceLocator" << "Capacity" << "Speed" << "MemoryType";
184   - wmi = wmiSearch("Win32_PhysicalMemory", params);
185   - if (!wmi.isNull())
186   - hardware["PhysicalMemory"] = wmi;
  188 + wmiResult = wmi::wmiSearch("Win32_PhysicalMemory", params);
  189 + if (!wmiResult.isNull())
  190 + hardware["PhysicalMemory"] = wmiResult;
187 191 //Win32_Keyboard
188 192 // (Caption, Description, Name)
189 193 params.clear();
190 194 params << "Caption" << "Description" << "Name" << "Layout";
191   - wmi = wmiSearch("Win32_Keyboard", params);
192   - if (!wmi.isNull())
193   - hardware["Keyboard"] = wmi;
  195 + wmiResult = wmi::wmiSearch("Win32_Keyboard", params);
  196 + if (!wmiResult.isNull())
  197 + hardware["Keyboard"] = wmiResult;
194 198 //Win32_PointingDevice
195 199 // (Manufacturer, Caption, Description, PointingType, DeviceInterface)
196 200 params.clear();
197 201 params << "Manufacturer" << "Caption" << "Description" << "PointingType" << "DeviceInterface";
198   - wmi = wmiSearch("Win32_PointingDevice", params);
199   - if (!wmi.isNull())
200   - hardware["PointingDevice"] = wmi;
  202 + wmiResult = wmi::wmiSearch("Win32_PointingDevice", params);
  203 + if (!wmiResult.isNull())
  204 + hardware["PointingDevice"] = wmiResult;
201 205 //Win32_PnPSignedDriver
202 206 // (Manufacturer, DeviceName, Description, Location, DeviceClass)
203 207 params.clear();
204 208 params << "Manufacturer" << "DeviceName" << "Description" << "Location" << "DeviceClass";
205   - wmi = wmiSearch("Win32_PnPSignedDriver", params);
206   - if (!wmi.isNull())
207   - hardware["PnPSignedDriver"] = wmi;
  209 + wmiResult = wmi::wmiSearch("Win32_PnPSignedDriver", params);
  210 + if (!wmiResult.isNull())
  211 + hardware["PnPSignedDriver"] = wmiResult;
208 212 // qDebug() << hardware;
209 213 return hardware;
210 214 }
211 215  
212   -QJsonValue cacic_hardware::wmiSearch(QString classe, QStringList params)
213   -{
214   - QJsonValue wmiReturn;
215   - QJsonObject itemWmi;
216   - QJsonArray arrayItens;
217   - QString paramsString;
218   - if (!params.empty()){
219   - for(int i = 0; i!=params.size();i++)
220   - paramsString.append(params.at(i) + ((i != params.size() - 1) ? "," : ""));
221   - }
222   - QString query = "SELECT " + ((!paramsString.isEmpty()) ? paramsString : "*") + " FROM " + classe;
223   - //conecta ao script (Como já estamos usando QObject, o WbemScripting... não funciona chamando normal,
224   - // por isso deve ser usado o CoInitializeEx)
225   - ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
226   - QAxObject *objIWbemLocator = new QAxObject();
227   - objIWbemLocator->setControl("WbemScripting.SWbemLocator");
228   - if (objIWbemLocator->isNull())
229   - return QJsonValue();
230   - //conecta ao wmi
231   - QAxObject *objWMIService = objIWbemLocator->querySubObject("ConnectServer(QString&,QString&)",
232   - QString("."),
233   - QString("root\\CIMV2")
234   - );
235   -// qDebug() << ">>>>>>>>>" << objIWbemLocator->isNull() << objWMIService->isNull();
236   - //Faz a pesquisa no wmi
237   - QAxObject* returnList = objWMIService->querySubObject("ExecQuery(QString&)", query);
238   -// qDebug() << "<<<<<<<<<<<<<<<<<<<<<<<";
239   - QAxObject *enum1 = returnList->querySubObject("_NewEnum");
240   -
241   - IEnumVARIANT* enumInterface = 0;
242   -
243   - enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface);
244   -
245   - enumInterface->Reset();
246   - int countReturnListObj = returnList->dynamicCall("Count").toInt();
247   - for (int i = 0; i < countReturnListObj; i++) {
248   - VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT));
249   - if (enumInterface->Next(1,theItem,NULL) != S_FALSE){
250   - QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal);
251   - if(item){
252   - //pega o retorno da query
253   - QString instance = item->dynamicCall("GetObjectText_(int)", QVariant(0)).toString();
254   - QStringList instanceList = instance.split("\n\t");
255   - //Pra cada linha grava no json os valores com cada tag
256   - foreach(QString value, instanceList){
257   - QStringList valueList = value.split("=");
258   - if (valueList.size() > 1){
259   - QString tag = valueList.at(0).trimmed();
260   - QString aux = valueList.at(1).trimmed();
261   - aux.remove("\"");
262   - aux.remove(";");
263   - aux.remove("\n");
264   - //verifica se é lista
265   - if(aux.startsWith("{") && aux.endsWith("}")){
266   - QStringList auxList = aux.split(",");
267   - QJsonArray jList;
268   - foreach(QString valueList, auxList){
269   - if (valueList.contains("{"))
270   - valueList.remove("{");
271   - if (valueList.contains("}"))
272   - valueList.remove("}");
273   - jList.append(valueList.trimmed());
274   - }
275   - itemWmi[tag] = jList;
276   - } else {
277   - //O último valor sempre volta com "}" no final.
278   - if (aux.contains("}"))
279   - aux.remove("}");
280   - itemWmi[tag] = QJsonValue::fromVariant(aux.trimmed());
281   - }
282   - }
283   - } // foreach(QString value, instanceList)
284   - } // if(item)
285   - } // if (enumInterface->Next(1,theItem,NULL) != S_FALSE)
286   - //Se houver mais de um objeto, grava em uma lista
287   - if (countReturnListObj > 1){
288   - arrayItens.append(QJsonValue(itemWmi));
289   - }
290   - }
291   - objIWbemLocator->clear();
292   - ::CoUninitialize();
293   - //se for mais de um objeto, retorna array.
294   - if (!arrayItens.isEmpty())
295   - wmiReturn = QJsonValue(arrayItens);
296   - //senão, se o objeto não for vazio (se tiver coletado algo)
297   - else if (!itemWmi.isEmpty())
298   - wmiReturn = QJsonValue(itemWmi);
299   -
300   - return wmiReturn;
301   -}
302 216 #elif defined(Q_OS_LINUX)
303 217 QJsonObject cacic_hardware::coletaLinux()
304 218 {
... ...
src/cacic_hardware.h
... ... @@ -8,8 +8,7 @@
8 8 #include <console.h>
9 9 #include <operatingsystem.h>
10 10 #ifdef Q_OS_WIN
11   - #include <windows.h>
12   - #include <ActiveQt/ActiveQt>
  11 + #include <wmi.h>
13 12 #endif
14 13  
15 14 class cacic_hardware
... ... @@ -22,7 +21,6 @@ public:
22 21 private:
23 22 #ifdef Q_OS_WIN
24 23 QJsonObject coletaWin();
25   - QJsonValue wmiSearch(QString classe, QStringList params);
26 24  
27 25 #elif defined(Q_OS_LINUX)
28 26 QJsonObject coletaLinux();
... ...
src/cacic_software.h
... ... @@ -4,7 +4,6 @@
4 4 #include <ccacic.h>
5 5 #include <console.h>
6 6 #include <operatingsystem.h>
7   -
8 7 #ifdef Q_OS_WIN
9 8 #include <vqtconvert.h>
10 9 #include <vregistry.h>
... ...
src/operatingsystem.cpp
... ... @@ -45,16 +45,15 @@ int OperatingSystem::coletaIdOs(){
45 45 QString OperatingSystem::coletaNomeOs()
46 46 {
47 47 #if defined(Q_OS_WIN)
48   - QString text;
49   - QStringList environment = QProcessEnvironment::systemEnvironment().toStringList();
50   - foreach (text, environment) {
51   -// qDebug() << text;
52   - if (text.contains("OS=" , Qt::CaseInsensitive) ){
53   - QStringList split = text.split("=");
54   - // qDebug() << split[1];
55   - return split[1];
56   - }
57   - }
  48 + QStringList params;
  49 + QJsonValue osName;
  50 + params << "Name";
  51 + osName = wmi::wmiSearch("Win32_OperatingSystem", params);
  52 + if (!osName.isNull()){
  53 + QString retorno = osName.toObject()["Name"].toString();
  54 + retorno = retorno.left(retorno.indexOf("|"));
  55 + return retorno;
  56 + }
58 57 #elif defined(Q_OS_LINUX)
59 58 ConsoleObject console;
60 59 QStringList catOutput = console("cat /etc/*release").split("\n");
... ...
src/operatingsystem.h
... ... @@ -5,9 +5,11 @@
5 5 #include <QString>
6 6 #include <QStringList>
7 7 #include <QSysInfo>
8   -
9 8 #include "ccacic.h"
10 9 #include "console.h"
  10 +#ifdef Q_OS_WIN
  11 + #include "wmi.h"
  12 +#endif
11 13  
12 14 class OperatingSystem
13 15 {
... ...
src/qtservice/common.pri
1   -exists(config.pri):infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qtservice-uselib
  1 +#exists(config.pri):infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qtservice-uselib
2 2 TEMPLATE += fakelib
3 3 QTSERVICE_LIBNAME = QtSolutions_Service-head
4 4 CONFIG(debug, debug|release) {
... ...
src/wmi.cpp
... ... @@ -3,3 +3,94 @@
3 3 wmi::wmi()
4 4 {
5 5 }
  6 +
  7 +QJsonValue wmi::wmiSearch(QString classe, QStringList params)
  8 +{
  9 + QJsonValue wmiReturn;
  10 + QJsonObject itemWmi;
  11 + QJsonArray arrayItens;
  12 + QString paramsString;
  13 + if (!params.empty()){
  14 + for(int i = 0; i!=params.size();i++)
  15 + paramsString.append(params.at(i) + ((i != params.size() - 1) ? "," : ""));
  16 + }
  17 + QString query = "SELECT " + ((!paramsString.isEmpty()) ? paramsString : "*") + " FROM " + classe;
  18 + //conecta ao script (Como já estamos usando QObject, o WbemScripting... não funciona chamando normal,
  19 + // por isso deve ser usado o CoInitializeEx)
  20 + ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
  21 + QAxObject *objIWbemLocator = new QAxObject();
  22 + objIWbemLocator->setControl("WbemScripting.SWbemLocator");
  23 + if (objIWbemLocator->isNull())
  24 + return QJsonValue();
  25 + //conecta ao wmi
  26 + QAxObject *objWMIService = objIWbemLocator->querySubObject("ConnectServer(QString&,QString&)",
  27 + QString("."),
  28 + QString("root\\CIMV2")
  29 + );
  30 +// qDebug() << ">>>>>>>>>" << objIWbemLocator->isNull() << objWMIService->isNull();
  31 + //Faz a pesquisa no wmi
  32 + QAxObject* returnList = objWMIService->querySubObject("ExecQuery(QString&)", query);
  33 +// qDebug() << "<<<<<<<<<<<<<<<<<<<<<<<";
  34 + QAxObject *enum1 = returnList->querySubObject("_NewEnum");
  35 +
  36 + IEnumVARIANT* enumInterface = 0;
  37 +
  38 + enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface);
  39 +
  40 + enumInterface->Reset();
  41 + int countReturnListObj = returnList->dynamicCall("Count").toInt();
  42 + for (int i = 0; i < countReturnListObj; i++) {
  43 + VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT));
  44 + if (enumInterface->Next(1,theItem,NULL) != S_FALSE){
  45 + QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal);
  46 + if(item){
  47 + //pega o retorno da query
  48 + QString instance = item->dynamicCall("GetObjectText_(int)", QVariant(0)).toString();
  49 + QStringList instanceList = instance.split("\n\t");
  50 + //Pra cada linha grava no json os valores com cada tag
  51 + foreach(QString value, instanceList){
  52 + QStringList valueList = value.split("=");
  53 + if (valueList.size() > 1){
  54 + QString tag = valueList.at(0).trimmed();
  55 + QString aux = valueList.at(1).trimmed();
  56 + aux.remove("\"");
  57 + aux.remove(";");
  58 + aux.remove("\n");
  59 + //verifica se é lista
  60 + if(aux.startsWith("{") && aux.endsWith("}")){
  61 + QStringList auxList = aux.split(",");
  62 + QJsonArray jList;
  63 + foreach(QString valueList, auxList){
  64 + if (valueList.contains("{"))
  65 + valueList.remove("{");
  66 + if (valueList.contains("}"))
  67 + valueList.remove("}");
  68 + jList.append(valueList.trimmed());
  69 + }
  70 + itemWmi[tag] = jList;
  71 + } else {
  72 + //O último valor sempre volta com "}" no final.
  73 + if (aux.contains("}"))
  74 + aux.remove("}");
  75 + itemWmi[tag] = QJsonValue::fromVariant(aux.trimmed());
  76 + }
  77 + }
  78 + } // foreach(QString value, instanceList)
  79 + } // if(item)
  80 + } // if (enumInterface->Next(1,theItem,NULL) != S_FALSE)
  81 + //Se houver mais de um objeto, grava em uma lista
  82 + if (countReturnListObj > 1){
  83 + arrayItens.append(QJsonValue(itemWmi));
  84 + }
  85 + }
  86 + objIWbemLocator->clear();
  87 + ::CoUninitialize();
  88 + //se for mais de um objeto, retorna array.
  89 + if (!arrayItens.isEmpty())
  90 + wmiReturn = QJsonValue(arrayItens);
  91 + //senão, se o objeto não for vazio (se tiver coletado algo)
  92 + else if (!itemWmi.isEmpty())
  93 + wmiReturn = QJsonValue(itemWmi);
  94 +
  95 + return wmiReturn;
  96 +}
... ...
src/wmi.h
1 1 #ifndef WMI_H
2 2 #define WMI_H
3 3  
  4 +#include <ccacic.h>
  5 +#include <windows.h>
  6 +#include <ActiveQt/ActiveQt>
  7 +
4 8 class wmi
5 9 {
6 10 public:
7 11 wmi();
  12 + static QJsonValue wmiSearch(QString classe, QStringList params);
  13 +private:
8 14 };
9 15  
10 16 #endif // WMI_H
... ...