Skip to content

Commit 4e74fa0

Browse files
committed
add option for which hashes to display, closes idrassi#2
1 parent c649adc commit 4e74fa0

11 files changed

+202
-90
lines changed

HashCalc.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ typedef struct {
5050
#endif
5151
CHAR szA[SCRATCH_BUFFER_SIZE * 3];
5252
};
53-
BYTE ext[0x8000]; // extra padding for batching large sets of small files
53+
BYTE ext[0x10000]; // extra padding for batching large sets of small files
5454
} HASHCALCSCRATCH, *PHASHCALCSCRATCH;
5555

5656
// Hash creation context

HashCheck.rc

+12-6
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ IDD_HASHVERF DIALOGEX 0, 0, 400, 250
115115
DEFPUSHBUTTON "", IDC_EXIT, 343, 229, 50, 14, WS_TABSTOP
116116
}
117117

118-
IDD_OPTIONS DIALOGEX 10, 10, 200, 199
118+
IDD_OPTIONS DIALOGEX 10, 10, 200, 264
119119
STYLE DS_MODALFRAME | DS_SHELLFONT | WS_POPUPWINDOW | WS_CAPTION
120120
FONT 8, "MS Shell Dlg"
121121
{
@@ -127,11 +127,17 @@ IDD_OPTIONS DIALOGEX 10, 10, 200, 199
127127
AUTORADIOBUTTON "", IDC_OPT_ENCODING_UTF8, 13, 85, 174, 10, WS_TABSTOP
128128
AUTORADIOBUTTON "", IDC_OPT_ENCODING_UTF16, 13, 99, 174, 10
129129
AUTORADIOBUTTON "", IDC_OPT_ENCODING_ANSI, 13, 113, 174, 10
130-
GROUPBOX "", IDC_OPT_FONT, 7, 137, 186, 34, WS_GROUP
131-
CTEXT "", IDC_OPT_FONT_PREVIEW, 13, 150, 100, 14, SS_CENTERIMAGE | SS_SUNKEN
132-
PUSHBUTTON "", IDC_OPT_FONT_CHANGE, 117, 150, 70, 14, WS_TABSTOP
133-
DEFPUSHBUTTON "", IDC_OK, 89, 178, 50, 14, WS_TABSTOP | WS_GROUP
134-
PUSHBUTTON "", IDC_CANCEL, 143, 178, 50, 14, WS_TABSTOP
130+
GROUPBOX "", IDC_OPT_CHK, 7, 137, 186, 58, WS_GROUP
131+
AUTOCHECKBOX "CRC-32",IDC_OPT_CHK_CRC32, 13, 150, 54, 10, WS_TABSTOP
132+
AUTOCHECKBOX "MD5",IDC_OPT_CHK_MD5, 13, 164, 54, 10, WS_TABSTOP
133+
AUTOCHECKBOX "SHA-1",IDC_OPT_CHK_SHA1, 13, 178, 54, 10, WS_TABSTOP
134+
AUTOCHECKBOX "SHA-256",IDC_OPT_CHK_SHA256, 100, 150, 54, 10, WS_TABSTOP
135+
AUTOCHECKBOX "SHA-512",IDC_OPT_CHK_SHA512, 100, 164, 54, 10, WS_TABSTOP
136+
GROUPBOX "", IDC_OPT_FONT, 7, 202, 186, 34, WS_GROUP
137+
CTEXT "", IDC_OPT_FONT_PREVIEW, 13, 215, 100, 14, SS_CENTERIMAGE | SS_SUNKEN
138+
PUSHBUTTON "", IDC_OPT_FONT_CHANGE, 117, 215, 70, 14, WS_TABSTOP
139+
DEFPUSHBUTTON "", IDC_OK, 89, 243, 50, 14, WS_TABSTOP | WS_GROUP
140+
PUSHBUTTON "", IDC_CANCEL, 143, 243, 50, 14, WS_TABSTOP
135141
}
136142

137143
IDR_RT_MANIFEST RT_MANIFEST "HashCheck.manifest"

HashCheckOptions.c

+52-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* HashCheck Shell Extension
33
* Original work copyright (C) Kai Liu. All rights reserved.
4-
* Modified work copyright (C) 2014 Christopher Gurnee. All rights reserved.
4+
* Modified work copyright (C) 2014, 2016 Christopher Gurnee. All rights reserved.
55
* Modified work copyright (C) 2016 Tim Schlueter. All rights reserved.
66
*
77
* Please refer to readme.txt for information about this source code.
@@ -11,6 +11,7 @@
1111
#include "globals.h"
1212
#include "HashCheckCommon.h"
1313
#include "HashCheckOptions.h"
14+
#include "libs/WinHash.h"
1415
#include "RegHelpers.h"
1516
#include "libs/IsFontAvailable.h"
1617

@@ -52,7 +53,7 @@ VOID WINAPI OptionsDlgInit( HWND hWnd, POPTIONSCONTEXT poptctx );
5253

5354
// Dialog commands
5455
VOID WINAPI ChangeFont( HWND hWnd, POPTIONSCONTEXT poptctx );
55-
VOID WINAPI SaveSettings( HWND hWnd, POPTIONSCONTEXT poptctx );
56+
BOOL WINAPI SaveSettings( HWND hWnd, POPTIONSCONTEXT poptctx );
5657

5758

5859

@@ -132,6 +133,17 @@ VOID __fastcall OptionsLoad( PHASHCHECKOPTIONS popt )
132133
}
133134
}
134135

136+
if (popt->dwFlags & HCOF_CHECKSUMS)
137+
{
138+
if (!(hKey &&
139+
RegGetDW(hKey, TEXT("Checksums"), &popt->dwChecksums) &&
140+
popt->dwChecksums > 0 && popt->dwChecksums <= WHEX_ALL))
141+
{
142+
// Fall back to default (CRC-32, SHA-1, both SHA-2's)
143+
popt->dwChecksums = DEFAULT_HASH_ALGORITHMS;
144+
}
145+
}
146+
135147
if (popt->dwFlags & HCOF_FONT)
136148
{
137149
DWORD dwType;
@@ -184,6 +196,9 @@ VOID __fastcall OptionsSave( PHASHCHECKOPTIONS popt )
184196
if (popt->dwFlags & HCOF_SAVEENCODING)
185197
RegSetDW(hKey, TEXT("SaveEncoding"), popt->dwSaveEncoding);
186198

199+
if (popt->dwFlags & HCOF_CHECKSUMS)
200+
RegSetDW(hKey, TEXT("Checksums"), popt->dwChecksums);
201+
187202
if (popt->dwFlags & HCOF_FONT)
188203
RegSetValueEx(hKey, TEXT("Font"), 0, REG_BINARY, (PBYTE)&popt->lfFont, sizeof(LOGFONT));
189204

@@ -225,7 +240,8 @@ INT_PTR CALLBACK OptionsDlgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPa
225240
return(TRUE);
226241

227242
case IDC_OK:
228-
SaveSettings(hWnd, poptctx);
243+
if (SaveSettings(hWnd, poptctx) == FALSE)
244+
return(TRUE); // don't close on save errors
229245
case IDC_CANCEL:
230246
end_dialog: EndDialog(hWnd, 0);
231247
return(TRUE);
@@ -252,6 +268,7 @@ VOID WINAPI OptionsDlgInit( HWND hWnd, POPTIONSCONTEXT poptctx )
252268
{ IDC_OPT_ENCODING_UTF8, IDS_OPT_ENCODING_UTF8 },
253269
{ IDC_OPT_ENCODING_UTF16, IDS_OPT_ENCODING_UTF16 },
254270
{ IDC_OPT_ENCODING_ANSI, IDS_OPT_ENCODING_ANSI },
271+
{ IDC_OPT_CHK, IDS_OPT_CHK },
255272
{ IDC_OPT_FONT, IDS_OPT_FONT },
256273
{ IDC_OPT_FONT_CHANGE, IDS_OPT_FONT_CHANGE },
257274
{ IDC_OK, IDS_OPT_OK },
@@ -283,6 +300,11 @@ VOID WINAPI OptionsDlgInit( HWND hWnd, POPTIONSCONTEXT poptctx )
283300
SendDlgItemMessage(hWnd, IDC_OPT_ENCODING_FIRSTID + poptctx->popt->dwSaveEncoding,
284301
BM_SETCHECK, BST_CHECKED, 0);
285302

303+
#define HASH_OPT_SET_CHECKS_op(alg) \
304+
if (poptctx->popt->dwChecksums & WHEX_CHECK##alg) \
305+
SendDlgItemMessage(hWnd, IDC_OPT_CHK_##alg, BM_SETCHECK, BST_CHECKED, 0);
306+
FOR_EACH_HASH(HASH_OPT_SET_CHECKS_op)
307+
286308
if (poptctx->hFont = CreateFontIndirect(&poptctx->popt->lfFont))
287309
SendDlgItemMessage(hWnd, IDC_OPT_FONT_PREVIEW, WM_SETFONT, (WPARAM)poptctx->hFont, FALSE);
288310

@@ -321,10 +343,34 @@ VOID WINAPI ChangeFont( HWND hWnd, POPTIONSCONTEXT poptctx )
321343
}
322344
}
323345

324-
VOID WINAPI SaveSettings( HWND hWnd, POPTIONSCONTEXT poptctx )
346+
BOOL WINAPI SaveSettings( HWND hWnd, POPTIONSCONTEXT poptctx )
325347
{
326348
DWORD i;
327349

350+
// Get the user-selected value for dwChecksums
351+
i = 0;
352+
#define HASH_OPT_GET_CHECKS_op(alg) \
353+
if (SendDlgItemMessage(hWnd, IDC_OPT_CHK_##alg, BM_GETCHECK, 0, 0) == BST_CHECKED) \
354+
i |= WHEX_CHECK##alg;
355+
FOR_EACH_HASH(HASH_OPT_GET_CHECKS_op)
356+
357+
// Ensure at least one is checked
358+
if (i == 0)
359+
{
360+
TCHAR szError[MAX_STRINGMSG];
361+
// "Please select at least one checksum"
362+
LoadString(g_hModThisDll, IDS_OPT_CHK_ERROR, szError, countof(szError));
363+
MessageBox(hWnd, szError, NULL, MB_ICONWARNING);
364+
return(FALSE);
365+
}
366+
367+
// If the value has changed, flag it for saving
368+
if (i <= WHEX_ALL && poptctx->popt->dwChecksums != i)
369+
{
370+
poptctx->popt->dwFlags |= HCOF_CHECKSUMS;
371+
poptctx->popt->dwChecksums = i;
372+
}
373+
328374
// Get the user-selected value for dwMenuDisplay
329375
for (i = 0; i < 3; ++i)
330376
{
@@ -358,4 +404,6 @@ VOID WINAPI SaveSettings( HWND hWnd, POPTIONSCONTEXT poptctx )
358404
poptctx->popt->dwFlags |= HCOF_FONT;
359405

360406
OptionsSave(poptctx->popt);
407+
408+
return(TRUE);
361409
}

HashCheckOptions.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/**
22
* HashCheck Shell Extension
33
* Copyright (C) Kai Liu. All rights reserved.
4+
* Modified work copyright (C) 2014, 2016 Christopher Gurnee. All rights reserved.
45
*
56
* Please refer to readme.txt for information about this source code.
67
* Please refer to license.txt for details about distribution and modification.
@@ -21,6 +22,7 @@ typedef struct {
2122
DWORD dwFilterIndex;
2223
DWORD dwMenuDisplay;
2324
DWORD dwSaveEncoding;
25+
DWORD dwChecksums;
2426
LOGFONT lfFont;
2527
} HASHCHECKOPTIONS, *PHASHCHECKOPTIONS;
2628

@@ -29,7 +31,8 @@ typedef struct {
2931
#define HCOF_MENUDISPLAY 0x00000002 // The dwMenuDisplay member is valid
3032
#define HCOF_SAVEENCODING 0x00000004 // The dwSaveEncoding member is valid
3133
#define HCOF_FONT 0x00000008 // The lfFont member is valid
32-
#define HCOF_ALL 0x0000000F
34+
#define HCOF_CHECKSUMS 0x00000010 // The dwChecksums member is valid
35+
#define HCOF_ALL 0x0000001F
3336

3437
// Public functions
3538
VOID __fastcall OptionsDialog( HWND hWndOwner, PHASHCHECKOPTIONS popt );

HashCheckResources.h

+9-3
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@
5050
#define IDC_OPT_ENCODING_UTF16 507
5151
#define IDC_OPT_ENCODING_ANSI 508
5252
#define IDC_OPT_ENCODING_FIRSTID IDC_OPT_ENCODING_UTF8
53-
#define IDC_OPT_FONT 509
54-
#define IDC_OPT_FONT_CHANGE 510
55-
#define IDC_OPT_FONT_PREVIEW 511
53+
#define IDC_OPT_CHK 509
54+
#define IDC_OPT_CHK_CRC32 510
55+
#define IDC_OPT_CHK_MD5 511
56+
#define IDC_OPT_CHK_SHA1 512
57+
#define IDC_OPT_CHK_SHA256 513
58+
#define IDC_OPT_CHK_SHA512 514
59+
#define IDC_OPT_FONT 515
60+
#define IDC_OPT_FONT_CHANGE 516
61+
#define IDC_OPT_FONT_PREVIEW 517

HashCheckTranslations.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@
6060
#define IDS_OPT_ENCODING_UTF8 0x4506
6161
#define IDS_OPT_ENCODING_UTF16 0x4507
6262
#define IDS_OPT_ENCODING_ANSI 0x4508
63-
#define IDS_OPT_FONT 0x4509
64-
#define IDS_OPT_FONT_CHANGE 0x450A
63+
#define IDS_OPT_CHK 0x4509
64+
#define IDS_OPT_CHK_ERROR 0x450A
65+
#define IDS_OPT_FONT 0x450B
66+
#define IDS_OPT_FONT_CHANGE 0x450C
6567
#define IDS_OPT_OK IDS_HC_OK
6668
#define IDS_OPT_CANCEL IDS_HC_CANCEL

0 commit comments

Comments
 (0)