/*++ Copyright (c) 2001 Microsoft Corporation Module Name: Chollian2000Plus.cpp Abstract: The app has a binary logon.ocx which uses sub-classed editbox as password editbox. It does not hook all messages (whistler seems has more message than win2k's), so when the mouse drags through it, the password typed will be shown as plain text, the fix is to apply ES_PASSWORD to this specific EditBox. Notes: This is an app specific shim. History: 05/15/2001 xiaoz Created --*/ #include "precomp.h" #include "psapi.h" IMPLEMENT_SHIM_BEGIN(Chollian2000Plus) #include "ShimHookMacro.h" APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(CreateWindowExA) APIHOOK_ENUM_END /*++ Correct Window Style if Necessary --*/ HWND APIHOOK(CreateWindowExA)( DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam ) { WCHAR szBaseName[MAX_PATH]; CString cstrClassname; CString cstrBaseName; // If dwExStyle is not zero, goto original call if (dwExStyle) { goto Original; } // If dwStyle is not 0x50010000, goto original call if (0x50010000 != dwStyle) { goto Original; } if (!GetModuleBaseName(GetCurrentProcess(), hInstance, szBaseName, MAX_PATH)) { goto Original; } // If the call is not from login.ocx ,goto original call cstrBaseName = szBaseName; if (cstrBaseName.CompareNoCase(L"login.ocx")) { goto Original; } // If it's not an EditBox , goto original call cstrClassname = lpClassName; if (cstrClassname.CompareNoCase(L"Edit")) { goto Original; } // If it has window's name , goto original call if (lpWindowName) { goto Original; } LOGN(eDbgLevelWarning, "Window style corrected"); dwStyle = dwStyle | 0x0020; Original: return ORIGINAL_API(CreateWindowExA)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); } /*++ Register hooked functions --*/ HOOK_BEGIN APIHOOK_ENTRY(USER32.DLL, CreateWindowExA) HOOK_END IMPLEMENT_SHIM_END