//================================================================= // // WinMsgEvent.h -- // // Copyright © Microsoft Corporation. All rights reserved. // //================================================================= #ifndef _WBEM_MESSAGE_EVENT_FORWARDER_H #define _WBEM_MESSAGE_EVENT_FORWARDER_H using namespace std; #define MSGWINDOWNAME TEXT("WinMsgEventProvider") // class POLARITY CAutoEvent { HANDLE m_hEvent ; public: CAutoEvent() { m_hEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); }; ~CAutoEvent() { CloseHandle( m_hEvent ); }; DWORD Wait( DWORD a_dwMillSec ) { return WaitForSingleObject( m_hEvent, a_dwMillSec ); }; BOOL Signal() { return SetEvent( m_hEvent ); }; }; // class POLARITY CWinMsgEvent { private: static CCritSec mg_csMapLock ; static CCritSec mg_csWindowLock ; static CAutoEvent mg_aeCreateWindow ; typedef std::multimap Sink_Map ; static Sink_Map mg_oSinkMap ; static HANDLE mg_hThreadPumpHandle ; static HWND mg_hWnd ; static void HandleEvent( DWORD a_dwPowerEvent, DWORD a_dwData ) ; static void CreateMsgProvider() ; static HWND CreateMsgWindow() ; static void DestroyMsgWindow() ; static void WindowsDispatch() ; static LRESULT CALLBACK MsgWndProc( IN HWND a_hWnd, IN UINT a_message, IN WPARAM a_wParam, IN LPARAM a_lParam ) ; static DWORD WINAPI dwThreadProc( LPVOID lpParameter ); static BOOL WINAPI CtrlHandlerRoutine( DWORD dwCtrlType ) ; protected: void RegisterForMessage( IN UINT a_message ) ; bool UnRegisterMessage( IN UINT a_message ) ; void UnRegisterAllMessages() ; public: CWinMsgEvent () ; ~CWinMsgEvent () ; enum E_ReturnAction { e_DefProc, // call DefWindowProc e_ReturnResult // return msg with WinMsgEvent() LRESULT }; virtual void WinMsgEvent( IN HWND a_hWnd, IN UINT a_message, IN WPARAM a_wParam, IN LPARAM a_lParam, OUT E_ReturnAction &eRetAction, OUT LRESULT &a_lResult ) = 0 ; }; #endif // _WBEM_MESSAGE_EVENT_FORWARDER_H