ReactOS 0.4.15-dev-8339-g4028de8
query.c File Reference
#include "precomp.h"
Include dependency graph for query.c:

Go to the source code of this file.

Functions

ENUM_SERVICE_STATUS_PROCESSGetSelectedService (PMAIN_WND_INFO Info)
 
LPQUERY_SERVICE_CONFIG GetServiceConfig (LPWSTR lpServiceName)
 
BOOL SetServiceConfig (LPQUERY_SERVICE_CONFIG pServiceConfig, LPWSTR lpServiceName, LPWSTR lpPassword)
 
LPWSTR GetServiceDescription (LPWSTR lpServiceName)
 
BOOL SetServiceDescription (LPWSTR lpServiceName, LPWSTR lpDescription)
 
VOID FreeServiceList (PMAIN_WND_INFO Info)
 
BOOL GetServiceList (PMAIN_WND_INFO Info)
 
BOOL UpdateServiceStatus (ENUM_SERVICE_STATUS_PROCESS *pService)
 

Function Documentation

◆ FreeServiceList()

VOID FreeServiceList ( PMAIN_WND_INFO  Info)

Definition at line 257 of file query.c.

258{
259 DWORD i;
260
261 if (Info->pAllServices != NULL)
262 {
263 for (i = 0; i < Info->NumServices; i++)
264 {
265 if (Info->pAllServices[i].lpServiceName)
266 HeapFree(ProcessHeap, 0, Info->pAllServices[i].lpServiceName);
267
268 if (Info->pAllServices[i].lpDisplayName)
269 HeapFree(ProcessHeap, 0, Info->pAllServices[i].lpDisplayName);
270 }
271
272 HeapFree(ProcessHeap, 0, Info->pAllServices);
273 Info->pAllServices = NULL;
274 Info->NumServices = 0;
275 }
276}
HANDLE ProcessHeap
Definition: servman.c:15
#define NULL
Definition: types.h:112
#define HeapFree(x, y, z)
Definition: compat.h:735
unsigned long DWORD
Definition: ntddk_ex.h:95
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
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690

Referenced by GetServiceList(), and MainWndProc().

◆ GetSelectedService()

ENUM_SERVICE_STATUS_PROCESS * GetSelectedService ( PMAIN_WND_INFO  Info)

Definition at line 13 of file query.c.

14{
15 LVITEM lvItem;
16
17 lvItem.mask = LVIF_PARAM;
18 lvItem.iItem = Info->SelectedItem;
19 SendMessage(Info->hListView,
21 0,
22 (LPARAM)&lvItem);
23
24 /* return pointer to selected service */
25 return (ENUM_SERVICE_STATUS_PROCESS *)lvItem.lParam;
26}
#define LVITEM
Definition: commctrl.h:2375
#define LVIF_PARAM
Definition: commctrl.h:2311
#define LVM_GETITEM
Definition: commctrl.h:2392
LONG_PTR LPARAM
Definition: windef.h:208
#define SendMessage
Definition: winuser.h:5852

Referenced by ListViewSelectionChanged().

◆ GetServiceConfig()

LPQUERY_SERVICE_CONFIG GetServiceConfig ( LPWSTR  lpServiceName)

Definition at line 29 of file query.c.

30{
31 LPQUERY_SERVICE_CONFIGW lpServiceConfig = NULL;
32 SC_HANDLE hSCManager;
33 SC_HANDLE hService;
34 DWORD dwBytesNeeded;
35
37 NULL,
39 if (hSCManager)
40 {
41 hService = OpenServiceW(hSCManager,
42 lpServiceName,
44 if (hService)
45 {
46 if (!QueryServiceConfigW(hService,
47 NULL,
48 0,
49 &dwBytesNeeded))
50 {
52 {
54 0,
55 dwBytesNeeded);
56 if (lpServiceConfig)
57 {
58 if (!QueryServiceConfigW(hService,
59 lpServiceConfig,
60 dwBytesNeeded,
61 &dwBytesNeeded))
62 {
64 0,
65 lpServiceConfig);
66 lpServiceConfig = NULL;
67 }
68 }
69 }
70 }
71
72 CloseServiceHandle(hService);
73 }
74
76 }
77
78 return lpServiceConfig;
79}
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
SC_HANDLE hSCManager
Definition: sc.c:12
SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName, LPCWSTR lpDatabaseName, DWORD dwDesiredAccess)
Definition: scm.c:2068
SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager, LPCWSTR lpServiceName, DWORD dwDesiredAccess)
Definition: scm.c:2160
BOOL WINAPI QueryServiceConfigW(SC_HANDLE hService, LPQUERY_SERVICE_CONFIGW lpServiceConfig, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
Definition: scm.c:2291
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:580
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define SC_MANAGER_CONNECT
Definition: winsvc.h:14
QUERY_SERVICE_CONFIGA * LPQUERY_SERVICE_CONFIG
Definition: winsvc.h:550
#define SERVICE_QUERY_CONFIG
Definition: winsvc.h:53

Referenced by AddServiceNamesToStop(), ChangeListViewText(), InitGeneralPage(), LogonPageProc(), SetButtonStates(), SetMenuAndButtonStates(), SetStartupType(), and TV1_AddDependantsToTree().

◆ GetServiceDescription()

LPWSTR GetServiceDescription ( LPWSTR  lpServiceName)

Definition at line 135 of file query.c.

136{
137 SC_HANDLE hSCManager = NULL;
138 SC_HANDLE hSc = NULL;
139 SERVICE_DESCRIPTIONW *pServiceDescription = NULL;
140 LPWSTR lpDescription = NULL;
141 DWORD BytesNeeded = 0;
143
145 NULL,
147 if (hSCManager == NULL)
148 {
149 GetError();
150 return NULL;
151 }
152
154 lpServiceName,
156 if (hSc)
157 {
158 if (!QueryServiceConfig2W(hSc,
160 NULL,
161 0,
162 &BytesNeeded))
163 {
165 {
166 pServiceDescription = (SERVICE_DESCRIPTION *) HeapAlloc(ProcessHeap,
167 0,
168 BytesNeeded);
169 if (pServiceDescription == NULL)
170 goto cleanup;
171
172 if (QueryServiceConfig2W(hSc,
174 (LPBYTE)pServiceDescription,
175 BytesNeeded,
176 &BytesNeeded))
177 {
178 if (pServiceDescription->lpDescription)
179 {
180 dwSize = wcslen(pServiceDescription->lpDescription) + 1;
181 lpDescription = HeapAlloc(ProcessHeap,
182 0,
183 dwSize * sizeof(WCHAR));
184 if (lpDescription)
185 {
186 StringCchCopyW(lpDescription,
187 dwSize,
188 pServiceDescription->lpDescription);
189 }
190 }
191 }
192 }
193 }
194 }
195
196cleanup:
197 if (pServiceDescription)
199 0,
200 pServiceDescription);
201 if (hSCManager != NULL)
203 if (hSc != NULL)
205
206 return lpDescription;
207}
VOID GetError(VOID)
Definition: misc.c:192
static void cleanup(void)
Definition: main.c:1335
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
BOOL WINAPI QueryServiceConfig2W(SC_HANDLE hService, DWORD dwInfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
Definition: scm.c:2491
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
unsigned char * LPBYTE
Definition: typedefs.h:53
#define SERVICE_CONFIG_DESCRIPTION
Definition: winsvc.h:65
#define SC_MANAGER_ENUMERATE_SERVICE
Definition: winsvc.h:16
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by ChangeListViewText(), DeleteDialogProc(), and InitGeneralPage().

◆ GetServiceList()

BOOL GetServiceList ( PMAIN_WND_INFO  Info)

Definition at line 279 of file query.c.

280{
282 SC_HANDLE ScHandle;
283 BOOL bRet = FALSE;
284
285 DWORD BytesNeeded = 0;
286 DWORD ResumeHandle = 0;
287 DWORD NumServices = 0;
288 DWORD i;
289
291
292 ScHandle = OpenSCManagerW(NULL,
293 NULL,
295 if (ScHandle != NULL)
296 {
297 if (!EnumServicesStatusEx(ScHandle,
301 NULL,
302 0,
303 &BytesNeeded,
304 &NumServices,
305 &ResumeHandle,
306 0))
307 {
308 /* Call function again if required size was returned */
310 {
311 /* reserve memory for service info array */
313 0,
314 BytesNeeded);
315 if (pServices)
316 {
317 /* fill array with service info */
318 if (EnumServicesStatusEx(ScHandle,
322 (LPBYTE)pServices,
323 BytesNeeded,
324 &BytesNeeded,
325 &NumServices,
326 &ResumeHandle,
327 0))
328 {
329 bRet = TRUE;
330 }
331 }
332 }
333 }
334 }
335
336 if (ScHandle)
337 CloseServiceHandle(ScHandle);
338
341 NumServices * sizeof(ENUM_SERVICE_STATUS_PROCESS));
342 if (Info->pAllServices != NULL)
343 {
344 Info->NumServices = NumServices;
345
346 for (i = 0; i < NumServices; i++)
347 {
348 Info->pAllServices[i].lpServiceName = HeapAlloc(ProcessHeap,
350 (wcslen(pServices[i].lpServiceName) + 1) * sizeof(WCHAR));
351 if (Info->pAllServices[i].lpServiceName)
352 wcscpy(Info->pAllServices[i].lpServiceName, pServices[i].lpServiceName);
353
354 Info->pAllServices[i].lpDisplayName = HeapAlloc(ProcessHeap,
356 (wcslen(pServices[i].lpDisplayName) + 1) * sizeof(WCHAR));
357 if (Info->pAllServices[i].lpDisplayName)
358 wcscpy(Info->pAllServices[i].lpDisplayName, pServices[i].lpDisplayName);
359
360 CopyMemory(&Info->pAllServices[i].ServiceStatusProcess,
361 &pServices[i].ServiceStatusProcess,
362 sizeof(SERVICE_STATUS_PROCESS));
363 }
364 }
365
366 if (pServices)
367 HeapFree(ProcessHeap, 0, pServices);
368
369 return bRet;
370}
VOID FreeServiceList(PMAIN_WND_INFO Info)
Definition: query.c:257
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
unsigned int BOOL
Definition: ntddk_ex.h:94
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_In_ LPCSTR _Out_writes_to_opt_ cchDisplayName LPSTR lpDisplayName
Definition: winbase.h:2790
#define CopyMemory
Definition: winbase.h:1710
#define SERVICE_STATE_ALL
Definition: winsvc.h:52
#define EnumServicesStatusEx
Definition: winsvc.h:572
@ SC_ENUM_PROCESS_INFO
Definition: winsvc.h:122
#define SERVICE_WIN32
Definition: cmtypes.h:964

Referenced by RefreshServiceList().

◆ SetServiceConfig()

BOOL SetServiceConfig ( LPQUERY_SERVICE_CONFIG  pServiceConfig,
LPWSTR  lpServiceName,
LPWSTR  lpPassword 
)

Definition at line 82 of file query.c.

85{
86 SC_HANDLE hSCManager;
87 SC_HANDLE hSc;
88 SC_LOCK scLock;
89 BOOL bRet = FALSE;
90
92 NULL,
94 if (hSCManager)
95 {
97 if (scLock)
98 {
100 lpServiceName,
102 if (hSc)
103 {
104 if (ChangeServiceConfigW(hSc,
105 pServiceConfig->dwServiceType,
106 pServiceConfig->dwStartType,
107 pServiceConfig->dwErrorControl,
108 pServiceConfig->lpBinaryPathName,
109 pServiceConfig->lpLoadOrderGroup,
110 pServiceConfig->dwTagId ? &pServiceConfig->dwTagId : NULL,
111 pServiceConfig->lpDependencies,
112 pServiceConfig->lpServiceStartName,
113 lpPassword,
114 pServiceConfig->lpDisplayName))
115 {
116 bRet = TRUE;
117 }
118
120 }
121
122 UnlockServiceDatabase(scLock);
123 }
124
126 }
127
128 if (!bRet)
129 GetError();
130
131 return bRet;
132}
BOOL WINAPI UnlockServiceDatabase(SC_LOCK ScLock)
Definition: scm.c:3018
BOOL WINAPI ChangeServiceConfigW(SC_HANDLE hService, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCWSTR lpBinaryPathName, LPCWSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCWSTR lpDependencies, LPCWSTR lpServiceStartName, LPCWSTR lpPassword, LPCWSTR lpDisplayName)
Definition: scm.c:482
SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE hSCManager)
Definition: scm.c:1958
LPSTR lpServiceStartName
Definition: winsvc.h:152
#define SC_MANAGER_LOCK
Definition: winsvc.h:17
#define SERVICE_CHANGE_CONFIG
Definition: winsvc.h:54

Referenced by SaveDlgInfo().

◆ SetServiceDescription()

BOOL SetServiceDescription ( LPWSTR  lpServiceName,
LPWSTR  lpDescription 
)

Definition at line 210 of file query.c.

212{
213 SC_HANDLE hSCManager;
214 SC_HANDLE hSc;
215 SC_LOCK scLock;
216 SERVICE_DESCRIPTION ServiceDescription;
217 BOOL bRet = FALSE;
218
220 NULL,
222 if (hSCManager)
223 {
225 if (scLock)
226 {
228 lpServiceName,
230 if (hSc)
231 {
232 ServiceDescription.lpDescription = lpDescription;
233
234 if (ChangeServiceConfig2W(hSc,
236 &ServiceDescription))
237 {
238 bRet = TRUE;
239 }
240
242 }
243
244 UnlockServiceDatabase(scLock);
245 }
246
248 }
249
250 if (!bRet)
251 GetError();
252
253 return bRet;
254}
BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE hService, DWORD dwInfoLevel, LPVOID lpInfo)
Definition: scm.c:305

Referenced by DoCreate(), and SaveDlgInfo().

◆ UpdateServiceStatus()

BOOL UpdateServiceStatus ( ENUM_SERVICE_STATUS_PROCESS pService)

Definition at line 373 of file query.c.

374{
375 SC_HANDLE hScm;
376 BOOL bRet = FALSE;
377
378 hScm = OpenSCManagerW(NULL,
379 NULL,
381 if (hScm != NULL)
382 {
383 SC_HANDLE hService;
384
385 hService = OpenServiceW(hScm,
386 pService->lpServiceName,
388 if (hService)
389 {
390 DWORD size;
391
392 QueryServiceStatusEx(hService,
394 (LPBYTE)&pService->ServiceStatusProcess,
396 &size);
397
398 CloseServiceHandle(hService);
399 bRet = TRUE;
400 }
401
402 CloseServiceHandle(hScm);
403 }
404
405 return bRet;
406}
GLsizeiptr size
Definition: glext.h:5919
BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
Definition: scm.c:2887
SERVICE_STATUS_PROCESS ServiceStatusProcess
Definition: winsvc.h:137
#define SERVICE_QUERY_STATUS
Definition: winsvc.h:55
@ SC_STATUS_PROCESS_INFO
Definition: winsvc.h:119

Referenced by GeneralPageProc(), and MainWndCommand().