diff --git a/cacic-teste/testcacic.cpp b/cacic-teste/testcacic.cpp index 816b16c..2ab82dd 100644 --- a/cacic-teste/testcacic.cpp +++ b/cacic-teste/testcacic.cpp @@ -228,7 +228,7 @@ void CTestCacic::testColetaSoftware() void CTestCacic::testColetaHardware() { OCacicHardware.iniciaColeta(); - QVERIFY(false); + QVERIFY(!OCacicHardware.toJsonObject().isEmpty()); } void CTestCacic::testConvertDouble() { diff --git a/gercols/gercols.pro b/gercols/gercols.pro index 2cc1e6b..7687582 100644 --- a/gercols/gercols.pro +++ b/gercols/gercols.pro @@ -14,6 +14,7 @@ CONFIG -= app_bundle CONFIG += qt win32 { + QT += axcontainer LIBS += -LE:\LightBase\cacic-agente-project\cacic-agente\src\crypto++\lib -lcryptopp } else { LIBS += -L/usr/lib -lcryptopp diff --git a/install-cacic/install-cacic.pro.user b/install-cacic/install-cacic.pro.user index 2c8c70d..98c9c77 100644 --- a/install-cacic/install-cacic.pro.user +++ b/install-cacic/install-cacic.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/src/cacic_hardware.cpp b/src/cacic_hardware.cpp index 2a5fe38..3612c96 100644 --- a/src/cacic_hardware.cpp +++ b/src/cacic_hardware.cpp @@ -14,13 +14,101 @@ void cacic_hardware::iniciaColeta() #ifdef Q_OS_WIN QJsonObject cacic_hardware::coletaWin() { + QJsonObject hardware; + QStringList params; + QJsonObject wmi; + // Win32_ComputerSystem (Caption, Description, Domain, DNSHostName, Manufacturer, + // Model, Name, PrimaryOwnerName, TotalPhysicalMemory, Workgroup) + params << "Caption" << "Description" << "Domain" << "DNSHostName" << "Manufacturer" << "Model" + << "Name" << "PrimaryOwnerName" << "TotalPhysicalMemory" << "Workgroup"; + wmi = wmiSearch("Win32_ComputerSystem", params); + if (!wmi.isEmpty()) + hardware["ComputerSystem"] = wmiSearch("Win32_ComputerSystem", params); + //Win32_PortableBattery + // (Verifica se é notebook) + params.clear(); + hardware["IsNotebook"] = QJsonValue::fromVariant(!wmiSearch("Win32_PortableBattery", params).isEmpty()); + //Win32_Bios + // (Manufacturer, SMBIOSBIOSVersion, BIOSVersion, Version, SerialNumber, ReleaseDate) + params.clear(); + params << "Manufacturer" << "SMBIOSBIOSVersion" << "BIOSVersion" << "Version" << "SerialNumber" << "ReleaseDate"; + wmi = wmiSearch("Win32_Bios", params); + if (!wmi.isEmpty()) + hardware["Bios"] = wmi; + //Win32_BaseBoard + // (Manufacturer, Model, SerialNumber) + params.clear(); + params << "Manufacturer" << "Model" << "SerialNumber"; + wmi = wmiSearch("Win32_Baseboard", params); + if (!wmi.isEmpty()) + hardware["BaseBoard"] = wmi; + //Win32_SystemEnclosure + // (Manufacturer, ChassisTypes, SerialNumber, SMBIOSAssetTag) + //Win32_FloppyDrive + // (Manufacturer, Caption, Description, Name, MediaType, Size) + //Win32_DiskDrive + // (Manufacturer, Caption, Description, Name, MediaType, Size, SerialNumber, Model, FirmwareRevision) + //Win32_CDROMDrive + // (Manufacturer, Caption, Description, Name, MediaType, Size) + //Win32_FloppyController + // (Manufacturer, Caption, Description, Name) + //Win32_SCSIController + // (Manufacturer, Caption, Description, Name, HardwareVersion) + //Win32_InfraredDevice + // (Manufacturer, Caption, Description, Name) + //Win32_USBController + // (Manufacturer, Caption, Description, Name) + //Win32_PCMCIAController + // (Manufacturer, Caption, Description, Name) + //Win32_VideoController + // (Description, VideoProcessor, AdapterRAM, CurrentHorizontalResolution, CurrentVerticalResolution) + //Win32_DesktopMonitor + // (MonitorManufacturer, Caption, Description, MonitorType) + //Win32_Printer + // (Name, DriverName, PortName, ServerName, ShareName, HorizontalResolution, VerticalResolution, Comment, Shared, Network) + //Win32_PortConnector + // (ExternalReferenceDesignator, PortType, ConnectorType) + //Win32_SerialPort + // (Name, Caption, Description, StatusInfo) + //Win32_Processor + // (MaxClockSpeed, Name, Architecture, NumberOfCores, SocketDesignation, Manufacturer, Name, Architecture, NumberOfCores + // CurrentClockSpeed, MaxClockSpeed, L2CacheSize, AddressWidth, DataWidth, VoltageCaps, CpuStatus, + // ProcessorId || UniqueId, AddressWidth) + //Win32_OperatingSystem + // (Name, Version, CSDVersion, Description, InstallDate, Organization, RegisteredUser, SerialNumber) + //Win32_SystemSlot + // (Name, Description, SlotDesignation, CurrentUsage, Status, Shared) + //Win32_LogicalDisk + // (Caption, DriveType, Filesystem, VolumeName, ProviderName, Filesystem, VolumeName, Size, FreeSpace) + //Win32_PhysicalMemory + // (Caption, Description, BankLabel, DeviceLocator, Capacity, Speed, MemoryTypem, SerialNumber) + //Win32_Keyboard + // (Manufacturer, Caption, Description) + //Win32_PointingDevice + // (Manufacturer, Caption, Description, PointingType, DeviceInterface) + //Win32_PnPSignedDriver + // (Manufacturer, DeviceName, Description, Location, DeviceClass) + qDebug() << hardware; + return hardware; +} + +QJsonObject cacic_hardware::wmiSearch(QString classe, QStringList params) +{ + QJsonObject wmiReturn; + QString paramsString; + if (!params.empty()){ + for(int i = 0; i!=params.size();i++) + paramsString.append(params.at(i) + ((i != params.size() - 1) ? "," : "")); + } QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator"); QAxObject *objWMIService = objIWbemLocator->querySubObject("ConnectServer(QString&,QString&)", QString("."), QString("root\\CIMV2") ); QAxObject* returnList = objWMIService->querySubObject("ExecQuery(QString&)", - QString("SELECT * FROM Win32_ComputerSystem") + QString("SELECT " + ((!paramsString.isEmpty()) ? + paramsString : "*") + + " FROM " + classe) ); QAxObject *enum1 = returnList->querySubObject("_NewEnum"); //ui->textBrowser_4->setHtml(enum1->generateDocumentation()); @@ -36,17 +124,45 @@ QJsonObject cacic_hardware::coletaWin() VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT)); if (enumInterface->Next(1,theItem,NULL) != S_FALSE){ QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal); - if(item){ - qDebug() <<" string is "<dynamicCall("ProcessorId").toString(); - qDebug() <<" string is "<dynamicCall("GetText_(WbemObjectTextFormatEnum)", QVariant(1)).toString(); + //pega o retorno da query + QString instance = item->dynamicCall("GetObjectText_(int)", QVariant(0)).toString(); + QStringList instanceList = instance.split("\n\t"); + //Pra cada linha grava no json os valores com cada tag + foreach(QString value, instanceList){ + qDebug() << value; + QStringList valueList = value.split("="); + if (valueList.size() > 1){ + QString tag = valueList.at(0).trimmed(); + QString aux = valueList.at(1).trimmed(); + aux.remove("\""); + aux.remove(";"); + aux.remove("\n"); + //verifica se é lista + qDebug() << aux; + if(aux.contains("{") && aux.contains("}")){ + QStringList auxList = aux.split(","); + QJsonArray jList; + foreach(QString valueList, auxList){ + if (valueList.contains("{")) + valueList.remove("{"); + else if (valueList.contains("}")) + valueList.remove("}"); + jList.append(valueList.trimmed()); + } + wmiReturn[tag] = jList; + } else { + //O último valor sempre volta com "}" no final. + if (aux.contains("}")) + aux.remove("}"); + wmiReturn[tag] = QJsonValue::fromVariant(aux.trimmed()); + } + } + } } - // item-> - //QString val = - qDebug()<<"item name is "<< item->property("objectName").toString(); } } - return QJsonObject(); + return wmiReturn; } #elif defined(Q_OS_LINUX) QJsonObject cacic_hardware::coletaLinux() diff --git a/src/cacic_hardware.h b/src/cacic_hardware.h index 531f2e3..2bb628c 100644 --- a/src/cacic_hardware.h +++ b/src/cacic_hardware.h @@ -22,12 +22,9 @@ public: private: #ifdef Q_OS_WIN QJsonObject coletaWin(); + QJsonObject wmiSearch(QString classe, QStringList params); #elif defined(Q_OS_LINUX) -/* Thiago aqui: - * Ao menos nos elif's tem que deixar com o "defined()". - * Por isso antes eu preferia deixar todas essas verificações com ele, mesmo tendo o ifdef. - */ QJsonObject coletaLinux(); void coletaLinuxMem(QJsonObject &hardware, const QJsonObject &component); void coletaLinuxCpu(QJsonObject &hardware, const QJsonObject &component); diff --git a/src/vqtconvert.cpp b/src/vqtconvert.cpp index d10f2dc..dc20305 100644 --- a/src/vqtconvert.cpp +++ b/src/vqtconvert.cpp @@ -1,6 +1,5 @@ -#if defined(Q_OS_WIN) - #include "vqtconvert.h" +#if defined(Q_OS_WIN) #include #include "windows.h" diff --git a/src/vqtconvert.h b/src/vqtconvert.h index 6e31bfb..183cbe1 100644 --- a/src/vqtconvert.h +++ b/src/vqtconvert.h @@ -6,7 +6,7 @@ Created with: QT 4.5 and QT Creator 1.2 Tested on: Windows XP SP3 Bryan Cairns - August 2009 */ - +#include #if defined(Q_OS_WIN) #ifndef VQTCONVERT_H diff --git a/src/vregistry.cpp b/src/vregistry.cpp index b32cc2e..6e69b8d 100644 --- a/src/vregistry.cpp +++ b/src/vregistry.cpp @@ -6,10 +6,8 @@ Created with: QT 4.5 and QT Creator 1.2 Tested on: Windows XP SP3 Bryan Cairns */ - -#if defined(Q_OS_WIN) - #include "vregistry.h" +#if defined(Q_OS_WIN) #include "windows.h" #include "VQTConvert.h" #include diff --git a/src/vregistry.h b/src/vregistry.h index 7aedc1f..3423788 100644 --- a/src/vregistry.h +++ b/src/vregistry.h @@ -6,7 +6,7 @@ Created with: QT 4.5 and QT Creator 1.2 Tested on: Windows XP SP3 Bryan Cairns */ - +#include #if defined(Q_OS_WIN) #ifndef VREGISTRY_H #define VREGISTRY_H -- libgit2 0.21.2