////////////////////////////////////////////////////////////////////////////// // // CCallbackList.hpp // Win32::Daemon Perl extension callback list class header file // // Copyright (c) 1998-2008 Dave Roth // Courtesy of Roth Consulting // http://www.roth.net/ // // This file may be copied or modified only under the terms of either // the Artistic License or the GNU General Public License, which may // be found in the Perl 5.0 source kit. // // 2008.03.24 :Date // 20080324 :Version ////////////////////////////////////////////////////////////////////////////// #ifndef _CCALLBACKLIST_H_ #define _CCALLBACKLIST_H_ #include "CONSTANT.h" // Define a unique value to identify the callback "running" // timer. This is the ID we pass into CCallbackTimer class to manage // the Win32 timer. #define CALLBACK_TIMER_ID 0x0101 #define CALLBACK_TIMER SERVICE_CONTROL_TIMER // Our own definition #define CALLBACK_START SERVICE_CONTROL_START // Our own definition #define CALLBACK_STOP SERVICE_CONTROL_STOP #define CALLBACK_PAUSE SERVICE_CONTROL_PAUSE #define CALLBACK_CONTINUE SERVICE_CONTROL_CONTINUE #define CALLBACK_INTERROGATE SERVICE_CONTROL_INTERROGATE #define CALLBACK_SHUTDOWN SERVICE_CONTROL_SHUTDOWN #define CALLBACK_PARAMCHANGE SERVICE_CONTROL_PARAMCHANGE #define CALLBACK_NETBINDADD SERVICE_CONTROL_NETBINDADD #define CALLBACK_NETBINDREMOVE SERVICE_CONTROL_NETBINDREMOVE #define CALLBACK_NETBINDENABLE SERVICE_CONTROL_NETBINDENABLE #define CALLBACK_NETBINDDISABLE SERVICE_CONTROL_NETBINDDISABLE #define CALLBACK_DEVICEEVENT SERVICE_CONTROL_DEVICEEVENT #define CALLBACK_HARDWAREPROFILECHANGE SERVICE_CONTROL_HARDWAREPROFILECHANGE #define CALLBACK_POWEREVENT SERVICE_CONTROL_POWEREVENT #define CALLBACK_SESSIONCHANGE SERVICE_CONTROL_SESSIONCHANGE #ifdef SERVICE_CONTROL_PRESHUTDOWN #define CALLBACK_PRESHUTDOWN SERVICE_CONTROL_PRESHUTDOWN #endif // SERVICE_CONTROL_PRESHUTDOWN #define CALLBACK_TIMER_INDEX 0x00 #define CALLBACK_START_INDEX 0x01 #define CALLBACK_STOP_INDEX 0x02 #define CALLBACK_PAUSE_INDEX 0x03 #define CALLBACK_CONTINUE_INDEX 0x04 #define CALLBACK_INTERROGATE_INDEX 0x05 #define CALLBACK_SHUTDOWN_INDEX 0x06 #define CALLBACK_PARAMCHANGE_INDEX 0x07 #define CALLBACK_NETBINDADD_INDEX 0x08 #define CALLBACK_NETBINDREMOVE_INDEX 0x09 #define CALLBACK_NETBINDENABLE_INDEX 0x0a #define CALLBACK_NETBINDDISABLE_INDEX 0x0b #define CALLBACK_DEVICEEVENT_INDEX 0x0c #define CALLBACK_HARDWAREPROFILECHANGE_INDEX 0x0d #define CALLBACK_POWEREVENT_INDEX 0x0e #define CALLBACK_SESSIONCHANGE_INDEX 0x0f #define CALLBACK_PRESHUTDOWN_INDEX 0x10 #define CALLBACK_USERDEFINED_INDEX 0x11 #define CALLBACK_RUNNING_INDEX 0x12 // Next one is the total (non zero based index) of callback entries. // This is used to create an array to hold all of these callback // pointers. #define TOTAL_CALLBACK 0x13 #define CALLBACK_USER_DEFINED SERVICE_CONTROL_USER_DEFINED // Our own definition #define CALLBACK_RUNNING SERVICE_CONTROL_RUNNING // Our own definition // Control callback function names #define CALLBACK_NAME_TIMER TEXT( "timer" ) #define CALLBACK_NAME_START TEXT( "start" ) #define CALLBACK_NAME_STOP TEXT( "stop" ) #define CALLBACK_NAME_PAUSE TEXT( "pause" ) #define CALLBACK_NAME_CONTINUE TEXT( "continue" ) #define CALLBACK_NAME_INTERROGATE TEXT( "interrogate" ) #define CALLBACK_NAME_SHUTDOWN TEXT( "shutdown" ) #define CALLBACK_NAME_PARAMCHANGE TEXT( "param_change" ) #define CALLBACK_NAME_NETBINDADD TEXT( "net_bind_add" ) #define CALLBACK_NAME_NETBINDREMOVE TEXT( "net_bind_remove" ) #define CALLBACK_NAME_NETBINDENABLE TEXT( "net_bind_enable" ) #define CALLBACK_NAME_NETBINDDISABLE TEXT( "net_bind_disable" ) #define CALLBACK_NAME_DEVICEEVENT TEXT( "device_event" ) #define CALLBACK_NAME_HARDWAREPROFILECHANGE TEXT( "hardware_profile_change" ) #define CALLBACK_NAME_POWEREVENT TEXT( "power_event" ) #define CALLBACK_NAME_SESSIONCHANGE TEXT( "session_change" ) #ifdef SERVICE_CONTROL_PRESHUTDOWN #define CALLBACK_NAME_PRESHUTDOWN TEXT( "preshutdown" ) #endif // SERVICE_CONTROL_PRESHUTDOWN // Control callback function names for misc stuff... #define CALLBACK_NAME_USER_DEFINED TEXT( "user_defined" ) #define CALLBACK_NAME_RUNNING TEXT( "running" ) class CCallbackList { public: CCallbackList(); ~CCallbackList(); PVOID Get( DWORD dwCommand ); BOOL Set( DWORD dwCommand, PVOID pCallbackRoutine ); DWORD GetCount(); private: DWORD GetCallbackIndex( DWORD dwCommand ); PVOID m_pSvList[TOTAL_CALLBACK]; DWORD m_dwCount; }; #endif // _CCALLBACKLIST_H_