ReactOS  0.4.13-dev-259-g5ca9c9c
propsheet_general.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Services
3  * LICENSE: GPL - See COPYING in the top level directory
4  * FILE: base/applications/mscutils/servman/propsheet_general.c
5  * PURPOSE: Property dialog box message handler
6  * COPYRIGHT: Copyright 2006-2009 Ged Murphy <gedmurphy@reactos.org>
7  *
8  */
9 
10 #include "precomp.h"
11 
12 
13 typedef struct _PAGEDATA
14 {
21 
22 
23 static VOID
25  HWND hwndDlg)
26 {
27  HWND hButton;
28  LPQUERY_SERVICE_CONFIG lpServiceConfig;
29  DWORD Flags, State;
30  UINT i;
31 
34 
35  for (i = IDC_START; i <= IDC_RESUME; i++)
36  {
37  hButton = GetDlgItem(hwndDlg, i);
38  EnableWindow (hButton, FALSE);
39  }
40 
41  lpServiceConfig = GetServiceConfig(dlgInfo->pService->lpServiceName);
42  if (State == SERVICE_STOPPED &&
43  lpServiceConfig && lpServiceConfig->dwStartType != SERVICE_DISABLED)
44  {
45  hButton = GetDlgItem(hwndDlg, IDC_START);
46  EnableWindow (hButton, TRUE);
47  }
48  else if ( (Flags & SERVICE_ACCEPT_STOP) && (State == SERVICE_RUNNING) )
49  {
50  hButton = GetDlgItem(hwndDlg, IDC_STOP);
51  EnableWindow (hButton, TRUE);
52  }
54  {
55  hButton = GetDlgItem(hwndDlg, IDC_PAUSE);
56  EnableWindow (hButton, TRUE);
57  }
58 
59  hButton = GetDlgItem(hwndDlg, IDC_START_PARAM);
60  EnableWindow(hButton, (State == SERVICE_STOPPED && lpServiceConfig && lpServiceConfig->dwStartType != SERVICE_DISABLED));
61 
62  if (lpServiceConfig)
63  HeapFree(GetProcessHeap(), 0, lpServiceConfig);
64 
65  /* set the main toolbar */
66  SetMenuAndButtonStates(dlgInfo->Info);
67 }
68 
69 static VOID
71  HWND hwndDlg)
72 {
73  LPWSTR lpStatus;
74  UINT id;
75 
77  {
79  }
80  else
81  {
83  }
84 
85  if (AllocAndLoadString(&lpStatus,
86  hInstance,
87  id))
88  {
89  SendDlgItemMessageW(hwndDlg,
91  WM_SETTEXT,
92  0,
93  (LPARAM)lpStatus);
94  LocalFree(lpStatus);
95  }
96 }
97 
98 /*
99  * Fills the 'startup type' combo box with possible
100  * values and sets it to value of the selected item
101  */
102 static VOID
103 SetStartupType(LPWSTR lpServiceName,
104  HWND hwndDlg)
105 {
106  HWND hList;
107  LPQUERY_SERVICE_CONFIG pServiceConfig;
108  LPWSTR lpBuf;
109  DWORD StartUp = 0;
110  UINT i;
111 
112  hList = GetDlgItem(hwndDlg, IDC_START_TYPE);
113 
114  for (i = IDS_SERVICES_AUTO; i <= IDS_SERVICES_DIS; i++)
115  {
116  if (AllocAndLoadString(&lpBuf,
117  hInstance,
118  i))
119  {
121  CB_ADDSTRING,
122  0,
123  (LPARAM)lpBuf);
124  LocalFree(lpBuf);
125  }
126  }
127 
128  pServiceConfig = GetServiceConfig(lpServiceName);
129 
130  if (pServiceConfig)
131  {
132  switch (pServiceConfig->dwStartType)
133  {
134  case SERVICE_AUTO_START: StartUp = 0; break;
135  case SERVICE_DEMAND_START: StartUp = 1; break;
136  case SERVICE_DISABLED: StartUp = 2; break;
137  }
138 
140  CB_SETCURSEL,
141  StartUp,
142  0);
143 
145  0,
146  pServiceConfig);
147  }
148 }
149 
150 /*
151  * Populates the General Properties dialog with
152  * the relevant service information
153  */
154 static VOID
156  HWND hwndDlg)
157 {
158  LPQUERY_SERVICE_CONFIG pServiceConfig;
159  LPWSTR lpDescription;
160 
161  /* set the service name */
162  SendDlgItemMessageW(hwndDlg,
164  WM_SETTEXT,
165  0,
166  (LPARAM)dlgInfo->pService->lpServiceName);
167 
168  /* set the display name */
169  SendDlgItemMessageW(hwndDlg,
171  WM_SETTEXT,
172  0,
173  (LPARAM)dlgInfo->pService->lpDisplayName);
174 
175  /* set the description */
176  if ((lpDescription = GetServiceDescription(dlgInfo->pService->lpServiceName)))
177  {
178  SendDlgItemMessageW(hwndDlg,
180  WM_SETTEXT,
181  0,
182  (LPARAM)lpDescription);
183 
185  0,
186  lpDescription);
187  }
188 
189  pServiceConfig = GetServiceConfig(dlgInfo->pService->lpServiceName);
190  if (pServiceConfig)
191  {
192  SendDlgItemMessageW(hwndDlg,
193  IDC_EXEPATH,
194  WM_SETTEXT,
195  0,
196  (LPARAM)pServiceConfig->lpBinaryPathName);
198  0,
199  pServiceConfig);
200  }
201 
202 
203  /* set startup type */
204  SetStartupType(dlgInfo->pService->lpServiceName, hwndDlg);
205 
206  SetServiceStatusText(dlgInfo,
207  hwndDlg);
208 
209  if (dlgInfo->Info->bIsUserAnAdmin)
210  {
211  EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), TRUE);
212  }
213 }
214 
215 VOID
217  HWND hwndDlg)
218 {
219  LPQUERY_SERVICE_CONFIG pServiceConfig = NULL;
220  PWSTR pDisplayName = NULL;
221  PWSTR pDescription;
222  INT nLength;
223  DWORD StartUp;
224 
225  pServiceConfig = HeapAlloc(ProcessHeap,
227  sizeof(*pServiceConfig));
228  if (pServiceConfig)
229  {
230  pServiceConfig->dwServiceType = SERVICE_NO_CHANGE;
231  pServiceConfig->dwErrorControl = SERVICE_NO_CHANGE;
232  pServiceConfig->dwStartType = SERVICE_NO_CHANGE;
233 
234  if (pPageData->bStartTypeChanged)
235  {
236  StartUp = SendDlgItemMessageW(hwndDlg, IDC_START_TYPE, CB_GETCURSEL, 0, 0);
237  switch (StartUp)
238  {
239  case 0:
240  pServiceConfig->dwStartType = SERVICE_AUTO_START;
241  break;
242 
243  case 1:
244  pServiceConfig->dwStartType = SERVICE_DEMAND_START;
245  break;
246  case 2:
247  pServiceConfig->dwStartType = SERVICE_DISABLED;
248  break;
249  }
250  }
251 
252  if (pPageData->bBinaryPathChanged)
253  {
255  pServiceConfig->lpBinaryPathName = HeapAlloc(ProcessHeap,
257  (nLength + 1) * sizeof(WCHAR));
258  if (pServiceConfig->lpBinaryPathName != NULL)
259  SendDlgItemMessageW(hwndDlg, IDC_EXEPATH, WM_GETTEXT, nLength + 1, (LPARAM)pServiceConfig->lpBinaryPathName);
260  }
261 
262  if (pPageData->bDisplayNameChanged)
263  {
265  pDisplayName = HeapAlloc(ProcessHeap,
267  (nLength + 1) * sizeof(WCHAR));
268  if (pDisplayName != NULL)
269  {
270  SendDlgItemMessageW(hwndDlg, IDC_DISP_NAME, WM_GETTEXT, nLength + 1, (LPARAM)pDisplayName);
271 
272  if (pPageData->dlgInfo->pService->lpDisplayName)
274 
275  pPageData->dlgInfo->pService->lpDisplayName = pDisplayName;
276  pServiceConfig->lpDisplayName = pDisplayName;
277  }
278  }
279 
280  if (SetServiceConfig(pServiceConfig,
281  pPageData->dlgInfo->pService->lpServiceName,
282  NULL))
283  {
284  if (pPageData->bDisplayNameChanged)
285  ChangeListViewText(pPageData->dlgInfo->Info,
286  pPageData->dlgInfo->pService,
287  LVNAME);
288 
289  if (pPageData->bStartTypeChanged)
290  ChangeListViewText(pPageData->dlgInfo->Info,
291  pPageData->dlgInfo->pService,
292  LVSTARTUP);
293  }
294 
295  if (pServiceConfig->lpBinaryPathName != NULL)
296  HeapFree(ProcessHeap, 0, pServiceConfig->lpBinaryPathName);
297 
298  HeapFree(ProcessHeap, 0, pServiceConfig);
299  }
300 
301  if (pPageData->bDescriptionChanged)
302  {
304  pDescription = HeapAlloc(ProcessHeap, HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR));
305  if (pDescription != NULL)
306  {
307  SendDlgItemMessageW(hwndDlg, IDC_DESCRIPTION, WM_GETTEXT, nLength + 1, (LPARAM)pDescription);
308 
310  pDescription))
311  {
312  ChangeListViewText(pPageData->dlgInfo->Info,
313  pPageData->dlgInfo->pService,
314  LVDESC);
315  }
316 
317  HeapFree(ProcessHeap, 0, pDescription);
318  }
319  }
320 }
321 
322 /*
323  * General Property dialog callback.
324  * Controls messages to the General dialog
325  */
328  UINT uMsg,
329  WPARAM wParam,
330  LPARAM lParam)
331 {
332  PPAGEDATA pPageData;
333 
334  /* Get the window context */
335  pPageData = (PPAGEDATA)GetWindowLongPtr(hwndDlg,
336  GWLP_USERDATA);
337  if (pPageData == NULL && uMsg != WM_INITDIALOG)
338  {
339  return FALSE;
340  }
341 
342  switch (uMsg)
343  {
344  case WM_INITDIALOG:
345  pPageData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(PAGEDATA));
346  if (pPageData != NULL)
347  {
348  SetWindowLongPtr(hwndDlg,
350  (LONG_PTR)pPageData);
351 
352  pPageData->dlgInfo = (PSERVICEPROPSHEET)(((LPPROPSHEETPAGE)lParam)->lParam);
353  if (pPageData->dlgInfo != NULL)
354  {
355  InitGeneralPage(pPageData->dlgInfo, hwndDlg);
356  SetButtonStates(pPageData->dlgInfo, hwndDlg);
357  }
358  }
359  break;
360 
361  case WM_DESTROY:
362  HeapFree(GetProcessHeap(), 0, pPageData);
363  break;
364 
365  case WM_COMMAND:
366  switch(LOWORD(wParam))
367  {
368  case IDC_START_TYPE:
369  if (HIWORD(wParam) == CBN_SELCHANGE)
370  {
371  pPageData->bStartTypeChanged = TRUE;
372  PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
373  }
374  break;
375 
376  case IDC_DISP_NAME:
377  if (HIWORD(wParam) == EN_CHANGE)
378  {
379  pPageData->bDisplayNameChanged = TRUE;
380  PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
381  }
382  break;
383 
384  case IDC_DESCRIPTION:
385  if (HIWORD(wParam) == EN_CHANGE)
386  {
387  pPageData->bDescriptionChanged = TRUE;
388  PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
389  }
390  break;
391 
392  case IDC_EXEPATH:
393  if (HIWORD(wParam) == EN_CHANGE)
394  {
395  pPageData->bBinaryPathChanged = TRUE;
396  PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
397  }
398  break;
399 
400  case IDC_START:
401  {
402  WCHAR szStartParams[256];
403  LPWSTR lpStartParams = NULL;
404 
405  if (GetDlgItemText(hwndDlg, IDC_START_PARAM, szStartParams, 256) > 0)
406  lpStartParams = szStartParams;
407 
409 
410  RunActionWithProgress(hwndDlg,
411  pPageData->dlgInfo->pService->lpServiceName,
412  pPageData->dlgInfo->pService->lpDisplayName,
413  ACTION_START,
414  lpStartParams);
415 
416  UpdateServiceStatus(pPageData->dlgInfo->pService);
417  ChangeListViewText(pPageData->dlgInfo->Info, pPageData->dlgInfo->pService, LVSTATUS);
418  SetButtonStates(pPageData->dlgInfo, hwndDlg);
419  SetServiceStatusText(pPageData->dlgInfo, hwndDlg);
420  break;
421  }
422 
423  case IDC_STOP:
424  RunActionWithProgress(hwndDlg,
425  pPageData->dlgInfo->pService->lpServiceName,
426  pPageData->dlgInfo->pService->lpDisplayName,
427  ACTION_STOP,
428  NULL);
429 
430  UpdateServiceStatus(pPageData->dlgInfo->pService);
431  ChangeListViewText(pPageData->dlgInfo->Info, pPageData->dlgInfo->pService, LVSTATUS);
432  SetButtonStates(pPageData->dlgInfo, hwndDlg);
433  SetServiceStatusText(pPageData->dlgInfo, hwndDlg);
434  break;
435 
436  case IDC_PAUSE:
437  RunActionWithProgress(hwndDlg,
438  pPageData->dlgInfo->pService->lpServiceName,
439  pPageData->dlgInfo->pService->lpDisplayName,
440  ACTION_PAUSE,
441  NULL);
442 
443  UpdateServiceStatus(pPageData->dlgInfo->pService);
444  ChangeListViewText(pPageData->dlgInfo->Info, pPageData->dlgInfo->pService, LVSTATUS);
445  SetButtonStates(pPageData->dlgInfo, hwndDlg);
446  SetServiceStatusText(pPageData->dlgInfo, hwndDlg);
447  break;
448 
449  case IDC_RESUME:
450  RunActionWithProgress(hwndDlg,
451  pPageData->dlgInfo->pService->lpServiceName,
452  pPageData->dlgInfo->pService->lpDisplayName,
454  NULL);
455 
456  UpdateServiceStatus(pPageData->dlgInfo->pService);
457  ChangeListViewText(pPageData->dlgInfo->Info, pPageData->dlgInfo->pService, LVSTATUS);
458  SetButtonStates(pPageData->dlgInfo, hwndDlg);
459  SetServiceStatusText(pPageData->dlgInfo, hwndDlg);
460  break;
461 
462  case IDC_EDIT:
467  break;
468  }
469  break;
470 
471  case WM_NOTIFY:
472  switch (((LPNMHDR)lParam)->code)
473  {
474  case PSN_APPLY:
475  if (pPageData->bDisplayNameChanged ||
476  pPageData->bDescriptionChanged ||
477  pPageData->bBinaryPathChanged ||
478  pPageData->bStartTypeChanged)
479  {
480  SaveDlgInfo(pPageData, hwndDlg);
481  SetButtonStates(pPageData->dlgInfo, hwndDlg);
482  pPageData->bDisplayNameChanged = FALSE;
483  pPageData->bDescriptionChanged = FALSE;
484  pPageData->bBinaryPathChanged = FALSE;
485  pPageData->bStartTypeChanged = FALSE;
486  }
487  break;
488  }
489  break;
490  }
491 
492  return FALSE;
493 }
#define WM_GETTEXTLENGTH
Definition: winuser.h:1601
#define IDC_START_TYPE
Definition: resource.h:133
struct _PAGEDATA * PPAGEDATA
#define TRUE
Definition: types.h:120
#define LVSTARTUP
Definition: precomp.h:30
LPWSTR GetServiceDescription(LPWSTR lpServiceName)
Definition: query.c:135
#define ACTION_START
Definition: precomp.h:37
#define IDC_SERV_NAME
Definition: resource.h:129
#define EM_SETREADONLY
Definition: winuser.h:1976
uint16_t * PWSTR
Definition: typedefs.h:54
#define WM_GETTEXT
Definition: winuser.h:1600
static VOID SetServiceStatusText(PSERVICEPROPSHEET dlgInfo, HWND hwndDlg)
#define ACTION_STOP
Definition: precomp.h:38
BOOL bDescriptionChanged
BOOL RunActionWithProgress(HWND hParent, LPWSTR ServiceName, LPWSTR DisplayName, UINT Action, PVOID Param)
Definition: progress.c:322
#define SERVICE_ACCEPT_STOP
Definition: winsvc.h:28
#define CALLBACK
Definition: compat.h:27
_In_ DWORD nLength
Definition: wincon.h:461
PSERVICEPROPSHEET dlgInfo
BOOL SetServiceDescription(LPWSTR lpServiceName, LPWSTR lpDescription)
Definition: query.c:210
UINT_PTR WPARAM
Definition: windef.h:207
#define SendDlgItemMessage
Definition: winuser.h:5708
#define PSN_APPLY
Definition: prsht.h:117
BOOL bDisplayNameChanged
int32_t INT_PTR
Definition: typedefs.h:62
#define IDC_PAUSE
Definition: resource.h:75
static INT AllocAndLoadString(OUT LPTSTR *lpTarget, IN HINSTANCE hInst, IN UINT uID)
Definition: misc.c:60
int32_t INT
Definition: typedefs.h:56
#define SetWindowLongPtr
Definition: treelist.c:70
#define CB_GETCURSEL
Definition: winuser.h:1904
WPARAM wParam
Definition: combotst.c:138
#define SERVICE_NO_CHANGE
Definition: winsvc.h:20
#define IDC_START
Definition: resource.h:137
#define SERVICE_DISABLED
Definition: cmtypes.h:977
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HINSTANCE hInstance
Definition: charmap.c:20
#define SERVICE_STOPPED
Definition: winsvc.h:21
unsigned int BOOL
Definition: ntddk_ex.h:94
#define LVSTATUS
Definition: precomp.h:29
#define SERVICE_RUNNING
Definition: winsvc.h:24
#define IDC_STOP
Definition: resource.h:69
#define GWLP_USERDATA
Definition: treelist.c:63
BOOL bBinaryPathChanged
#define CB_ADDSTRING
Definition: winuser.h:1897
#define LPPROPSHEETPAGE
Definition: prsht.h:372
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define ACTION_RESUME
Definition: precomp.h:40
#define SERVICE_ACCEPT_PAUSE_CONTINUE
Definition: winsvc.h:29
#define WM_SETTEXT
Definition: winuser.h:1599
#define WM_DESTROY
Definition: winuser.h:1591
struct _PAGEDATA PAGEDATA
#define IDS_SERVICES_DIS
Definition: resource.h:63
#define GetDlgItemText
Definition: winuser.h:5651
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDS_SERVICES_STARTED
Definition: resource.h:59
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define PropSheet_Changed(d, w)
Definition: prsht.h:326
#define IDC_DISP_NAME
Definition: resource.h:130
#define IDC_DESCRIPTION
Definition: resource.h:131
unsigned long DWORD
Definition: ntddk_ex.h:95
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static VOID SetButtonStates(PSERVICEPROPSHEET dlgInfo, HWND hwndDlg)
LPQUERY_SERVICE_CONFIG GetServiceConfig(LPWSTR lpServiceName)
Definition: query.c:29
BOOL bStartTypeChanged
#define CB_SETCURSEL
Definition: winuser.h:1922
#define WM_COMMAND
Definition: winuser.h:1716
#define IDC_START_PARAM
Definition: resource.h:135
HANDLE ProcessHeap
Definition: servman.c:15
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
BOOL bIsUserAnAdmin
Definition: precomp.h:66
HWND hList
Definition: livecd.c:10
#define ACTION_PAUSE
Definition: precomp.h:39
BOOL SetServiceConfig(LPQUERY_SERVICE_CONFIG pServiceConfig, LPWSTR lpServiceName, LPWSTR lpPassword)
Definition: query.c:82
HWND WINAPI GetParent(_In_ HWND)
VOID ChangeListViewText(PMAIN_WND_INFO Info, ENUM_SERVICE_STATUS_PROCESS *pService, UINT Column)
Definition: listview.c:105
#define LVDESC
Definition: precomp.h:28
enum State_ State
Definition: pofuncs.h:54
BOOL UpdateServiceStatus(ENUM_SERVICE_STATUS_PROCESS *pService)
Definition: query.c:373
ENUM_SERVICE_STATUS_PROCESS * pService
Definition: precomp.h:130
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IDC_RESUME
Definition: resource.h:140
#define IDC_EDIT
Definition: resource.h:136
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define CBN_SELCHANGE
Definition: winuser.h:1940
VOID SetMenuAndButtonStates(PMAIN_WND_INFO Info)
Definition: mainwnd.c:151
#define IDC_SERV_STATUS
Definition: resource.h:134
#define SERVICE_AUTO_START
Definition: cmtypes.h:975
#define HIWORD(l)
Definition: typedefs.h:246
GLenum GLuint id
Definition: glext.h:5579
#define IDC_EXEPATH
Definition: resource.h:132
#define GetWindowLongPtr
Definition: treelist.c:73
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define SERVICE_DEMAND_START
Definition: cmtypes.h:976
struct _SERVICEPROPSHEET * PSERVICEPROPSHEET
SERVICE_STATUS_PROCESS ServiceStatusProcess
Definition: winsvc.h:137
#define IDS_SERVICES_AUTO
Definition: resource.h:61
#define WM_INITDIALOG
Definition: winuser.h:1715
static VOID InitGeneralPage(PSERVICEPROPSHEET dlgInfo, HWND hwndDlg)
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
PMAIN_WND_INFO Info
Definition: precomp.h:129
#define LVNAME
Definition: precomp.h:27
#define HeapFree(x, y, z)
Definition: compat.h:394
VOID SaveDlgInfo(PPAGEDATA pPageData, HWND hwndDlg)
#define WM_NOTIFY
Definition: richedit.h:61
#define IDS_SERVICES_STOPPED
Definition: resource.h:60
static VOID SetStartupType(LPWSTR lpServiceName, HWND hwndDlg)
#define EN_CHANGE
Definition: winuser.h:1983