From 9429b1acc89e70686271ff565479d02129e63b53 Mon Sep 17 00:00:00 2001
From: EndrII <endriimail@gmail.com>
Date: Mon, 23 Dec 2019 21:55:15 +0300
Subject: [PATCH] added winApi pool

---
 Deploy/configparser.cpp        | 26 +++++++++++++-------------
 Deploy/dependenciesscanner.cpp |  8 ++++++++
 Deploy/libinfo.cpp             |  4 ++++
 Deploy/libinfo.h               |  1 +
 Deploy/pe.cpp                  |  8 ++++++++
 Deploy/pe.h                    | 10 ++++++++++
 6 files changed, 44 insertions(+), 13 deletions(-)

diff --git a/Deploy/configparser.cpp b/Deploy/configparser.cpp
index 5432f3c..f5cf750 100644
--- a/Deploy/configparser.cpp
+++ b/Deploy/configparser.cpp
@@ -501,19 +501,19 @@ void ConfigParser::initIgnoreList()
     // win and core libs :  see https://en.wikipedia.org/wiki/Microsoft_Windows_library_files
     _config.ignoreList.addRule(addRuleWin("Hal.DLL"));
     _config.ignoreList.addRule(addRuleWin("NTDLL.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("KERNEL32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("GDI32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("USER32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("COMCTL32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("COMDLG32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("WS2_32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("ADVAPI32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("NETAPI32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("OLE32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("SHSCRAP.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("WINMM.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("IMM32.DLL"));
-//    _config.ignoreList.addRule(addRuleWin("KernelBase.DLL"));
+    _config.ignoreList.addRule(addRuleWin("KERNEL32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("GDI32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("USER32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("COMCTL32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("COMDLG32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("WS2_32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("ADVAPI32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("NETAPI32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("OLE32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("SHSCRAP.DLL"));
+    _config.ignoreList.addRule(addRuleWin("WINMM.DLL"));
+    _config.ignoreList.addRule(addRuleWin("IMM32.DLL"));
+    _config.ignoreList.addRule(addRuleWin("KernelBase.DLL"));
 
 }
 
diff --git a/Deploy/dependenciesscanner.cpp b/Deploy/dependenciesscanner.cpp
index 5b6d46e..d5d06d2 100644
--- a/Deploy/dependenciesscanner.cpp
+++ b/Deploy/dependenciesscanner.cpp
@@ -139,6 +139,8 @@ void DependenciesScanner::recursiveDep(LibInfo &lib, QSet<LibInfo> &res) {
 
 void DependenciesScanner::setEnvironment(const QStringList &env) {
     QDir dir;
+
+    QSet<QString> winAPI;
     for (auto i : env) {
 
         dir.setPath(i);
@@ -151,11 +153,17 @@ void DependenciesScanner::setEnvironment(const QStringList &env) {
                                       QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden);
 
         for (auto i : list) {
+            if (i.fileName().contains(APU_MS_WIN , Qt::CaseInsensitive)) {
+                winAPI.insert(i.fileName().toUpper());
+            }
+
             _EnvLibs.insertMulti(i.fileName().toUpper(), i.absoluteFilePath());
         }
 
     }
 
+    _peScaner.setWinApiPlugins(winAPI);
+
 }
 
 QSet<LibInfo> DependenciesScanner::scan(const QString &path) {
diff --git a/Deploy/libinfo.cpp b/Deploy/libinfo.cpp
index 430941c..8add465 100644
--- a/Deploy/libinfo.cpp
+++ b/Deploy/libinfo.cpp
@@ -60,6 +60,10 @@ void LibInfo::addDependncies(const QString &value) {
     dependncies.insert(value);
 }
 
+void LibInfo::addDependncies(const QSet<QString> &value) {
+    dependncies += value;
+}
+
 void LibInfo::removeDependncies(const QString &value) {
     dependncies.remove(value);
 }
diff --git a/Deploy/libinfo.h b/Deploy/libinfo.h
index 6ce2aa5..12046cd 100644
--- a/Deploy/libinfo.h
+++ b/Deploy/libinfo.h
@@ -46,6 +46,7 @@ public:
     QSet<QString> getDependncies() const;
     void setDependncies(const QSet<QString> &value);
     void addDependncies(const QString &value);
+    void addDependncies(const QSet<QString> &value);
     void removeDependncies(const QString &value);
 
     LibPriority getPriority() const;
diff --git a/Deploy/pe.cpp b/Deploy/pe.cpp
index a17d796..95c4ade 100644
--- a/Deploy/pe.cpp
+++ b/Deploy/pe.cpp
@@ -65,6 +65,10 @@ bool PE::getDep(peparse::parsed_pe_internal * internal, LibInfo &res) const {
         }
     }
 
+    if (res.getName().contains(APU_MS_WIN, Qt::CaseInsensitive)) {
+        res.addDependncies(_apimswin);
+    }
+
     return res.getDependncies().size() || !imports.size();
 }
 
@@ -72,6 +76,10 @@ PE::PE(): IGetLibInfo () {
 
 }
 
+void PE::setWinApiPlugins(const QSet<QString> &keys) {
+    _apimswin = keys;
+}
+
 bool PE::getLibInfo(const QString &lib, LibInfo &info) const {
     auto parsedPeLib = peparse::ParsePEFromFile(lib.toLatin1());
 
diff --git a/Deploy/pe.h b/Deploy/pe.h
index f38dd89..0896e68 100644
--- a/Deploy/pe.h
+++ b/Deploy/pe.h
@@ -13,6 +13,8 @@
 #include <QVector>
 #include "igetlibinfo.h"
 
+#define APU_MS_WIN "api-ms-win"
+
 namespace peparse {
 struct parsed_pe_internal;
 }
@@ -22,6 +24,8 @@ private:
 
     bool getDep(peparse::parsed_pe_internal *, LibInfo &res) const;
 
+    QSet<QString> _apimswin;
+
 public:
 
     enum class RunType: unsigned short {
@@ -32,6 +36,12 @@ public:
     };
     PE();
 
+    /**
+     * @brief setWinApiPlugins
+     * @param keys set values of api-ms-win libs
+     */
+    void setWinApiPlugins(const QSet<QString>& keys);
+
     bool getLibInfo(const QString& lib, LibInfo& info) const override;
 
     ~PE() override;