Author: gedmurphy Date: Thu Aug 30 16:27:11 2007 New Revision: 28670
URL: http://svn.reactos.org/svn/reactos?rev=28670&view=rev Log: - implement setting the service description - fix deleting of a service
Modified: trunk/reactos/base/applications/mscutils/servman/create.c trunk/reactos/base/applications/mscutils/servman/delete.c trunk/reactos/base/applications/mscutils/servman/precomp.h trunk/reactos/base/applications/mscutils/servman/query.c trunk/reactos/base/applications/mscutils/servman/servman.c
Modified: trunk/reactos/base/applications/mscutils/servman/create.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/servman/create.c (original) +++ trunk/reactos/base/applications/mscutils/servman/create.c Thu Aug 30 16:27:11 2007 @@ -60,10 +60,10 @@ return FALSE; }
- /* Set the service description in the registry - * CreateService does not do this for us */ - //SetDescription(Data->ServiceName, - // Data->Description); + /* Set the service description as CreateService + does not do this for us */ + SetServiceDescription(Data->ServiceName, + Data->Description);
/* report success to user */ LoadString(hInstance,
Modified: trunk/reactos/base/applications/mscutils/servman/delete.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/servman/delete.c (original) +++ trunk/reactos/base/applications/mscutils/servman/delete.c Thu Aug 30 16:27:11 2007 @@ -1,9 +1,9 @@ /* * PROJECT: ReactOS Services * LICENSE: GPL - See COPYING in the top level directory - * FILE: base/system/servman/delete.c + * FILE: base/applications/mscutils/servman/delete.c * PURPOSE: Delete an existing service - * COPYRIGHT: Copyright 2006 Ged Murphy gedmurphy@gmail.com + * COPYRIGHT: Copyright 2006-2007 Ged Murphy gedmurphy@reactos.org * */
@@ -15,42 +15,30 @@ { SC_HANDLE hSCManager; SC_HANDLE hSc; + BOOL bRet = FALSE;
- /* open handle to the SCM */ hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - if (hSCManager == NULL) + if (hSCManager) { - GetError(); - return FALSE; + hSc = OpenService(hSCManager, + Info->pCurrentService->lpServiceName, + DELETE); + if (hSc) + { + if (DeleteService(hSc)) + { + bRet = TRUE; + } + + CloseServiceHandle(hSc); + } + + CloseServiceHandle(hSCManager); }
- /* get a handle to the service requested for deleting */ - hSc = OpenService(hSCManager, - Info->pCurrentService->lpServiceName, - DELETE); - if (hSc == NULL) - { - GetError(); - CloseServiceHandle(hSCManager); - return FALSE; - } - - /* delete the service opened */ - if (! DeleteService(hSc)) - { - GetError(); - CloseServiceHandle(hSCManager); - CloseServiceHandle(hSc); - return FALSE; - } - - - CloseServiceHandle(hSCManager); - CloseServiceHandle(hSc); - - return TRUE; + return bRet; }
@@ -62,53 +50,66 @@ { PMAIN_WND_INFO Info = NULL; HICON hIcon = NULL; - TCHAR Buf[1000]; - LVITEM item; + + /* Get the window context */ + Info = (PMAIN_WND_INFO)GetWindowLongPtr(hDlg, + GWLP_USERDATA); + if (Info == NULL && message != WM_INITDIALOG) + { + return FALSE; + }
switch (message) { case WM_INITDIALOG: { + LPTSTR lpDescription; + Info = (PMAIN_WND_INFO)lParam; + if (Info != NULL) + { + SetWindowLongPtr(hDlg, + GWLP_USERDATA, + (LONG_PTR)Info);
- hIcon = (HICON) LoadImage(hInstance, - MAKEINTRESOURCE(IDI_SM_ICON), - IMAGE_ICON, - 16, - 16, - 0); + hIcon = (HICON)LoadImage(hInstance, + MAKEINTRESOURCE(IDI_SM_ICON), + IMAGE_ICON, + 16, + 16, + 0); + if (hIcon) + { + SendMessage(hDlg, + WM_SETICON, + ICON_SMALL, + (LPARAM)hIcon); + DestroyIcon(hIcon); + }
- SendMessage(hDlg, - WM_SETICON, - ICON_SMALL, - (LPARAM)hIcon); + SendDlgItemMessage(hDlg, + IDC_DEL_NAME, + WM_SETTEXT, + 0, + (LPARAM)Info->pCurrentService->lpDisplayName);
- SendDlgItemMessage(hDlg, - IDC_DEL_NAME, - WM_SETTEXT, - 0, - (LPARAM)Info->pCurrentService->lpDisplayName); + lpDescription = GetServiceDescription(Info->pCurrentService->lpServiceName); + if (lpDescription) + { + SendDlgItemMessage(hDlg, + IDC_DEL_DESC, + WM_SETTEXT, + 0, + (LPARAM)lpDescription); + HeapFree(ProcessHeap, + 0, + lpDescription); + }
+ return TRUE; + }
- item.mask = LVIF_TEXT; - item.iItem = Info->SelectedItem; - item.iSubItem = 1; - item.pszText = Buf; - item.cchTextMax = sizeof(Buf); - SendMessage(Info->hListView, - LVM_GETITEM, - 0, - (LPARAM)&item); - - SendDlgItemMessage(hDlg, - IDC_DEL_DESC, - WM_SETTEXT, - 0, - (LPARAM)Buf); - - SetFocus(GetDlgItem(hDlg, IDCANCEL)); - - return TRUE; + return FALSE; }
case WM_COMMAND: @@ -120,8 +121,6 @@ if (DoDeleteService(Info, hDlg)) (void)ListView_DeleteItem(Info->hListView, Info->SelectedItem); - - DestroyIcon(hIcon); EndDialog(hDlg, LOWORD(wParam)); return TRUE; @@ -129,7 +128,6 @@
case IDCANCEL: { - DestroyIcon(hIcon); EndDialog(hDlg, LOWORD(wParam)); return TRUE;
Modified: trunk/reactos/base/applications/mscutils/servman/precomp.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/servman/precomp.h (original) +++ trunk/reactos/base/applications/mscutils/servman/precomp.h Thu Aug 30 16:27:11 2007 @@ -88,6 +88,7 @@ LPQUERY_SERVICE_CONFIG GetServiceConfig(LPTSTR lpServiceName); BOOL SetServiceConfig(LPQUERY_SERVICE_CONFIG pServiceConfig, LPTSTR lpServiceName, LPTSTR lpPassword); LPTSTR GetServiceDescription(LPTSTR lpServiceName); +BOOL SetServiceDescription(LPTSTR lpServiceName, LPTSTR lpDescription); LPTSTR GetExecutablePath(LPTSTR lpServiceName); BOOL RefreshServiceList(PMAIN_WND_INFO Info); BOOL UpdateServiceStatus(ENUM_SERVICE_STATUS_PROCESS* pService);
Modified: trunk/reactos/base/applications/mscutils/servman/query.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/servman/query.c (original) +++ trunk/reactos/base/applications/mscutils/servman/query.c Thu Aug 30 16:27:11 2007 @@ -210,6 +210,53 @@ return lpDescription; }
+ +BOOL +SetServiceDescription(LPTSTR lpServiceName, + LPTSTR lpDescription) +{ + SC_HANDLE hSCManager; + SC_HANDLE hSc; + SC_LOCK scLock; + SERVICE_DESCRIPTION ServiceDescription; + BOOL bRet = FALSE; + + hSCManager = OpenSCManager(NULL, + NULL, + SC_MANAGER_LOCK); + if (hSCManager) + { + scLock = LockServiceDatabase(hSCManager); + if (scLock) + { + hSc = OpenService(hSCManager, + lpServiceName, + SERVICE_CHANGE_CONFIG); + if (hSc) + { + ServiceDescription.lpDescription = lpDescription; + + if (ChangeServiceConfig2(hSc, + SERVICE_CONFIG_DESCRIPTION, + &ServiceDescription)) + { + bRet = TRUE; + } + + CloseServiceHandle(hSc); + } + + UnlockServiceDatabase(scLock); + } + + CloseServiceHandle(hSCManager); + } + + if (!bRet) + GetError(); + + return bRet; +}
BOOL
Modified: trunk/reactos/base/applications/mscutils/servman/servman.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/servman/servman.c (original) +++ trunk/reactos/base/applications/mscutils/servman/servman.c Thu Aug 30 16:27:11 2007 @@ -64,6 +64,3 @@
return Ret; } - - -