3 //#define WIN32_LEAN_AND_MEAN
5 #include <windowsx.h> /* GET_X/Y_LPARAM */
13 #pragma warning(disable : 4100)
16 #define NO_ITEM_SELECTED -1
17 #define MAX_KEY_LENGTH 256
25 #define IMAGE_UNKNOWN 0
26 #define IMAGE_SERVICE 1
27 #define IMAGE_DRIVER 2
29 typedef struct _MAIN_WND_INFO
38 ENUM_SERVICE_STATUS_PROCESS
*pAllServices
;
39 ENUM_SERVICE_STATUS_PROCESS
*pCurrentService
;
41 INT SelectedItem
;/* selection number in the list view */
48 } MAIN_WND_INFO
, *PMAIN_WND_INFO
;
51 INT_PTR CALLBACK
AboutDialogProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
);
52 INT_PTR CALLBACK
CreateDialogProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
);
53 INT_PTR CALLBACK
DeleteDialogProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
);
54 INT_PTR CALLBACK
ProgressDialogProc(HWND hDlg
, UINT Message
, WPARAM wParam
, LPARAM lParam
);
58 extern HINSTANCE hInstance
;
59 extern HANDLE ProcessHeap
;
62 typedef struct _MENU_HINT
66 } MENU_HINT
, *PMENU_HINT
;
68 VOID
SetMenuAndButtonStates(PMAIN_WND_INFO Info
);
69 VOID
UpdateServiceCount(PMAIN_WND_INFO Info
);
70 VOID
ChangeListViewText(PMAIN_WND_INFO Info
, ENUM_SERVICE_STATUS_PROCESS
* pService
, UINT Column
);
71 BOOL
InitMainWindowImpl(VOID
);
72 VOID
UninitMainWindowImpl(VOID
);
73 HWND
CreateMainWindow(LPCTSTR lpCaption
, int nCmdShow
);
76 VOID
SetListViewStyle(HWND hListView
, DWORD View
);
77 VOID
ListViewSelectionChanged(PMAIN_WND_INFO Info
, LPNMLISTVIEW pnmv
);
78 BOOL
CreateListView(PMAIN_WND_INFO Info
);
81 BOOL
DoStart(PMAIN_WND_INFO Info
);
84 typedef struct _STOP_INFO
88 SC_HANDLE hMainService
;
89 } STOP_INFO
, *PSTOP_INFO
;
92 BOOL
Control(PMAIN_WND_INFO Info
, HWND hProgress
, DWORD Control
);
93 BOOL
DoStop(PMAIN_WND_INFO Info
);
94 BOOL
DoPause(PMAIN_WND_INFO Info
);
95 BOOL
DoResume(PMAIN_WND_INFO Info
);
98 #define DEFAULT_STEP 0
99 HWND
CreateProgressDialog(HWND hParent
, UINT LabelId
);
100 BOOL
DestroyProgressDialog(HWND hProgress
, BOOL bComplete
);
101 VOID
InitializeProgressDialog(HWND hProgress
, LPWSTR lpServiceName
);
102 VOID
IncrementProgressBar(HWND hProgress
, UINT NewPos
);
103 VOID
CompleteProgressBar(HWND hProgress
);
106 ENUM_SERVICE_STATUS_PROCESS
* GetSelectedService(PMAIN_WND_INFO Info
);
107 LPQUERY_SERVICE_CONFIG
GetServiceConfig(LPTSTR lpServiceName
);
108 BOOL
SetServiceConfig(LPQUERY_SERVICE_CONFIG pServiceConfig
, LPTSTR lpServiceName
, LPTSTR lpPassword
);
109 LPTSTR
GetServiceDescription(LPTSTR lpServiceName
);
110 BOOL
SetServiceDescription(LPTSTR lpServiceName
, LPTSTR lpDescription
);
111 LPTSTR
GetExecutablePath(LPTSTR lpServiceName
);
112 BOOL
RefreshServiceList(PMAIN_WND_INFO Info
);
113 BOOL
UpdateServiceStatus(ENUM_SERVICE_STATUS_PROCESS
* pService
);
114 BOOL
GetServiceList(PMAIN_WND_INFO Info
, DWORD
*NumServices
);
118 typedef struct _SERVICEPROPSHEET
121 ENUM_SERVICE_STATUS_PROCESS
*pService
;
122 HIMAGELIST hDependsImageList
;
124 HWND hDependsTreeView1
;
125 HWND hDependsTreeView2
;
126 } SERVICEPROPSHEET
, *PSERVICEPROPSHEET
;
129 HTREEITEM
AddItemToTreeView(HWND hTreeView
, HTREEITEM hRoot
, LPTSTR lpDisplayName
, LPTSTR lpServiceName
, ULONG serviceType
, BOOL bHasChildren
);
131 /* stop_dependencies */
132 INT_PTR CALLBACK
StopDependsDialogProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
);
133 LPWSTR
GetListOfServicesToStop(LPWSTR lpServiceName
);
135 /* tv1_dependencies */
136 BOOL
TV1_Initialize(PSERVICEPROPSHEET pDlgInfo
, LPTSTR lpServiceName
);
137 VOID
TV1_AddDependantsToTree(PSERVICEPROPSHEET pDlgInfo
, HTREEITEM hParent
, LPTSTR lpServiceName
);
139 /* tv2_dependencies */
140 BOOL
TV2_Initialize(PSERVICEPROPSHEET pDlgInfo
, LPTSTR lpServiceName
);
141 VOID
TV2_AddDependantsToTree(PSERVICEPROPSHEET pDlgInfo
, HTREEITEM hParent
, LPTSTR lpServiceName
);
142 BOOL
TV2_HasDependantServices(LPWSTR lpServiceName
);
143 LPENUM_SERVICE_STATUS
TV2_GetDependants(LPWSTR lpServiceName
, LPDWORD lpdwCount
);
145 LONG APIENTRY
OpenPropSheet(PMAIN_WND_INFO Info
);
147 /* propsheet window procs */
148 INT_PTR CALLBACK
DependenciesPageProc(HWND hwndDlg
,
152 INT_PTR CALLBACK
GeneralPageProc(HWND hwndDlg
,
158 VOID
ExportFile(PMAIN_WND_INFO Info
);
161 INT
AllocAndLoadString(OUT LPTSTR
*lpTarget
,
164 DWORD
LoadAndFormatString(IN HINSTANCE hInstance
,
166 OUT LPTSTR
*lpTarget
,
168 BOOL
StatusBarLoadAndFormatString(IN HWND hStatusBar
,
170 IN HINSTANCE hInstance
,
173 BOOL
StatusBarLoadString(IN HWND hStatusBar
,
175 IN HINSTANCE hInstance
,
177 INT
GetTextFromEdit(OUT LPTSTR lpString
,
181 VOID
DisplayString(PTCHAR
);
182 HIMAGELIST
InitImageList(UINT StartResource
,