switch (iMessage)\r
{\r
case WM_INITDIALOG :\r
+ // プロセス保護\r
+ ProtectAllEditControls(hDlg);\r
SendDlgItemMessage(hDlg, HSET_HOST, EM_LIMITTEXT, HOST_NAME_LEN, 0);\r
SendDlgItemMessage(hDlg, HSET_ADRS, EM_LIMITTEXT, HOST_ADRS_LEN, 0);\r
SendDlgItemMessage(hDlg, HSET_USER, EM_LIMITTEXT, USER_NAME_LEN, 0);\r
switch (iMessage)\r
{\r
case WM_INITDIALOG :\r
+ // プロセス保護\r
+ ProtectAllEditControls(hDlg);\r
if(strlen(DialogData->Title) != 0)\r
SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)DialogData->Title);\r
SendDlgItemMessage(hDlg, INP_INPSTR, EM_LIMITTEXT, DialogData->MaxLen-1, 0);\r
switch (message)\r
{\r
case WM_INITDIALOG :\r
+ // プロセス保護\r
+ ProtectAllEditControls(hDlg);\r
Type = ConvertNum(FwallType, 1, TypeTbl, sizeof(TypeTbl)/sizeof(INTCONVTBL));\r
SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN204);\r
SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN205);\r
DWORD g_LockedThread[MAX_LOCKED_THREAD];\r
WCHAR* g_pTrustedFilenameTable[MAX_TRUSTED_FILENAME_TABLE];\r
BYTE g_TrustedMD5HashTable[MAX_TRUSTED_MD5_HASH_TABLE][20];\r
+WNDPROC g_PasswordEditControlProc;\r
\r
// 以下フック関数\r
// フック対象を呼び出す場合は前後でSTART_HOOK_FUNCTIONとEND_HOOK_FUNCTIONを実行する必要がある\r
return bResult;\r
}\r
\r
+INT_PTR CALLBACK PasswordEditControlWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)\r
+{\r
+ switch(Msg)\r
+ {\r
+ case EM_GETPASSWORDCHAR:\r
+ break;\r
+ case EM_SETPASSWORDCHAR:\r
+ break;\r
+ default:\r
+ return CallWindowProcW(g_PasswordEditControlProc, hWnd, Msg, wParam, lParam);\r
+ }\r
+ return 0;\r
+}\r
+\r
+BOOL ProtectPasswordEditControl(HWND hWnd)\r
+{\r
+ BOOL bResult;\r
+ WCHAR ClassName[MAX_PATH];\r
+ WNDPROC Proc;\r
+ bResult = FALSE;\r
+ if(g_ProcessProtectionLevel & PROCESS_PROTECTION_PASSWORD_EDIT)\r
+ {\r
+ if(GetClassNameW(hWnd, ClassName, MAX_PATH) > 0)\r
+ {\r
+ if(_wcsicmp(ClassName, WC_EDITW) == 0)\r
+ {\r
+ Proc = (WNDPROC)GetWindowLongPtrW(hWnd, GWLP_WNDPROC);\r
+ if(Proc != (WNDPROC)PasswordEditControlWndProc)\r
+ {\r
+ g_PasswordEditControlProc = Proc;\r
+ SetWindowLongPtrW(hWnd, GWLP_WNDPROC, (LONG_PTR)PasswordEditControlWndProc);\r
+ bResult = TRUE;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return bResult;\r
+}\r
+\r
+BOOL CALLBACK ProtectAllEditControlsEnumChildProc(HWND hwnd , LPARAM lParam)\r
+{\r
+ ProtectPasswordEditControl(hwnd);\r
+ return TRUE;\r
+}\r
+\r
+BOOL ProtectAllEditControls(HWND hWnd)\r
+{\r
+ if(g_ProcessProtectionLevel & PROCESS_PROTECTION_PASSWORD_EDIT)\r
+ EnumChildWindows(hWnd, ProtectAllEditControlsEnumChildProc, 0);\r
+ return TRUE;\r
+}\r
+\r
#define PROCESS_PROTECTION_EXPIRED 0x00000010\r
// Authenticode署名の発行元を無視\r
#define PROCESS_PROTECTION_UNAUTHORIZED 0x00000020\r
+// パスワード入力コントロールを保護\r
+#define PROCESS_PROTECTION_PASSWORD_EDIT 0x00000040\r
\r
#define PROCESS_PROTECTION_NONE 0\r
#define PROCESS_PROTECTION_DEFAULT PROCESS_PROTECTION_HIGH\r
-#define PROCESS_PROTECTION_HIGH (PROCESS_PROTECTION_BUILTIN | PROCESS_PROTECTION_SIDE_BY_SIDE | PROCESS_PROTECTION_SYSTEM_FILE)\r
-#define PROCESS_PROTECTION_MEDIUM (PROCESS_PROTECTION_HIGH | PROCESS_PROTECTION_LOADED | PROCESS_PROTECTION_EXPIRED)\r
-#define PROCESS_PROTECTION_LOW (PROCESS_PROTECTION_MEDIUM | PROCESS_PROTECTION_UNAUTHORIZED)\r
+#define PROCESS_PROTECTION_HIGH (PROCESS_PROTECTION_BUILTIN | PROCESS_PROTECTION_SIDE_BY_SIDE | PROCESS_PROTECTION_SYSTEM_FILE | PROCESS_PROTECTION_PASSWORD_EDIT)\r
+#define PROCESS_PROTECTION_MEDIUM (PROCESS_PROTECTION_HIGH | PROCESS_PROTECTION_LOADED | PROCESS_PROTECTION_EXPIRED | PROCESS_PROTECTION_PASSWORD_EDIT)\r
+#define PROCESS_PROTECTION_LOW (PROCESS_PROTECTION_MEDIUM | PROCESS_PROTECTION_UNAUTHORIZED | PROCESS_PROTECTION_PASSWORD_EDIT)\r
\r
HMODULE System_LoadLibrary(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);\r
void SetProcessProtectionLevel(DWORD Level);\r
BOOL InitializeLoadLibraryHook();\r
BOOL EnableLoadLibraryHook(BOOL bEnable);\r
BOOL RestartProtectedProcess(LPCTSTR Keyword);\r
+BOOL ProtectPasswordEditControl(HWND hWnd);\r
+BOOL ProtectAllEditControls(HWND hWnd);\r
\r
#endif\r
\r