//============================================================================= // Copyright (c) 2000 Microsoft Corporation // // controls.hpp // // User interface control classes. // // Created 02/29/2000 johnstep (John Stephens) //============================================================================= #ifndef __CONTROLS_HPP__ #define __CONTROLS_HPP__ //----------------------------------------------------------------------------- #include #include //----------------------------------------------------------------------------- // Global Variables //----------------------------------------------------------------------------- extern CLSID CreduiStringArrayClassId; #define CREDUI_STRING_ARRAY_CLASS_STRING\ L"{82BD0E67-9FEA-4748-8672-D5EFE5B779B0}" //----------------------------------------------------------------------------- // Types //----------------------------------------------------------------------------- struct CREDUI_BALLOON_TIP_INFO { WCHAR *Title; WCHAR *Text; INT Icon; INT XPercent; INT YPercent; }; //----------------------------------------------------------------------------- // CreduiBalloonTip Class //----------------------------------------------------------------------------- class CreduiBalloonTip { public: CreduiBalloonTip(); ~CreduiBalloonTip(); BOOL Init(HINSTANCE instance, HWND parentWindow); BOOL SetInfo(HWND controlWindow, CONST CREDUI_BALLOON_TIP_INFO *tipInfo); CREDUI_BALLOON_TIP_INFO *GetInfo() { return TipInfo; } BOOL Show(); BOOL Hide(); BOOL IsVisible() { return Visible; } private: HWND Window; HWND ParentWindow; HWND ControlWindow; CREDUI_BALLOON_TIP_INFO *TipInfo; BOOL Visible; }; //----------------------------------------------------------------------------- // CreduiPasswordBox Class //----------------------------------------------------------------------------- class CreduiPasswordBox { public: CreduiPasswordBox(); ~CreduiPasswordBox(); BOOL Init( HWND window, CreduiBalloonTip *ballonTip, CONST CREDUI_BALLOON_TIP_INFO *capsLockTipInfo, HFONT passwordFont = NULL, WCHAR passwordChar = L'•'); private: WNDPROC OriginalMessageHandler; LRESULT MessageHandler( UINT message, WPARAM wParam, LPARAM lParam ); static LRESULT CALLBACK MessageHandlerCallback( HWND passwordWindow, UINT message, WPARAM wParam, LPARAM lParam ); HWND Window; HFONT PasswordFont; CreduiBalloonTip *BalloonTip; CONST CREDUI_BALLOON_TIP_INFO *CapsLockTipInfo; }; //----------------------------------------------------------------------------- // CreduiStringArrayFactory Class //----------------------------------------------------------------------------- class CreduiStringArrayFactory : public IClassFactory { public: CreduiStringArrayFactory(); // IUnknown HRESULT STDMETHODCALLTYPE QueryInterface( CONST IID &interfaceId, VOID **outInterface ); ULONG STDMETHODCALLTYPE AddRef(); ULONG STDMETHODCALLTYPE Release(); // IClassFactory HRESULT STDMETHODCALLTYPE CreateInstance( IUnknown *unknownOuter, CONST IID &interfaceId, VOID **outInterface ); HRESULT STDMETHODCALLTYPE LockServer(BOOL lock); private: ~CreduiStringArrayFactory(); // must use IUnknown::Release() ULONG ReferenceCount; }; //----------------------------------------------------------------------------- // CreduiStringArray Class //----------------------------------------------------------------------------- class CreduiStringArray : public IEnumString { public: CreduiStringArray(); BOOL Init(UINT count); BOOL Find(CONST WCHAR *string); INT Add(CONST WCHAR *string); UINT GetCount() CONST { return Count; } // IUnknown HRESULT STDMETHODCALLTYPE QueryInterface( CONST IID &interfaceId, VOID **outInterface ); ULONG STDMETHODCALLTYPE AddRef(); ULONG STDMETHODCALLTYPE Release(); // IEnumString HRESULT STDMETHODCALLTYPE Next( ULONG count, WCHAR **array, ULONG *countFetched ); HRESULT STDMETHODCALLTYPE Skip(ULONG count); HRESULT STDMETHODCALLTYPE Reset(); HRESULT STDMETHODCALLTYPE Clone(IEnumString **enumInterface); private: ~CreduiStringArray(); // must use IUnknown::Release() ULONG ReferenceCount; UINT Index; UINT Count; UINT MaxCount; WCHAR **Array; }; //----------------------------------------------------------------------------- // CreduiAutoCompleteComboBox Class //----------------------------------------------------------------------------- class CreduiAutoCompleteComboBox { public: CreduiAutoCompleteComboBox(); ~CreduiAutoCompleteComboBox(); BOOL Init( HMODULE instance, HWND comboBoxwindow, UINT stringCount, INT imageListResourceId = 0, INT initialImage = -1 ); INT Add( WCHAR *string, INT image = -1, BOOL autoComplete = TRUE, BOOL addUnique = TRUE, INT indexBefore = -1, INT indent = 0 ); BOOL Update( INT index, WCHAR *string, INT image = -1 ); BOOL Enable(); private: HWND Window; HIMAGELIST ImageList; CreduiStringArray *StringArray; }; //----------------------------------------------------------------------------- // CreduiIconParentWindow Class //----------------------------------------------------------------------------- class CreduiIconParentWindow { public: CreduiIconParentWindow(); ~CreduiIconParentWindow(); BOOL Init(HINSTANCE instance, UINT iconResourceId); HWND GetWindow() { return Window; } static BOOL Register(HINSTANCE instance); static BOOL Unregister(); private: HWND Window; static CONST WCHAR *ClassName; static HINSTANCE Instance; static LONG Registered; }; //----------------------------------------------------------------------------- // CreduiCredentialControl Class //----------------------------------------------------------------------------- class CreduiCredentialControl { public: CreduiCredentialControl(); ~CreduiCredentialControl(); static BOOL Register(HINSTANCE instance); static BOOL Unregister(); virtual BOOL OnHelpInfo( LPARAM lp ); virtual UINT MapID(UINT uid); private: static CONST WCHAR *ClassName; static HINSTANCE Instance; static LONG Registered; BOOL IsInitialized; // User interface control state flags: enum { DISABLED_CONTROL = 0x0001, DISABLED_CONTROL_PASSWORD = 0x0002, DISABLED_CONTROL_USERNAME = 0x0010, DISABLED_CONTROL_VIEW = 0x0004, DISABLED_CONTROL_SAVE = 0x0008, }; BOOL DisabledControlMask; // User type image indices: enum { IMAGE_USERNAME = 0, IMAGE_CERT = 1, IMAGE_CERT_EXPIRED = 2, IMAGE_SMART_CARD = 3, IMAGE_SMART_CARD_MISSING = 4, IMAGE_SMART_CARD_EXPIRED = 5 }; HWND Window; LONG Style; HWND UserNameStaticWindow; HWND UserNameControlWindow; HWND ViewCertControlWindow; HWND PasswordStaticWindow; HWND PasswordControlWindow; HWND SaveControlWindow; BOOL FirstPaint; BOOL ShowBalloonTip; CreduiBalloonTip BalloonTip; BOOL IsAutoComplete; BOOL NoEditUserName; BOOL KeepUserName; BOOL IsPassport; CreduiPasswordBox PasswordBox; UCHAR (*CertHashes)[CERT_HASH_LENGTH]; ULONG CertCount; INT CertBaseInComboBox; UCHAR (*UserNameCertHash)[CERT_HASH_LENGTH]; INT SmartCardBaseInComboBox; UINT SmartCardReadCount; UINT IsChangingUserName; UINT IsChangingPassword; CreduiAutoCompleteComboBox UserNameComboBox; LONG UserNameSelection; HSCARDUI ScardUiHandle; // Functions: BOOL InitWindow(); BOOL CreateControls(); BOOL InitComboBoxUserNames(); BOOL AddCertificates(); BOOL ViewCertificate(INT index); BOOL HandleSmartCardMessages(UINT message, CERT_ENUM *certEnum); INT FindSmartCardInComboBox(CERT_ENUM *certEnum); VOID RemoveSmartCardFromComboBox(CERT_ENUM *certEnum, BOOL removeParent); VOID Enable(BOOL enable = TRUE); VOID OnUserNameSelectionChange(); BOOL OnSetUserNameA(CHAR *userNameA); BOOL OnSetUserName(WCHAR *userName); BOOL OnGetUserNameA(CHAR *userNameA, ULONG maxChars); BOOL OnGetUserName(WCHAR *userName, ULONG maxChars); BOOL OnSetPasswordA(CHAR *passwordA); BOOL OnSetPassword(WCHAR *password); BOOL OnGetPasswordA(CHAR *passwordA, ULONG maxChars); BOOL OnGetPassword(WCHAR *password, ULONG maxChars); LONG OnGetUserNameLength(); BOOL OnShowBalloonA(CREDUI_BALLOONA *balloonA); BOOL OnShowBalloon(CREDUI_BALLOON *balloon); static LRESULT CALLBACK MessageHandlerCallback( HWND window, UINT message, WPARAM wParam, LPARAM lParam ); LRESULT MessageHandler( UINT message, WPARAM wParam, LPARAM lParam ); // // Command line specific data // BOOL DoingCommandLine; INT Heartbeats; #define CREDUI_HEARTBEAT_TIMER 1 #define CREDUI_HEARTBEAT_TIMER_VALUE 2000 #define CREDUI_MAX_HEARTBEATS 15 #define CREDUI_TIMEOUT_HEARTBEATS 5 LPWSTR TargetName; LPWSTR InitialUserName; void CmdlineSmartCardPrompt(); void CmdlineSavePrompt(); BOOL GetSmartCardInfo( IN DWORD SmartCardIndex, IN DWORD BufferLength, OUT LPWSTR Buffer, OUT BOOL *IsACard, OUT BOOL *IsValid, OUT CERT_ENUM **CertEnum OPTIONAL ); LPWSTR MatchSmartCard( IN DWORD SmartCardCount, IN LPWSTR UserName, OUT LPDWORD RetCertIndex, OUT CERT_ENUM **RetCertEnum ); }; //----------------------------------------------------------------------------- #endif // __CONTROLS_HPP__