Skip to content

Commit dd2b40a

Browse files
committed
OnlineChecks: Fixed Jotti upload; Fixed upload dialog exit; Added taskbar upload progress; Added upload error dialog;
1 parent 67b2e1c commit dd2b40a

File tree

9 files changed

+330
-98
lines changed

9 files changed

+330
-98
lines changed

plugins/OnlineChecks/OnlineChecks.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
<ClCompile Include="page1.c" />
8383
<ClCompile Include="page2.c" />
8484
<ClCompile Include="page3.c" />
85+
<ClCompile Include="page4.c" />
8586
<ClCompile Include="upload.c" />
8687
<ClCompile Include="virustotal.c" />
8788
</ItemGroup>

plugins/OnlineChecks/OnlineChecks.vcxproj.filters

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
<ClCompile Include="page3.c">
4040
<Filter>Source Files</Filter>
4141
</ClCompile>
42+
<ClCompile Include="page4.c">
43+
<Filter>Source Files</Filter>
44+
</ClCompile>
4245
</ItemGroup>
4346
<ItemGroup>
4447
<ClInclude Include="onlnchk.h">

plugins/OnlineChecks/onlnchk.h

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,15 @@ typedef struct _PROCESS_EXTENSION
8888
{
8989
LIST_ENTRY ListEntry;
9090

91-
BOOLEAN Flags;
92-
struct
91+
union
9392
{
94-
BOOLEAN Stage1 : 1;
95-
BOOLEAN ResultValid : 1;
96-
BOOLEAN Spare : 6;
93+
BOOLEAN Flags;
94+
struct
95+
{
96+
BOOLEAN Stage1 : 1;
97+
BOOLEAN ResultValid : 1;
98+
BOOLEAN Spare : 6;
99+
};
97100
};
98101

99102
INT64 Retries;
@@ -134,21 +137,27 @@ typedef struct _UPLOAD_CONTEXT
134137
{
135138
BOOLEAN FileExists;
136139
ULONG Service;
140+
137141
ULONG ErrorCode;
142+
PPH_STRING ErrorString;
143+
138144
ULONG TotalFileLength;
139145
HWND DialogHandle;
140146
HICON IconLargeHandle;
141147
HICON IconSmallHandle;
148+
HANDLE UploadThreadHandle;
142149
HINTERNET HttpHandle;
150+
ITaskbarList3* TaskbarListClass;
143151

144152
PVIRUSTOTAL_FILE_HASH_ENTRY Extension;
145153
PH_UPLOAD_SERVICE_STATE UploadServiceState;
146154

147155
PPH_STRING FileName;
148156
PPH_STRING BaseFileName;
149157
PPH_STRING WindowFileName;
150-
PPH_STRING ObjectName;
158+
//PPH_STRING ObjectName;
151159
PPH_STRING LaunchCommand;
160+
PPH_STRING RedirectCommand;
152161

153162
PPH_STRING Detected;
154163
PPH_STRING MaxDetected;
@@ -172,10 +181,6 @@ VOID ShowVirusTotalUploadDialog(
172181
_In_ PUPLOAD_CONTEXT Context
173182
);
174183

175-
VOID ShowCheckForUpdatesDialog(
176-
_In_ PUPLOAD_CONTEXT Context
177-
);
178-
179184
VOID ShowFileFoundDialog(
180185
_In_ PUPLOAD_CONTEXT Context
181186
);
@@ -184,18 +189,9 @@ VOID ShowVirusTotalProgressDialog(
184189
_In_ PUPLOAD_CONTEXT Context
185190
);
186191

187-
typedef struct _VIRUSTOTAL_FILE_RESULT
188-
{
189-
BOOLEAN FileExists;
190-
BOOLEAN EmptyFile;
191-
PPH_STRING DetectionRatio;
192-
PPH_STRING UploadUrl;
193-
PPH_STRING reAnalyseUrl;
194-
PPH_STRING FirstAnalysisDate;
195-
PPH_STRING LastAnalysisDate;
196-
PPH_STRING LastAnalysisUrl;
197-
PPH_STRING LastAnalysisAgo;
198-
} VIRUSTOTAL_FILE_RESULT, *PVIRUSTOTAL_FILE_RESULT;
192+
VOID VirusTotalShowErrorDialog(
193+
_In_ PUPLOAD_CONTEXT Context
194+
);
199195

200196
typedef struct _VIRUSTOTAL_FILE_REPORT_RESULT
201197
{
@@ -219,7 +215,7 @@ PPH_STRING VirusTotalStringToTime(
219215
_In_ PPH_STRING Time
220216
);
221217

222-
PVIRUSTOTAL_FILE_REPORT_RESULT VirusTotalQueryFileReport(
218+
PVIRUSTOTAL_FILE_REPORT_RESULT VirusTotalSendHttpFileReportRequest(
223219
_In_ PPH_STRING FileHash
224220
);
225221

plugins/OnlineChecks/page1.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ HRESULT CALLBACK CheckingForUpdatesCallbackProc(
3939
SendMessage(hwndDlg, TDM_SET_MARQUEE_PROGRESS_BAR, TRUE, 0);
4040
SendMessage(hwndDlg, TDM_SET_PROGRESS_BAR_MARQUEE, TRUE, 1);
4141

42+
// reference the context for the new thread
4243
PhReferenceObject(context);
44+
45+
// create the new thread
4346
PhQueueItemWorkQueue(PhGetGlobalWorkQueue(), UploadCheckThreadStart, context);
4447
}
4548
break;

plugins/OnlineChecks/page2.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ HRESULT CALLBACK ShowAvailableCallbackProc(
4343
{
4444
case TDN_BUTTON_CLICKED:
4545
{
46-
int buttonID = (INT)wParam;
46+
INT buttonID = (INT)wParam;
4747

4848
if (buttonID == IDOK)
4949
{
@@ -53,19 +53,12 @@ HRESULT CALLBACK ShowAvailableCallbackProc(
5353
else if (buttonID == IDRETRY)
5454
{
5555
if (!PhIsNullOrEmptyString(context->reAnalyseUrl))
56-
{
57-
PPH_STRING urlPath = PhFormatString(L"https://www.virustotal.com%s", PhGetString(context->reAnalyseUrl));
58-
59-
PhShellExecute(hwndDlg, PhGetString(urlPath), NULL);
60-
PhDereferenceObject(urlPath);
61-
}
56+
PhShellExecute(hwndDlg, PhGetString(context->reAnalyseUrl), NULL);
6257
}
6358
else if (buttonID == IDYES)
6459
{
6560
if (!PhIsNullOrEmptyString(context->LaunchCommand))
66-
{
6761
PhShellExecute(hwndDlg, PhGetString(context->LaunchCommand), NULL);
68-
}
6962
}
7063
}
7164
break;

plugins/OnlineChecks/page3.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,32 @@ HRESULT CALLBACK ShowProgressCallbackProc(
3939
SendMessage(hwndDlg, TDM_SET_MARQUEE_PROGRESS_BAR, TRUE, 0);
4040
SendMessage(hwndDlg, TDM_SET_PROGRESS_BAR_MARQUEE, TRUE, 1);
4141

42+
// reference the context for the new thread
4243
PhReferenceObject(context);
43-
PhQueueItemWorkQueue(PhGetGlobalWorkQueue(), UploadFileThreadStart, context);
44+
45+
// create the new thread
46+
context->UploadThreadHandle = PhCreateThread(0, UploadFileThreadStart, context);
47+
}
48+
break;
49+
case TDN_BUTTON_CLICKED:
50+
{
51+
if ((INT)wParam == IDCANCEL)
52+
{
53+
if (context->UploadThreadHandle)
54+
{
55+
NtClose(context->UploadThreadHandle);
56+
context->UploadThreadHandle = NULL;
57+
}
58+
}
59+
}
60+
break;
61+
case TDN_DESTROYED:
62+
{
63+
if (context->UploadThreadHandle)
64+
{
65+
NtClose(context->UploadThreadHandle);
66+
context->UploadThreadHandle = NULL;
67+
}
4468
}
4569
break;
4670
}

plugins/OnlineChecks/page4.c

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Process Hacker Plugins -
3+
* Update Checker Plugin
4+
*
5+
* Copyright (C) 2016 dmex
6+
*
7+
* This file is part of Process Hacker.
8+
*
9+
* Process Hacker is free software; you can redistribute it and/or modify
10+
* it under the terms of the GNU General Public License as published by
11+
* the Free Software Foundation, either version 3 of the License, or
12+
* (at your option) any later version.
13+
*
14+
* Process Hacker is distributed in the hope that it will be useful,
15+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
* GNU General Public License for more details.
18+
*
19+
* You should have received a copy of the GNU General Public License
20+
* along with Process Hacker. If not, see <http://www.gnu.org/licenses/>.
21+
*/
22+
23+
#include "onlnchk.h"
24+
25+
HRESULT CALLBACK TaskDialogErrorProc(
26+
_In_ HWND hwndDlg,
27+
_In_ UINT uMsg,
28+
_In_ WPARAM wParam,
29+
_In_ LPARAM lParam,
30+
_In_ LONG_PTR dwRefData
31+
)
32+
{
33+
PUPLOAD_CONTEXT context = (PUPLOAD_CONTEXT)dwRefData;
34+
35+
switch (uMsg)
36+
{
37+
case TDN_NAVIGATED:
38+
{
39+
SendMessage(hwndDlg, TDM_SET_MARQUEE_PROGRESS_BAR, FALSE, 0);
40+
SendMessage(hwndDlg, TDM_SET_PROGRESS_BAR_MARQUEE, FALSE, 1);
41+
}
42+
break;
43+
}
44+
45+
return S_OK;
46+
}
47+
48+
VOID VirusTotalShowErrorDialog(
49+
_In_ PUPLOAD_CONTEXT Context
50+
)
51+
{
52+
TASKDIALOGCONFIG config;
53+
54+
memset(&config, 0, sizeof(TASKDIALOGCONFIG));
55+
config.cbSize = sizeof(TASKDIALOGCONFIG);
56+
config.dwFlags = TDF_USE_HICON_MAIN | TDF_ALLOW_DIALOG_CANCELLATION | TDF_CAN_BE_MINIMIZED | TDF_EXPAND_FOOTER_AREA | TDF_ENABLE_HYPERLINKS | TDF_SHOW_PROGRESS_BAR;
57+
config.dwCommonButtons = TDCBF_CLOSE_BUTTON;
58+
config.hMainIcon = Context->IconLargeHandle;
59+
60+
config.pszWindowTitle = PhaFormatString(L"Uploading %s...", PhGetStringOrEmpty(Context->BaseFileName))->Buffer;
61+
config.pszMainInstruction = PhaFormatString(L"Error uploading %s", PhGetStringOrEmpty(Context->BaseFileName))->Buffer;
62+
config.pszContent = PhGetStringOrEmpty(Context->ErrorString);
63+
64+
config.cxWidth = 200;
65+
config.lpCallbackData = (LONG_PTR)Context;
66+
config.pfCallback = TaskDialogErrorProc;
67+
68+
SendMessage(Context->DialogHandle, TDM_NAVIGATE_PAGE, 0, (LPARAM)&config);
69+
}

0 commit comments

Comments
 (0)