2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/mscutils/servman/propsheet_depends.c
5 * PURPOSE: Property dialog box message handler
6 * COPYRIGHT: Copyright 2006-2009 Ged Murphy <gedmurphy@reactos.org>
14 AddItemToTreeView(HWND hTreeView
,
20 TV_INSERTSTRUCT tvins
;
22 ZeroMemory(&tvi
, sizeof(tvi
));
23 ZeroMemory(&tvins
, sizeof(tvins
));
25 tvi
.mask
= TVIF_TEXT
| TVIF_SELECTEDIMAGE
| TVIF_IMAGE
;
26 tvi
.pszText
= lpLabel
;
27 tvi
.cchTextMax
= lstrlen(lpLabel
);
29 if (serviceType
== SERVICE_WIN32_OWN_PROCESS
||
30 serviceType
== SERVICE_WIN32_SHARE_PROCESS
)
33 tvi
.iSelectedImage
= 1;
35 else if (serviceType
== SERVICE_KERNEL_DRIVER
||
36 serviceType
== SERVICE_FILE_SYSTEM_DRIVER
)
39 tvi
.iSelectedImage
= 2;
44 tvi
.iSelectedImage
= 0;
48 tvins
.hParent
= hRoot
;
50 return TreeView_InsertItem(hTreeView
, &tvins
);
55 AddServiceDependency(PSERVICEPROPSHEET dlgInfo
,
62 LPQUERY_SERVICE_CONFIG lpServiceConfig
;
68 hService
= OpenService(hSCManager
,
70 SERVICE_QUERY_CONFIG
);
74 lpStr
= GetDependentServices(hService
);
79 hChild
= AddItemToTreeView(hTreeView
,
81 lpServiceConfig
->lpDisplayName
,
82 lpServiceConfig
->dwServiceType
);
85 AddServiceDependency(dlgInfo
,
98 if (TreeView_GetCount(hTreeView
) == 0)
100 if (AllocAndLoadString(&lpNoDepends
, hInstance
, IDS_NO_DEPENDS
))
105 AddItemToTreeView(hTreeView
,
110 HeapFree(ProcessHeap
,
114 EnableWindow(hTreeView
, FALSE
);
119 HeapFree(ProcessHeap
,
123 CloseServiceHandle(hService
);
130 AddServiceDependent(HWND hTreeView
,
132 SC_HANDLE hSCManager
,
133 LPTSTR lpServiceName
,
134 LPTSTR lpDisplayName
,
137 LPENUM_SERVICE_STATUS lpServiceStatus
;
138 SC_HANDLE hChildService
;
139 HTREEITEM hChildNode
;
144 hChildNode
= AddItemToTreeView(hTreeView
,
149 hChildService
= OpenService(hSCManager
,
151 SERVICE_QUERY_STATUS
| SERVICE_ENUMERATE_DEPENDENTS
);
154 lpServiceStatus
= GetServiceDependents(hChildService
, &count
);
157 for (i
= 0; i
< count
; i
++)
159 AddServiceDependent(hTreeView
,
162 lpServiceStatus
[i
].lpServiceName
,
163 lpServiceStatus
[i
].lpDisplayName
,
164 lpServiceStatus
[i
].ServiceStatus
.dwServiceType
);
167 HeapFree(ProcessHeap
,
172 CloseServiceHandle(hChildService
);
177 SetServiceDependents(HWND hTreeView
,
178 SC_HANDLE hSCManager
,
181 LPENUM_SERVICE_STATUS lpServiceStatus
;
185 lpServiceStatus
= GetServiceDependents(hService
, &count
);
188 for (i
= 0; i
< count
; i
++)
190 AddServiceDependent(hTreeView
,
193 lpServiceStatus
[i
].lpServiceName
,
194 lpServiceStatus
[i
].lpDisplayName
,
195 lpServiceStatus
[i
].ServiceStatus
.dwServiceType
);
200 AllocAndLoadString(&lpNoDepends
, hInstance
, IDS_NO_DEPENDS
);
202 AddItemToTreeView(hTreeView
,
207 HeapFree(ProcessHeap
,
211 EnableWindow(hTreeView
, FALSE
);
216 SetDependentServices(SC_HANDLE hService
)
221 InitDependPage(PSERVICEPROPSHEET dlgInfo
,
224 HWND hTreeView1
, hTreeView2
;
225 SC_HANDLE hSCManager
;
228 dlgInfo
->hDependsImageList
= InitImageList(IDI_NODEPENDS
,
230 GetSystemMetrics(SM_CXSMICON
),
231 GetSystemMetrics(SM_CXSMICON
),
235 hTreeView1
= GetDlgItem(hwndDlg
, IDC_DEPEND_TREE1
);
239 (void)TreeView_SetImageList(hTreeView1
,
240 dlgInfo
->hDependsImageList
,
243 hTreeView2
= GetDlgItem(hwndDlg
, IDC_DEPEND_TREE2
);
247 (void)TreeView_SetImageList(hTreeView2
,
248 dlgInfo
->hDependsImageList
,
251 hSCManager
= OpenSCManager(NULL
,
253 SC_MANAGER_ALL_ACCESS
);
256 hService
= OpenService(hSCManager
,
257 dlgInfo
->pService
->lpServiceName
,
258 SERVICE_QUERY_STATUS
| SERVICE_ENUMERATE_DEPENDENTS
| SERVICE_QUERY_CONFIG
);
261 /* Set the first tree view */
262 SetServiceDependents(hTreeView1
,
266 /* Set the second tree view */
267 SetDependentServices(hService
);
269 CloseServiceHandle(hService
);
272 CloseServiceHandle(hSCManager
);
280 * Dependancies Property dialog callback.
281 * Controls messages to the Dependancies dialog
284 DependenciesPageProc(HWND hwndDlg
,
289 PSERVICEPROPSHEET dlgInfo
;
291 /* Get the window context */
292 dlgInfo
= (PSERVICEPROPSHEET
)GetWindowLongPtr(hwndDlg
,
294 if (dlgInfo
== NULL
&& uMsg
!= WM_INITDIALOG
)
303 dlgInfo
= (PSERVICEPROPSHEET
)(((LPPROPSHEETPAGE
)lParam
)->lParam
);
306 SetWindowLongPtr(hwndDlg
,
310 InitDependPage(dlgInfo
, hwndDlg
);
316 switch(LOWORD(wParam
))