|
| 1 | +// VeraCrypt defines |
| 2 | +#define TC_SYSTEM_FAVORITES_SERVICE_NAME L"VeraCryptSystemFavorites" |
1 | 3 | #define VC_DRIVER_CONFIG_CLEAR_KEYS_ON_NEW_DEVICE_INSERTION 0x400 |
| 4 | +#define VC_SERVICE_CONTROL_BUILD_DEVICE_LIST 128 |
2 | 5 |
|
| 6 | +// VCEKC defines |
3 | 7 | #define VCEKC_CLASSNAME _T("VCEnhancedKeyClear_WndClass") |
4 | 8 | #define VCEKC_WINDOWNAME _T("VCEnhancedKeyClear_Wnd") |
5 | 9 | #define VCEKC_MSGTITLE _T("VeraCrypt Enhanced Key Clear") |
|
18 | 22 |
|
19 | 23 | NOTIFYICONDATA nid{}; |
20 | 24 |
|
| 25 | +bool VeraCryptBuildDeviceList() |
| 26 | +{ |
| 27 | + SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); |
| 28 | + bool bRet = false; |
| 29 | + |
| 30 | + if (hSCManager != NULL) |
| 31 | + { |
| 32 | + SC_HANDLE hService = OpenService(hSCManager, TC_SYSTEM_FAVORITES_SERVICE_NAME, SERVICE_ALL_ACCESS); |
| 33 | + |
| 34 | + if (hService != NULL) |
| 35 | + { |
| 36 | + SERVICE_STATUS serviceStatus{}; |
| 37 | + |
| 38 | + if (ControlService(hService, VC_SERVICE_CONTROL_BUILD_DEVICE_LIST, &serviceStatus)) |
| 39 | + { |
| 40 | + bRet = true; |
| 41 | + } |
| 42 | + |
| 43 | + CloseServiceHandle(hService); |
| 44 | + } |
| 45 | + |
| 46 | + CloseServiceHandle(hSCManager); |
| 47 | + } |
| 48 | + |
| 49 | + return bRet; |
| 50 | +} |
| 51 | + |
21 | 52 | bool SetClearKeysFlag(bool state) |
22 | 53 | { |
23 | 54 | HKEY hkey = NULL; |
@@ -58,24 +89,31 @@ LRESULT CALLBACK VcekcWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa |
58 | 89 | { |
59 | 90 | case WM_WTSSESSION_CHANGE: |
60 | 91 | { |
61 | | - bool res = true; |
| 92 | + bool resSetConfig = true; |
| 93 | + bool resBuildDeviceList = true; |
62 | 94 |
|
63 | 95 | switch (wParam) |
64 | 96 | { |
65 | 97 | default: break; |
66 | 98 | case WTS_SESSION_UNLOCK: |
67 | | - res = SetClearKeysFlag(false); |
| 99 | + resSetConfig = SetClearKeysFlag(false); |
68 | 100 | break; |
69 | 101 | case WTS_SESSION_LOCK: |
70 | | - res = SetClearKeysFlag(true); |
| 102 | + resBuildDeviceList = VeraCryptBuildDeviceList(); |
| 103 | + resSetConfig = SetClearKeysFlag(true); |
71 | 104 | break; |
72 | 105 | } |
73 | 106 |
|
74 | | - if (!res) |
| 107 | + if (!resSetConfig) |
75 | 108 | { |
76 | 109 | MessageBox(NULL, _T("Failed to change VC_DRIVER_CONFIG_CLEAR_KEYS_ON_NEW_DEVICE_INSERTION"), VCEKC_MSGTITLE, MB_ICONEXCLAMATION | MB_OK); |
77 | 110 | } |
78 | 111 |
|
| 112 | + if (!resBuildDeviceList) |
| 113 | + { |
| 114 | + MessageBox(NULL, _T("Failed to send VC_SERVICE_CONTROL_BUILD_DEVICE_LIST"), VCEKC_MSGTITLE, MB_ICONEXCLAMATION | MB_OK); |
| 115 | + } |
| 116 | + |
79 | 117 | break; |
80 | 118 | } |
81 | 119 | case VCEKC_SHELLICONMSG: |
|
0 commit comments