OnlineChecks: Moved menuitem (Misc > Online Analysis), added VirusTotal/Comodo/Jotti upload progress

git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5004 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
dmex
2012-05-02 23:33:17 +00:00
parent 70a3da98ef
commit 2f118cd33e
6 changed files with 838 additions and 593 deletions
+50 -40
View File
@@ -13,39 +13,11 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (Australia) resources
// English resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENA)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
@@ -91,13 +63,15 @@ END
// Dialog
//
IDD_PROGRESS DIALOGEX 0, 0, 189, 41
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Uploading"
IDD_PROGRESSDIALOG DIALOGEX 0, 0, 260, 100
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Online Analysis"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
PUSHBUTTON "Cancel",IDCANCEL,132,20,50,14
LTEXT "Message",IDC_MESSAGE,7,7,175,8
PUSHBUTTON "Cancel",IDCANCEL,203,79,50,14
LTEXT "Select a file to upload",IDC_MESSAGE,6,5,246,12
CONTROL "",IDC_UPLOADPROGRESS,"msctls_progress32",PBS_SMOOTH,7,60,246,11
CONTROL "Status",IDC_STATUS,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,8,48,245,8
END
@@ -107,18 +81,54 @@ END
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
GUIDELINES DESIGNINFO
BEGIN
IDD_PROGRESS, DIALOG
IDD_PROGRESSDIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 182
RIGHTMARGIN, 253
TOPMARGIN, 7
BOTTOMMARGIN, 34
BOTTOMMARGIN, 93
END
END
#endif // APSTUDIO_INVOKED
#endif // English resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (Australia) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENA)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
#pragma code_page(1252)
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // English (Australia) resources
/////////////////////////////////////////////////////////////////////////////
@@ -22,6 +22,7 @@
<ProjectGuid>{79D24223-1122-40A9-BC8F-46A2089FE089}</ProjectGuid>
<RootNamespace>OnlineChecks</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>OnlineChecks</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+102 -71
View File
@@ -3,6 +3,7 @@
* main program
*
* Copyright (C) 2010-2011 wj32
* Copyright (C) 2012 dmex
*
* This file is part of Process Hacker.
*
@@ -24,37 +25,63 @@
#include "onlnchk.h"
#include "resource.h"
VOID NTAPI LoadCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
);
PPH_PLUGIN PluginInstance;
static PH_CALLBACK_REGISTRATION PluginLoadCallbackRegistration;
static PH_CALLBACK_REGISTRATION PluginShowOptionsCallbackRegistration;
static PH_CALLBACK_REGISTRATION PluginMenuItemCallbackRegistration;
static PH_CALLBACK_REGISTRATION ProcessMenuInitializingCallbackRegistration;
static PH_CALLBACK_REGISTRATION ModuleMenuInitializingCallbackRegistration;
static PH_CALLBACK_REGISTRATION MainWindowShowingCallbackRegistration;
VOID NTAPI ShowOptionsCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
);
VOID NTAPI MainWindowShowingCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
);
VOID NTAPI MenuItemCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
);
VOID NTAPI ProcessMenuInitializingCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
);
VOID NTAPI ModuleMenuInitializingCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
);
PPH_PLUGIN PluginInstance;
PH_CALLBACK_REGISTRATION PluginLoadCallbackRegistration;
PH_CALLBACK_REGISTRATION PluginShowOptionsCallbackRegistration;
PH_CALLBACK_REGISTRATION PluginMenuItemCallbackRegistration;
PH_CALLBACK_REGISTRATION ProcessMenuInitializingCallbackRegistration;
PH_CALLBACK_REGISTRATION ModuleMenuInitializingCallbackRegistration;
PPH_EMENU_ITEM CreateSendToMenu(
__in PPH_EMENU_ITEM Parent,
__in PWSTR InsertAfter,
__in PPH_STRING FileName
)
{
PPH_EMENU_ITEM sendToMenu;
PPH_EMENU_ITEM menuItem;
ULONG insertIndex;
// Create the Send To menu.
sendToMenu = PhPluginCreateEMenuItem(PluginInstance, 0, 0, L"Online Analysis", NULL);
PhInsertEMenuItem(sendToMenu, PhPluginCreateEMenuItem(PluginInstance, 0, UPLOAD_SERVICE_VIRUSTOTAL, L"Virustotal", FileName), -1);
PhInsertEMenuItem(sendToMenu, PhPluginCreateEMenuItem(PluginInstance, 0, UPLOAD_SERVICE_JOTTI, L"Jotti", FileName), -1);
PhInsertEMenuItem(sendToMenu, PhPluginCreateEMenuItem(PluginInstance, 0, UPLOAD_SERVICE_CIMA, L"Comodo", FileName), -1);
menuItem = PhFindEMenuItem(Parent, PH_EMENU_FIND_STARTSWITH, InsertAfter, 0);
if (menuItem)
insertIndex = PhIndexOfEMenuItem(Parent, menuItem);
else
insertIndex = -1;
PhInsertEMenuItem(Parent, sendToMenu, insertIndex + 1);
return sendToMenu;
}
LOGICAL DllMain(
__in HINSTANCE Instance,
@@ -73,30 +100,30 @@ LOGICAL DllMain(
if (!PluginInstance)
return FALSE;
info->DisplayName = L"Online Checks";
info->Author = L"wj32";
info->Description = L"Allows files to be checked with online services.";
info->DisplayName = L"OnlineChecks";
info->Author = L"wj32 & dmex";
info->Description = L"";
info->HasOptions = FALSE;
PhRegisterCallback(
PhGetPluginCallback(PluginInstance, PluginCallbackLoad),
LoadCallback,
NULL,
&PluginLoadCallbackRegistration
);
PhRegisterCallback(
PhGetPluginCallback(PluginInstance, PluginCallbackShowOptions),
ShowOptionsCallback,
NULL,
&PluginShowOptionsCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackMainWindowShowing),
MainWindowShowingCallback,
NULL,
&MainWindowShowingCallbackRegistration
);
PhRegisterCallback(
PhGetPluginCallback(PluginInstance, PluginCallbackMenuItem),
MenuItemCallback,
NULL,
&PluginMenuItemCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackProcessMenuInitializing),
ProcessMenuInitializingCallback,
@@ -116,14 +143,6 @@ LOGICAL DllMain(
return TRUE;
}
VOID NTAPI LoadCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
)
{
// Nothing
}
VOID NTAPI ShowOptionsCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
@@ -132,58 +151,64 @@ VOID NTAPI ShowOptionsCallback(
// Nothing
}
VOID NTAPI MainWindowShowingCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
)
{
//PhPluginAddMenuItem(PluginInstance, PH_MENU_ITEM_LOCATION_TOOLS, NULL, UPLOAD_SERVICE_VIRUSTOTAL, L"Upload file to VirusTotal", NULL);
//PhPluginAddMenuItem(PluginInstance, PH_MENU_ITEM_LOCATION_TOOLS, NULL, UPLOAD_SERVICE_JOTTI, L"Upload file to JOTTI", NULL);
//PhPluginAddMenuItem(PluginInstance, PH_MENU_ITEM_LOCATION_TOOLS, NULL, UPLOAD_SERVICE_CIMA, L"Upload file to Comodo", NULL);
}
VOID NTAPI MenuItemCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
)
{
PPH_PLUGIN_MENU_ITEM menuItem = Parameter;
PPH_STRING fileName;
switch (menuItem->Id)
{
case ID_SENDTO_SERVICE1:
fileName = menuItem->Context;
UploadToOnlineService(menuItem->OwnerWindow, fileName, UPLOAD_SERVICE_VIRUSTOTAL);
case UPLOAD_SERVICE_VIRUSTOTAL:
{
if (menuItem->Context)
{
UploadToOnlineService(
menuItem->OwnerWindow,
menuItem->Context ? menuItem->Context : NULL,
UPLOAD_SERVICE_VIRUSTOTAL
);
}
}
break;
case ID_SENDTO_SERVICE2:
fileName = menuItem->Context;
UploadToOnlineService(menuItem->OwnerWindow, fileName, UPLOAD_SERVICE_JOTTI);
case UPLOAD_SERVICE_JOTTI:
{
if (menuItem->Context)
{
UploadToOnlineService(
menuItem->OwnerWindow,
menuItem->Context ? menuItem->Context : NULL,
UPLOAD_SERVICE_JOTTI
);
}
}
break;
case ID_SENDTO_SERVICE3:
fileName = menuItem->Context;
UploadToOnlineService(menuItem->OwnerWindow, fileName, UPLOAD_SERVICE_CIMA);
case UPLOAD_SERVICE_CIMA:
{
if (menuItem->Context)
{
UploadToOnlineService(
menuItem->OwnerWindow,
menuItem->Context ? menuItem->Context : NULL,
UPLOAD_SERVICE_CIMA
);
}
}
break;
}
}
PPH_EMENU_ITEM CreateSendToMenu(
__in PPH_EMENU_ITEM Parent,
__in PWSTR InsertAfter,
__in PPH_STRING FileName
)
{
PPH_EMENU_ITEM sendToMenu;
PPH_EMENU_ITEM menuItem;
ULONG insertIndex;
// Create the Send To menu.
sendToMenu = PhPluginCreateEMenuItem(PluginInstance, 0, 0, L"Send To", NULL);
PhInsertEMenuItem(sendToMenu, PhPluginCreateEMenuItem(PluginInstance, 0, ID_SENDTO_SERVICE1, L"virustotal.com", FileName), -1);
PhInsertEMenuItem(sendToMenu, PhPluginCreateEMenuItem(PluginInstance, 0, ID_SENDTO_SERVICE2, L"virusscan.jotti.org", FileName), -1);
PhInsertEMenuItem(sendToMenu, PhPluginCreateEMenuItem(PluginInstance, 0, ID_SENDTO_SERVICE3, L"camas.comodo.com", FileName), -1);
menuItem = PhFindEMenuItem(Parent, PH_EMENU_FIND_STARTSWITH, InsertAfter, 0);
if (menuItem)
insertIndex = PhIndexOfEMenuItem(Parent, menuItem);
else
insertIndex = -1;
PhInsertEMenuItem(Parent, sendToMenu, insertIndex + 1);
return sendToMenu;
}
VOID NTAPI ProcessMenuInitializingCallback(
__in_opt PVOID Parameter,
@@ -192,6 +217,8 @@ VOID NTAPI ProcessMenuInitializingCallback(
{
PPH_PLUGIN_MENU_INFORMATION menuInfo = Parameter;
PPH_PROCESS_ITEM processItem;
ULONG flags;
PPH_EMENU_ITEM miscMenu;
PPH_EMENU_ITEM sendToMenu;
if (menuInfo->u.Process.NumberOfProcesses == 1)
@@ -199,13 +226,17 @@ VOID NTAPI ProcessMenuInitializingCallback(
else
processItem = NULL;
sendToMenu = CreateSendToMenu(menuInfo->Menu, L"Search Online", processItem ? processItem->FileName : NULL);
flags = 0;
// Only enable the Send To menu if there is exactly one process selected and it has a file name.
if (!processItem || !processItem->FileName)
flags = PH_EMENU_DISABLED;
miscMenu = PhFindEMenuItem(menuInfo->Menu, 0, L"Miscellaneous", 0);
if (miscMenu)
{
sendToMenu->Flags |= PH_EMENU_DISABLED;
sendToMenu = CreateSendToMenu(miscMenu, L"Search Online", processItem ? processItem->FileName : NULL);
}
}
+57 -3
View File
@@ -1,6 +1,50 @@
#ifndef ONLNCHK_H
#define ONLNCHK_H
#pragma comment(lib, "OleAut32.lib")
#pragma comment(lib, "Winhttp.lib")
#define COBJMACROS
#include <time.h>
#include <phdk.h>
#include <OleCtl.h>
#include <winhttp.h>
#include <Netlistmgr.h>
#include <ShObjIdl.h>
#include "sha256.h"
#include "resource.h"
#define HASH_SHA1 1
#define HASH_SHA256 2
#define UM_LAUNCH_COMMAND (WM_APP + 1)
#define UM_ERROR (WM_APP + 2)
typedef struct _UPLOAD_CONTEXT
{
LONG RefCount;
PPH_STRING FileName;
ULONG Service;
HWND WindowHandle;
HANDLE ThreadHandle;
PPH_STRING LaunchCommand;
PPH_STRING ErrorMessage;
} UPLOAD_CONTEXT, *PUPLOAD_CONTEXT;
typedef struct _SERVICE_INFO
{
ULONG Id;
PWSTR HostName;
INTERNET_PORT HostPort;
ULONG HostFlags;
PWSTR UploadObjectName;
PWSTR FileNameFieldName;
} SERVICE_INFO, *PSERVICE_INFO;
// main
#ifndef MAIN_PRIVATE
@@ -9,9 +53,9 @@ extern PPH_PLUGIN PluginInstance;
// upload
#define UPLOAD_SERVICE_VIRUSTOTAL 1
#define UPLOAD_SERVICE_JOTTI 2
#define UPLOAD_SERVICE_CIMA 3
#define UPLOAD_SERVICE_VIRUSTOTAL 101
#define UPLOAD_SERVICE_JOTTI 102
#define UPLOAD_SERVICE_CIMA 103
VOID UploadToOnlineService(
__in HWND hWnd,
@@ -19,4 +63,14 @@ VOID UploadToOnlineService(
__in ULONG Service
);
INT_PTR CALLBACK UploadDlgProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
#endif
+4 -10
View File
@@ -2,16 +2,10 @@
// Microsoft Visual C++ generated include file.
// Used by OnlineChecks.rc
//
#define ID_SENDTO_SERVICE1 101
#define IDD_PROGRESS 101
#define ID_SENDTO_SERVICE2 102
#define ID_SENDTO_SERVICE3 103
#define ID_SENDTO_SERVICE4 104
#define ID_SENDTO_SERVICE5 105
#define ID_SENDTO_SERVICE6 106
#define ID_SENDTO_SERVICE7 107
#define ID_SENDTO_SERVICE8 108
#define IDD_PROGRESSDIALOG 101
#define IDC_MESSAGE 1002
#define IDC_UPLOADPROGRESS 1003
#define IDC_STATUS 1004
// Next default values for new objects
//
@@ -19,7 +13,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1003
#define _APS_NEXT_CONTROL_VALUE 1007
#define _APS_NEXT_SYMED_VALUE 109
#endif
#endif
File diff suppressed because it is too large Load Diff