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,6 +29,7 @@ SOURCES += \
29 ../src/vqtconvert.cpp \ 29 ../src/vqtconvert.cpp \
30 ../src/vregistry.cpp \ 30 ../src/vregistry.cpp \
31 ../src/ccoleta.cpp \ 31 ../src/ccoleta.cpp \
  32 + ../src/wmi.cpp \
32 # ../src/qtservice/src/qtservice.cpp \ 33 # ../src/qtservice/src/qtservice.cpp \
33 # ../src/qtservice/src/qtservice_unix.cpp \ 34 # ../src/qtservice/src/qtservice_unix.cpp \
34 # ../src/qtservice/src/qtservice_win.cpp \ 35 # ../src/qtservice/src/qtservice_win.cpp \
@@ -48,6 +49,7 @@ HEADERS += \ @@ -48,6 +49,7 @@ HEADERS += \
48 ../src/vqtconvert.h \ 49 ../src/vqtconvert.h \
49 ../src/vregistry.h \ 50 ../src/vregistry.h \
50 ../src/ccoleta.h \ 51 ../src/ccoleta.h \
  52 + ../src/wmi.h \
51 # ../src/qtservice/src/qtservice.h \ 53 # ../src/qtservice/src/qtservice.h \
52 # ../src/qtservice/src/qtservice_p.h \ 54 # ../src/qtservice/src/qtservice_p.h \
53 # ../src/qtservice/src/qtunixserversocket.h \ 55 # ../src/qtservice/src/qtunixserversocket.h \
cacicD/cacicD.pro
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 6
7 QT += core 7 QT += core
8 QT -= gui 8 QT -= gui
9 - 9 +QT += network
10 TARGET = cacicD 10 TARGET = cacicD
11 CONFIG += console 11 CONFIG += console
12 CONFIG -= app_bundle 12 CONFIG -= app_bundle
cacicD/cacicd.cpp
@@ -4,7 +4,7 @@ cacicD::cacicD(int argc, char **argv) : QtService<QCoreApplication>(argc, argv, @@ -4,7 +4,7 @@ cacicD::cacicD(int argc, char **argv) : QtService<QCoreApplication>(argc, argv,
4 { 4 {
5 try{ 5 try{
6 setServiceDescription("Cacic Daemon"); 6 setServiceDescription("Cacic Daemon");
7 - setServiceFlags(QtServiceBase::CannotBeStopped); 7 + setServiceFlags(QtService::Default);
8 } catch (...){ 8 } catch (...){
9 qCritical() << "Error desconhecido no construtor."; 9 qCritical() << "Error desconhecido no construtor.";
10 } 10 }
gercols/gercols.pro
@@ -34,6 +34,7 @@ SOURCES += \ @@ -34,6 +34,7 @@ SOURCES += \
34 ./gercols.cpp \ 34 ./gercols.cpp \
35 ../src/vregistry.cpp \ 35 ../src/vregistry.cpp \
36 ../src/vqtconvert.cpp \ 36 ../src/vqtconvert.cpp \
  37 + ../src/wmi.cpp \
37 38
38 HEADERS += \ 39 HEADERS += \
39 ../src/ccacic.h \ 40 ../src/ccacic.h \
@@ -46,6 +47,7 @@ HEADERS += \ @@ -46,6 +47,7 @@ HEADERS += \
46 ./gercols.h \ 47 ./gercols.h \
47 ../src/vregistry.h \ 48 ../src/vregistry.h \
48 ../src/vqtconvert.h \ 49 ../src/vqtconvert.h \
  50 + ../src/wmi.h \
49 51
50 INCLUDEPATH += ../src \ 52 INCLUDEPATH += ../src \
51 ../src/crypto++/include/ 53 ../src/crypto++/include/
gercols/main.cpp
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 int main(int argc, char *argv[]) 4 int main(int argc, char *argv[])
5 { 5 {
6 QCoreApplication a(argc, argv); 6 QCoreApplication a(argc, argv);
  7 + a.setApplicationName("Gercols");
7 8
8 //crio o objeto que será responsável pela execução 9 //crio o objeto que será responsável pela execução
9 Gercols *oGercols = new Gercols(&a); 10 Gercols *oGercols = new Gercols(&a);
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-29T15:37:15. --> 3 +<!-- Written by QtCreator 3.1.2, 2014-09-01T17:24:48. -->
4 <qtcreator> 4 <qtcreator>
5 <data> 5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable> 6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
src/cacic_computer.cpp
@@ -14,11 +14,11 @@ CACIC_Computer::CACIC_Computer() @@ -14,11 +14,11 @@ CACIC_Computer::CACIC_Computer()
14 * 14 *
15 */ 15 */
16 QList<QVariantMap> CACIC_Computer::networkInterfacesRunning(){ 16 QList<QVariantMap> CACIC_Computer::networkInterfacesRunning(){
17 - QNetworkInterface interface; 17 + QNetworkInterface netInterface;
18 QVariantMap mapInterface; 18 QVariantMap mapInterface;
19 QList<QVariantMap> listaMap; 19 QList<QVariantMap> listaMap;
20 20
21 - foreach (QNetworkInterface in, interface.allInterfaces()) { 21 + foreach (QNetworkInterface in, netInterface.allInterfaces()) {
22 if (!(bool)(in.flags() & QNetworkInterface::IsLoopBack) && 22 if (!(bool)(in.flags() & QNetworkInterface::IsLoopBack) &&
23 !(bool)(in.flags() & QNetworkInterface::IsPointToPoint) && 23 !(bool)(in.flags() & QNetworkInterface::IsPointToPoint) &&
24 (bool)(in.flags() & QNetworkInterface::IsRunning)){ 24 (bool)(in.flags() & QNetworkInterface::IsRunning)){
src/cacic_hardware.cpp
@@ -16,133 +16,137 @@ QJsonObject cacic_hardware::coletaWin() @@ -16,133 +16,137 @@ QJsonObject cacic_hardware::coletaWin()
16 { 16 {
17 QJsonObject hardware; 17 QJsonObject hardware;
18 QStringList params; 18 QStringList params;
19 - QJsonValue wmi; 19 + QJsonValue wmiResult;
20 // Win32_ComputerSystem (Caption, Description, Domain, DNSHostName, Manufacturer, 20 // Win32_ComputerSystem (Caption, Description, Domain, DNSHostName, Manufacturer,
21 // Model, Name, PrimaryOwnerName, TotalPhysicalMemory, Workgroup) 21 // Model, Name, PrimaryOwnerName, TotalPhysicalMemory, Workgroup)
22 params << "Caption" << "Description" << "Domain" << "DNSHostName" << "Manufacturer" << "Model" 22 params << "Caption" << "Description" << "Domain" << "DNSHostName" << "Manufacturer" << "Model"
23 << "Name" << "PrimaryOwnerName" << "TotalPhysicalMemory" << "Workgroup"; 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 //Win32_PortableBattery 27 //Win32_PortableBattery
28 // (Verifica se é notebook) 28 // (Verifica se é notebook)
29 params.clear(); 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 //Win32_Bios 35 //Win32_Bios
32 // (Manufacturer, SMBIOSBIOSVersion, BIOSVersion, Version, SerialNumber, ReleaseDate) 36 // (Manufacturer, SMBIOSBIOSVersion, BIOSVersion, Version, SerialNumber, ReleaseDate)
33 params.clear(); 37 params.clear();
34 params << "Manufacturer" << "SMBIOSBIOSVersion" << "BIOSVersion" << "Version" << "SerialNumber" << "ReleaseDate"; 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 //Win32_BaseBoard 42 //Win32_BaseBoard
39 // (Manufacturer, Model, SerialNumber) 43 // (Manufacturer, Model, SerialNumber)
40 params.clear(); 44 params.clear();
41 params << "Manufacturer" << "Model" << "SerialNumber"; 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 //Win32_SystemEnclosure 49 //Win32_SystemEnclosure
46 // (Manufacturer, ChassisTypes, SerialNumber, SMBIOSAssetTag) 50 // (Manufacturer, ChassisTypes, SerialNumber, SMBIOSAssetTag)
47 params.clear(); 51 params.clear();
48 params << "Manufacturer" << "ChassisTypes" << "SerialNumber" << "SMBIOSAssetTag"; 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 //Win32_FloppyDrive 56 //Win32_FloppyDrive
53 // (Manufacturer, Caption, Description, Name, MediaType, Size) 57 // (Manufacturer, Caption, Description, Name, MediaType, Size)
54 params.clear(); 58 params.clear();
55 params << "Manufacturer" << "Caption" << "Description" << "Name"; 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 //Win32_DiskDrive 63 //Win32_DiskDrive
60 // (Manufacturer, Caption, Description, Name, MediaType, Size, SerialNumber, Model, FirmwareRevision) 64 // (Manufacturer, Caption, Description, Name, MediaType, Size, SerialNumber, Model, FirmwareRevision)
61 params.clear(); 65 params.clear();
62 params << "Manufacturer" << "Caption" << "Description" << "Name" << "MediaType" << "Size" << "SerialNumber" 66 params << "Manufacturer" << "Caption" << "Description" << "Name" << "MediaType" << "Size" << "SerialNumber"
63 << "Model" << "FirmwareRevision"; 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 //Win32_CDROMDrive 71 //Win32_CDROMDrive
68 // (Manufacturer, Caption, Description, Name, MediaType, Size) 72 // (Manufacturer, Caption, Description, Name, MediaType, Size)
69 params.clear(); 73 params.clear();
70 params << "Manufacturer" << "Caption" << "Description" << "MediaType" << "Name" << "Size"; 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 //Win32_FloppyController 78 //Win32_FloppyController
75 // (Manufacturer, Caption, Description, Name) 79 // (Manufacturer, Caption, Description, Name)
76 params.clear(); 80 params.clear();
77 params << "Manufacturer" << "Caption" << "Description" << "Name"; 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 //Win32_SCSIController 85 //Win32_SCSIController
82 // (Manufacturer, Caption, Description, Name, HardwareVersion) 86 // (Manufacturer, Caption, Description, Name, HardwareVersion)
83 params.clear(); 87 params.clear();
84 params << "Manufacturer" << "Caption" << "Description" << "Name" << "HardwareVersion"; 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 //Win32_InfraredDevice 92 //Win32_InfraredDevice
89 // (Manufacturer, Caption, Description, Name) 93 // (Manufacturer, Caption, Description, Name)
90 params.clear(); 94 params.clear();
91 params << "Manufacturer" << "Caption" << "Description" << "Name"; 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 //Win32_USBController 99 //Win32_USBController
96 // (Manufacturer, Caption, Description, Name) 100 // (Manufacturer, Caption, Description, Name)
97 params.clear(); 101 params.clear();
98 params << "Manufacturer" << "Caption" << "Description" << "Name"; 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 //Win32_PCMCIAController 106 //Win32_PCMCIAController
103 // (Manufacturer, Caption, Description, Name) 107 // (Manufacturer, Caption, Description, Name)
104 params.clear(); 108 params.clear();
105 params << "Manufacturer" << "Caption" << "Description" << "Name"; 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 //Win32_VideoController 113 //Win32_VideoController
110 // (Description, VideoProcessor, AdapterRAM, CurrentHorizontalResolution, CurrentVerticalResolution, Caption, Name) 114 // (Description, VideoProcessor, AdapterRAM, CurrentHorizontalResolution, CurrentVerticalResolution, Caption, Name)
111 params.clear(); 115 params.clear();
112 params << "VideoProcessor" << "AdapterRAM" << "Description" << "Name" << "CurrentHorizontalResolution" 116 params << "VideoProcessor" << "AdapterRAM" << "Description" << "Name" << "CurrentHorizontalResolution"
113 << "CurrentVerticalResolution" << "Caption" << "AcceleratorCapabilities"; 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 //Win32_DesktopMonitor 121 //Win32_DesktopMonitor
118 // (MonitorManufacturer, Caption, Description, MonitorType, Name) 122 // (MonitorManufacturer, Caption, Description, MonitorType, Name)
119 params.clear(); 123 params.clear();
120 params << "MonitorManufacturer" << "Caption" << "Description" << "MonitorType" << "Name"; 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 //Win32_Printer 128 //Win32_Printer
125 // (Name, DriverName, PortName, ServerName, ShareName, HorizontalResolution, VerticalResolution, Comment, Shared, Network) 129 // (Name, DriverName, PortName, ServerName, ShareName, HorizontalResolution, VerticalResolution, Comment, Shared, Network)
126 params.clear(); 130 params.clear();
127 params << "Name" << "DriverName" << "PortName" << "ServerName" << "ShareName" << "HorizontalResolution" 131 params << "Name" << "DriverName" << "PortName" << "ServerName" << "ShareName" << "HorizontalResolution"
128 << "VerticalResolution" << "Comment" << "Shared" << "Network"; 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 //Win32_PortConnector 136 //Win32_PortConnector
133 // (ExternalReferenceDesignator, PortType (verificar), ConnectorType (verificar), Manufacturer, Caption, Name) 137 // (ExternalReferenceDesignator, PortType (verificar), ConnectorType (verificar), Manufacturer, Caption, Name)
134 params.clear(); 138 params.clear();
135 params << "ExternalReferenceDesignator" << "PortType" << "ConnectorType" << "Name" << "Caption" << "Manufacturer"; 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 //Win32_SerialPort 143 //Win32_SerialPort
140 // (Name, Caption, Description, StatusInfo) 144 // (Name, Caption, Description, StatusInfo)
141 params.clear(); 145 params.clear();
142 params << "Name" << "Caption" << "Description" << "StatusInfo"; 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 //Win32_Processor 150 //Win32_Processor
147 // (MaxClockSpeed, Name, Architecture, NumberOfCores, SocketDesignation, Manufacturer, Architecture, NumberOfCores 151 // (MaxClockSpeed, Name, Architecture, NumberOfCores, SocketDesignation, Manufacturer, Architecture, NumberOfCores
148 // CurrentClockSpeed, MaxClockSpeed, L2CacheSize, AddressWidth, DataWidth, VoltageCaps, CpuStatus, 152 // CurrentClockSpeed, MaxClockSpeed, L2CacheSize, AddressWidth, DataWidth, VoltageCaps, CpuStatus,
@@ -151,154 +155,64 @@ QJsonObject cacic_hardware::coletaWin() @@ -151,154 +155,64 @@ QJsonObject cacic_hardware::coletaWin()
151 params << "MaxClockSpeed" << "Name" << "Architecture" << "NumberOfCores" << "SocketDesignation" << "Manufacturer" 155 params << "MaxClockSpeed" << "Name" << "Architecture" << "NumberOfCores" << "SocketDesignation" << "Manufacturer"
152 << "Architecture" << "NumberOfCores" << "CurrentClockSpeed" << "MaxClockSpeed" << "L2CacheSize" << "AddressWidth" 156 << "Architecture" << "NumberOfCores" << "CurrentClockSpeed" << "MaxClockSpeed" << "L2CacheSize" << "AddressWidth"
153 << "DataWidth" << "VoltageCaps" << "CpuStatus" << "ProcessorId" << "UniqueId" << "AddressWidth"; 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 //Win32_OperatingSystem 161 //Win32_OperatingSystem
158 // (Name, Version, CSDVersion, Description, InstallDate, Organization, RegisteredUser, SerialNumber) 162 // (Name, Version, CSDVersion, Description, InstallDate, Organization, RegisteredUser, SerialNumber)
159 params.clear(); 163 params.clear();
160 params << "Name" << "Version" << "CSDVersion" << "Description" << "InstallDate" << "Organization" << "RegisteredUser" 164 params << "Name" << "Version" << "CSDVersion" << "Description" << "InstallDate" << "Organization" << "RegisteredUser"
161 << "SerialNumber"; 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 //Win32_SystemSlot 169 //Win32_SystemSlot
166 // (Name, Description, SlotDesignation, CurrentUsage, Status, Shared) 170 // (Name, Description, SlotDesignation, CurrentUsage, Status, Shared)
167 params.clear(); 171 params.clear();
168 params << "Name" << "Description" << "SlotDesignation" << "CurrentUsage" << "Status" << "Shared"; 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 //Win32_LogicalDisk 176 //Win32_LogicalDisk
173 // (Caption, DriveType, Filesystem, VolumeName, ProviderName, Filesystem, VolumeName, Size, FreeSpace) 177 // (Caption, DriveType, Filesystem, VolumeName, ProviderName, Filesystem, VolumeName, Size, FreeSpace)
174 params.clear(); 178 params.clear();
175 params << "Caption" << "DriveType" << "Filesystem" << "VolumeName" << "ProviderName" << "Filesystem" << "VolumeName" 179 params << "Caption" << "DriveType" << "Filesystem" << "VolumeName" << "ProviderName" << "Filesystem" << "VolumeName"
176 << "Size" << "FreeSpace"; 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 //Win32_PhysicalMemory 184 //Win32_PhysicalMemory
181 // (Caption, Description, BankLabel, DeviceLocator, Capacity, Speed, MemoryType, SerialNumber) 185 // (Caption, Description, BankLabel, DeviceLocator, Capacity, Speed, MemoryType, SerialNumber)
182 params.clear(); 186 params.clear();
183 params << "Caption" << "Description" << "BankLabel" << "DeviceLocator" << "Capacity" << "Speed" << "MemoryType"; 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 //Win32_Keyboard 191 //Win32_Keyboard
188 // (Caption, Description, Name) 192 // (Caption, Description, Name)
189 params.clear(); 193 params.clear();
190 params << "Caption" << "Description" << "Name" << "Layout"; 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 //Win32_PointingDevice 198 //Win32_PointingDevice
195 // (Manufacturer, Caption, Description, PointingType, DeviceInterface) 199 // (Manufacturer, Caption, Description, PointingType, DeviceInterface)
196 params.clear(); 200 params.clear();
197 params << "Manufacturer" << "Caption" << "Description" << "PointingType" << "DeviceInterface"; 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 //Win32_PnPSignedDriver 205 //Win32_PnPSignedDriver
202 // (Manufacturer, DeviceName, Description, Location, DeviceClass) 206 // (Manufacturer, DeviceName, Description, Location, DeviceClass)
203 params.clear(); 207 params.clear();
204 params << "Manufacturer" << "DeviceName" << "Description" << "Location" << "DeviceClass"; 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 // qDebug() << hardware; 212 // qDebug() << hardware;
209 return hardware; 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 #elif defined(Q_OS_LINUX) 216 #elif defined(Q_OS_LINUX)
303 QJsonObject cacic_hardware::coletaLinux() 217 QJsonObject cacic_hardware::coletaLinux()
304 { 218 {
src/cacic_hardware.h
@@ -8,8 +8,7 @@ @@ -8,8 +8,7 @@
8 #include <console.h> 8 #include <console.h>
9 #include <operatingsystem.h> 9 #include <operatingsystem.h>
10 #ifdef Q_OS_WIN 10 #ifdef Q_OS_WIN
11 - #include <windows.h>  
12 - #include <ActiveQt/ActiveQt> 11 + #include <wmi.h>
13 #endif 12 #endif
14 13
15 class cacic_hardware 14 class cacic_hardware
@@ -22,7 +21,6 @@ public: @@ -22,7 +21,6 @@ public:
22 private: 21 private:
23 #ifdef Q_OS_WIN 22 #ifdef Q_OS_WIN
24 QJsonObject coletaWin(); 23 QJsonObject coletaWin();
25 - QJsonValue wmiSearch(QString classe, QStringList params);  
26 24
27 #elif defined(Q_OS_LINUX) 25 #elif defined(Q_OS_LINUX)
28 QJsonObject coletaLinux(); 26 QJsonObject coletaLinux();
src/cacic_software.h
@@ -4,7 +4,6 @@ @@ -4,7 +4,6 @@
4 #include <ccacic.h> 4 #include <ccacic.h>
5 #include <console.h> 5 #include <console.h>
6 #include <operatingsystem.h> 6 #include <operatingsystem.h>
7 -  
8 #ifdef Q_OS_WIN 7 #ifdef Q_OS_WIN
9 #include <vqtconvert.h> 8 #include <vqtconvert.h>
10 #include <vregistry.h> 9 #include <vregistry.h>
src/operatingsystem.cpp
@@ -45,16 +45,15 @@ int OperatingSystem::coletaIdOs(){ @@ -45,16 +45,15 @@ int OperatingSystem::coletaIdOs(){
45 QString OperatingSystem::coletaNomeOs() 45 QString OperatingSystem::coletaNomeOs()
46 { 46 {
47 #if defined(Q_OS_WIN) 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 #elif defined(Q_OS_LINUX) 57 #elif defined(Q_OS_LINUX)
59 ConsoleObject console; 58 ConsoleObject console;
60 QStringList catOutput = console("cat /etc/*release").split("\n"); 59 QStringList catOutput = console("cat /etc/*release").split("\n");
src/operatingsystem.h
@@ -5,9 +5,11 @@ @@ -5,9 +5,11 @@
5 #include <QString> 5 #include <QString>
6 #include <QStringList> 6 #include <QStringList>
7 #include <QSysInfo> 7 #include <QSysInfo>
8 -  
9 #include "ccacic.h" 8 #include "ccacic.h"
10 #include "console.h" 9 #include "console.h"
  10 +#ifdef Q_OS_WIN
  11 + #include "wmi.h"
  12 +#endif
11 13
12 class OperatingSystem 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 TEMPLATE += fakelib 2 TEMPLATE += fakelib
3 QTSERVICE_LIBNAME = QtSolutions_Service-head 3 QTSERVICE_LIBNAME = QtSolutions_Service-head
4 CONFIG(debug, debug|release) { 4 CONFIG(debug, debug|release) {
@@ -3,3 +3,94 @@ @@ -3,3 +3,94 @@
3 wmi::wmi() 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 +}
1 #ifndef WMI_H 1 #ifndef WMI_H
2 #define WMI_H 2 #define WMI_H
3 3
  4 +#include <ccacic.h>
  5 +#include <windows.h>
  6 +#include <ActiveQt/ActiveQt>
  7 +
4 class wmi 8 class wmi
5 { 9 {
6 public: 10 public:
7 wmi(); 11 wmi();
  12 + static QJsonValue wmiSearch(QString classe, QStringList params);
  13 +private:
8 }; 14 };
9 15
10 #endif // WMI_H 16 #endif // WMI_H