2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/mscutils/servman/create.c
5 * PURPOSE: Create a new service
6 * COPYRIGHT: Copyright 2006-2007 Ged Murphy <gedmurphy@reactos.org>
12 typedef struct _CREATE_DATA
21 } CREATE_DATA
, *PCREATE_DATA
;
23 static BOOL bHelpOpen
= FALSE
;
26 DoCreate(PCREATE_DATA Data
)
32 /* open handle to the SCM */
33 hSCManager
= OpenSCManager(NULL
,
35 SC_MANAGER_ALL_ACCESS
);
38 hSc
= CreateService(hSCManager
,
42 SERVICE_WIN32_OWN_PROCESS
,
56 /* Set the service description as CreateService
57 does not do this for us */
58 SetServiceDescription(Data
->ServiceName
,
61 /* report success to user */
62 if (AllocAndLoadString(&lpSuccess
,
66 DisplayString(lpSuccess
);
71 CloseServiceHandle(hSc
);
75 CloseServiceHandle(hSCManager
);
82 GetStringFromDialog(PCREATE_DATA Data
,
86 LPTSTR lpString
= NULL
;
89 hwnd
= GetDlgItem(Data
->hSelf
,
93 iLen
= GetWindowTextLength(hwnd
);
96 lpString
= (LPTSTR
)HeapAlloc(ProcessHeap
,
98 (iLen
+ 1) * sizeof(TCHAR
));
112 GetDataFromDialog(PCREATE_DATA Data
)
116 if ((Data
->ServiceName
= GetStringFromDialog(Data
, IDC_CREATE_SERVNAME
)))
118 if ((Data
->DisplayName
= GetStringFromDialog(Data
, IDC_CREATE_DISPNAME
)))
120 if ((Data
->BinPath
= GetStringFromDialog(Data
, IDC_CREATE_PATH
)))
122 Data
->Description
= GetStringFromDialog(Data
, IDC_CREATE_DESC
);
123 Data
->Options
= GetStringFromDialog(Data
, IDC_CREATE_OPTIONS
);
134 FreeMemory(PCREATE_DATA Data
)
136 if (Data
->ServiceName
!= NULL
)
137 HeapFree(ProcessHeap
,
140 if (Data
->DisplayName
!= NULL
)
141 HeapFree(ProcessHeap
,
144 if (Data
->BinPath
!= NULL
)
145 HeapFree(ProcessHeap
,
148 if (Data
->Description
!= NULL
)
149 HeapFree(ProcessHeap
,
152 if (Data
->Options
!= NULL
)
153 HeapFree(ProcessHeap
,
157 HeapFree(ProcessHeap
,
163 CreateHelpDialogProc(HWND hDlg
,
176 hIcon
= (HICON
) LoadImage(hInstance
,
177 MAKEINTRESOURCE(IDI_SM_ICON
),
188 hHelp
= GetDlgItem(hDlg
,
191 LoadString(hInstance
,
194 sizeof(Buf
) / sizeof(TCHAR
));
204 if ((LOWORD(wParam
) == IDOK
) || (LOWORD(wParam
) == IDCANCEL
))
219 CreateDialogProc(HWND hDlg
,
230 hIcon
= (HICON
)LoadImage(hInstance
,
231 MAKEINTRESOURCE(IDI_SM_ICON
),
250 switch (LOWORD(wParam
))
256 Data
= (PCREATE_DATA
)HeapAlloc(ProcessHeap
,
258 sizeof(CREATE_DATA
));
263 if (GetDataFromDialog(Data
))
269 /* Something went wrong, leave the dialog
270 * open so they can try again */
296 hHelp
= CreateDialog(hInstance
,
297 MAKEINTRESOURCE(IDD_DLG_HELP_OPTIONS
),
299 CreateHelpDialogProc
);