-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinvestigatorworker.h
151 lines (119 loc) · 6.4 KB
/
investigatorworker.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#ifndef CHECKWORKER_H
#define CHECKWORKER_H
#include <QObject>
#include <QFileInfoList>
#include <QProcess>
#include <QDateTime>
#include <QTextCodec>
#include <QXmlStreamReader>
#include <../FeZarSource/FeZar97.h>
class WorkerStatistic {
public:
int workerId;
quint64 processedFilesNb; // обработано кол-во
quint64 processedFilesSize; // обработано объем
quint64 pwdFilesNb; // кол-во запароленных
quint64 infFilesNb; // кол-во запароленных
quint64 currentSpeed; // скорость
QString avsVersion; // версия АВС
WorkerStatistic(int wId = -1, quint64 cPFNb = 0, quint64 cPFSize = 0, quint64 cPwdFNb = 0,
quint64 cInfFNb = 0, quint64 cSpd = 0, QString aV = "") {
workerId = wId;
processedFilesNb = cPFNb;
processedFilesSize = cPFSize;
pwdFilesNb = cPwdFNb;
infFilesNb = cInfFNb;
currentSpeed = cSpd;
avsVersion = aV;
}
};
// вернуть набор (проверено, объем, скорость, запароленных, ошибок, список(зараженный, подробности))
class InvestigatorWorker: public QObject {
Q_OBJECT
int m_id; // идентификатор
bool m_isInWork{false};
bool m_isInProcess{false};
QString m_inputDir; // директория, из которой забираются файлы
QString m_processDir; // директория для воркеров
QString m_workerProcessDir; // директория, в которой осуществляется проверка
QString m_dangerDir; // директория для зараженных файлов
QString m_cleanDir; // директория для чистых файлов
QString m_reportDir; // директория для отчетов АВС
bool m_saveXmlReports; // флаг сохранения xml отчетов
bool m_useExternalHandler; // флаг использования внешнего обработчика
QString m_externalHandlerPath; // путь к внешнему обработчику
QFileInfoList m_filesInProcess; // список файлов на проверке
QString m_avsExecFileName{"C:/Program Files/Primetech/M-52/AVSFileConsoleScan.exe"}; // путь до исполняемого файла
QProcess *m_avsProcess{nullptr}; // процесс проверки
QString m_avsReport; // отчет АВС
QTextCodec *m_win1251Codec; // кодек для конвертации отчета М52
QDateTime m_lastProcStartTime; // время начала последней проверки
quint64 m_lastProcWorkTimeInMsec; // время обработки последней выборки
// времянки
QStringList m_reportLines;
QString m_baseAVSVersion, m_m52coreVersion, m_drwebCoreVersion,
m_kasperCoreVersion; // версии баз
QString m_avVersion; // все версии
QStringList m_tempSplitList1, m_tempSplitList2;
QString m_tempInfectedFileName, m_tempVirusInfo;
// счетчики
quint64 m_filesToProcessSize; // объем просканированных файлов за последнюю проверку в байтах
quint64 m_speed{0}; // скорость последнего сканирования
quint64 m_pwdFilesNb; // кол-во запароленных файлов за последнюю проверку
QList<QPair<QString, QString>> m_infList; // список зараженных файлов
bool canAcceptWork(int
id); // проверка возможности запуска проверки
void checkProcessDirExists(); // проверка возможности запуска проверки
void flushStatistic(); // сброс статистики
void parseReport(); // парсинг отчета
void createAvsProcess();
// методы для parseReport
void extractAVSVersions();
void collectStatisticAboutLastScan();// сохранение объема проверенных файлов и скорости проверки
// обработка файлов
void processingInfectedFiles();
void processingOtherFiles();
// сохранение отчета АВС об инфицированных файлах
QString getInfectedReportFileName(); // имя отчета
void saveXmlFileReport(QString fileName = "", QString report = "");
/* fileName - имя json файла (совпадает с именем зараженного файла)
* report - строка (<antivirus>: <virus info>)
* avVersion - сводная информация об антивирусе (состав, базы, весрии, даты) */
void createVirusXml(QString xmlFileName, QString infectedFileName, QString report,
QString avVersion);
/* параметры зараженного файла */
QStringList infectedFileInfo(QString infectedFileName, QString report, QString avVersion);
public:
InvestigatorWorker(QObject *parent);
bool isInProcess() {
return m_isInProcess;
}
quint64 speed() {
return m_speed;
}
void startWork();
void stopWork();
void setAvsExecFileName(QString avsExecFileName) {
m_avsExecFileName = avsExecFileName;
}
// передача воркеру внешних параметров
void configure(int id, QStringList dirList, QString m_avsExecFileName, bool useExternalHandler,
QString externalhandlerPath, bool saveXmlReports);
// запуск процесса проверки для воркера с id
void tryCheckFiles(int id, QFileInfoList filesToProcess);
// возвращает статистику по последнему скнаированию
WorkerStatistic getLastStatistics();
// кол-во файлов в директории воркера
qint64 filesInProcessNb() {
if (QDir(m_workerProcessDir).exists()) {
return QDir(m_workerProcessDir).entryInfoList(usingFilters).size();
} else {
m_speed = 0;
return 0;
}
};
signals:
void finish(int id); // сигнал о готовности воркера к работе
void log(QString message, int ctx); // логгирование
};
#endif // CHECKWORKER_H