// The icons ID passed to the shell contains the following format: // // B: Designates value is a bitmask // M: Designates value is mutually exclusive // // Icon Handler Flag (01 = NetConfig, 10 = Connection Manager, 11 = Static Icon from Resource) // | // | For Icon Handler == 00 (NetConfig) // | ================================== // | Characteristics Overlay (B: Reserved) // | | Characteristics Overlay (B: 000001000 - Shared) // | | | Characteristics Overlay (B: 000000100 - Firewalled) // | | | | Characteristics Overlay (B: 000000010 - Default) // | | | | | Characteristics Overlay (B: 000000001 - Incoming) // | | | | | | // | | | | | | Status Overlay (M: 0000 - None) // | | | | | | Status Overlay (M: 0001 - Hardware Not Present) // | | | | | | Status Overlay (M: 0010 - Invalid IP) // | | | | | | Status Overlay (M: 0011 - EAPOL Authentication Failed) // | | | | | | // | | | | | | Status Overlay (M: 1xxx - Disabled status) // | | | | | | | // | | | | | | | Connection Icon (Flashy Computer) (M: 000 - No Overlay) // | | | | | | | Connection Icon (Flashy Computer) (M: 100 - Both Lights Off) // | | | | | | | Connection Icon (Flashy Computer) (M: 110 - Left Light On (Sent)) // | | | | | | | Connection Icon (Flashy Computer) (M: 101 - Right Light On (Received)) // | | | | | | | Connection Icon (Flashy Computer) (M: 111 - Both Lights On (Sent + Received)) // | | | | | | | | // | | | | | | | | Media Type (M: NETCON_MEDIATYPE (0x1111111 is Connection Manager) // | | | | | | | | | Media Type (M: NETCON_SUBMEDIATYPE) // | | | | | | | | | | // v v v v v v v v v v // 01 00000 0 0 0 0 0000 000 0000000 0000000 // | // | // | For Icon Handler == 01 (Connection Manager) // | =========================================== // | Characteristics Overlay (B: Reserved) // | | Characteristics Overlay (B: 000001000 - Shared) // | | | Characteristics Overlay (B: 000000100 - Firewalled) // | | | | Characteristics Overlay (B: 000000010 - Default) // | | | | | Characteristics Overlay (B: 000000001 - Incoming) // | | | | | | // | | | | | | // | | | | | | Reserved // | | | | | | | // | | | | | | | BrandedNames Lookup Table Entry // | | | | | | | | // v v v v v v v v (16 bits) // 10 00000 0 0 0 0 00000 0000000000000000 // | // | // | For Icon Handler == 10 (10 = Static Icon from Resource) // | ======================================================= // | Characteristics Overlay (B: Reserved) // | | Characteristics Overlay (B: 000001000 - Shared) // | | | Characteristics Overlay (B: 000000100 - Firewalled) // | | | | Characteristics Overlay (B: 000000010 - Default) // | | | | | Characteristics Overlay (B: 000000001 - Incoming) // | | | | | | // | | | | | | // | | | | | | Reserved // | | | | | | | // | | | | | | | Resource ID // | | | | | | | | // v v v v v v v v (16 bits) // 11 00000 0 0 0 0 00000 0000000000000000 enum ENUM_MEDIA_ICONMASK { MASK_NETCON_SUBMEDIATYPE = 0x0000007f, // 00000000000000000000000001111111 MASK_NETCON_MEDIATYPE = 0x00003F80, // 00000000000000000011111110000000 MASK_CONNECTION = 0x0001C000, // 00000000000000011100000000000000 MASK_STATUS = 0x000E0000, // 00000000000011100000000000000000 MASK_STATUS_DISABLED = 0x00100000, // 00000000000100000000000000000000 MASK_CHARACTERISTICS = 0x3FE00000, // 00111111111000000000000000000000 MASK_ICONMANAGER = 0xC0000000, // 11000000000000000000000000000000 MASK_BRANDORRESOURCEID = 0x0000FFFF, // 00000000000000001111111111111111 MASK_SUPPORT_ALL = 0xFFFFFFFF, MASK_NO_CONNECTIONOVERLAY= MASK_NETCON_SUBMEDIATYPE | MASK_NETCON_MEDIATYPE | MASK_CHARACTERISTICS | MASK_ICONMANAGER, MASK_STATUSOVERLAY = MASK_NETCON_SUBMEDIATYPE | MASK_NETCON_MEDIATYPE | MASK_CHARACTERISTICS | MASK_ICONMANAGER | MASK_STATUS | MASK_STATUS_DISABLED, }; enum ENUM_MEDIA_ICONSHIFT { SHIFT_NETCON_SUBMEDIATYPE = 0, SHIFT_NETCON_MEDIATYPE = 7, SHIFT_CONNECTION = 14, SHIFT_STATUS = 17, SHIFT_CHARACTERISTICS = 21, SHIFT_ICONMANAGER = 30 }; enum ENUM_ICON_MANAGER { ICO_MGR_INTERNAL = 0x1 << SHIFT_ICONMANAGER, ICO_MGR_CM = 0x2 << SHIFT_ICONMANAGER, ICO_MGR_RESOURCEID = 0x3 << SHIFT_ICONMANAGER }; enum ENUM_STAT_ICON { ICO_STAT_NONE = 0x0 << SHIFT_STATUS, ICO_STAT_FAULT = 0x1 << SHIFT_STATUS, ICO_STAT_INVALID_IP = 0x2 << SHIFT_STATUS, ICO_STAT_EAPOL_FAILED = 0x3 << SHIFT_STATUS, ICO_STAT_DISABLED = 0x8 << SHIFT_STATUS // Flag }; enum ENUM_CONNECTION_ICON { ICO_CONN_NONE = 0x0 << SHIFT_CONNECTION, ICO_CONN_BOTHOFF = 0x4 << SHIFT_CONNECTION, ICO_CONN_RIGHTON = 0x5 << SHIFT_CONNECTION, ICO_CONN_LEFTON = 0x6 << SHIFT_CONNECTION, ICO_CONN_BOTHON = 0x7 << SHIFT_CONNECTION, }; enum ENUM_CHARACTERISTICS_ICON { ICO_CHAR_INCOMING = 0x1 << SHIFT_CHARACTERISTICS, ICO_CHAR_DEFAULT = 0x2 << SHIFT_CHARACTERISTICS, ICO_CHAR_FIREWALLED = 0x4 << SHIFT_CHARACTERISTICS, ICO_CHAR_SHARED = 0x8 << SHIFT_CHARACTERISTICS }; class CNetConfigIcons; typedef map BrandedNames; typedef map IMAGELISTMAP; // CNetConfigIcons // The main icon manager for NetShell class CNetConfigIcons { private: CRITICAL_SECTION csNetConfigIcons; BOOL m_bInitialized; IMAGELISTMAP m_ImageLists; HINSTANCE m_hInstance; BrandedNames m_BrandedNames; DWORD dwLastBrandedId; HRESULT HrMergeTwoIcons(IN DWORD dwIconSize, IN OUT HICON *phMergedIcon, IN HICON hIconToMergeWith); HRESULT HrMergeCharacteristicsIcons(IN DWORD dwIconSize, IN DWORD dwIconId, IN OUT HICON *phMergedIcon); HRESULT HrGetBrandedIconFromIconId(IN DWORD dwIconSize, IN DWORD dwIconId, OUT HICON &hIcon); // Use destroyicon after HRESULT HrGetInternalIconFromIconId(IN DWORD dwIconSize, IN DWORD dwIconId, OUT HICON &hIcon); // Use destroyicon after HRESULT HrGetResourceIconFromIconId(IN DWORD dwIconSize, IN DWORD dwIconId, OUT HICON &hIcon); // Use destroyicon after HRESULT HrGetInternalIconIDForPIDL(IN UINT uFlags, IN const CConFoldEntry& cfe, OUT DWORD &dwIconId); // Use destroyicon after HRESULT HrGetBrandedIconIDForPIDL(IN UINT uFlags, IN const CConFoldEntry& cfe, OUT DWORD &dwIconId); // Use destroyicon after public: CNetConfigIcons(IN HINSTANCE hInstance) throw(); virtual ~CNetConfigIcons() throw(); // All external calls are thread safe. HRESULT HrGetIconIDForPIDL(IN UINT uFlags, IN const CConFoldEntry& cfe, OUT DWORD &dwIconId, OUT LPBOOL pfCanCache); HRESULT HrGetIconFromIconId(IN DWORD dwIconSize, IN DWORD dwIconId, OUT HICON &hIcon); // Use destroyicon after HRESULT HrUpdateSystemImageListForPIDL(IN const CConFoldEntry& cfe); HRESULT HrGetIconFromMediaType(IN DWORD dwIconSize, IN NETCON_MEDIATYPE ncm, IN NETCON_SUBMEDIATYPE ncsm, IN DWORD dwConnectionIcon, IN DWORD dwCharacteristics, OUT HICON *phIcon); }; extern CNetConfigIcons *g_pNetConfigIcons; extern const WCHAR c_szNetShellIcon[];