Fixed a typo.
[reactos.git] / reactos / lib / advapi32 / service / scm.c
1 /* $Id: scm.c,v 1.6 2001/06/17 20:36:35 ea Exp $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/advapi32/service/scm.c
6 * PURPOSE: Service control manager functions
7 * PROGRAMMER: Emanuele Aliberti
8 * UPDATE HISTORY:
9 * 19990413 EA created
10 * 19990515 EA
11 */
12
13 /* INCLUDES ******************************************************************/
14
15 #include <windows.h>
16 #include <ddk/ntddk.h>
17
18 /* FUNCTIONS *****************************************************************/
19
20 /**********************************************************************
21 * ChangeServiceConfigA
22 */
23 BOOL
24 STDCALL
25 ChangeServiceConfigA(
26 SC_HANDLE hService,
27 DWORD dwServiceType,
28 DWORD dwStartType,
29 DWORD dwErrorControl,
30 LPCSTR lpBinaryPathName,
31 LPCSTR lpLoadOrderGroup,
32 LPDWORD lpdwTagId,
33 LPCSTR lpDependencies,
34 LPCSTR lpServiceStartName,
35 LPCSTR lpPassword,
36 LPCSTR lpDisplayName
37 )
38 {
39 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
40 return FALSE;
41 }
42
43
44 /**********************************************************************
45 * ChangeServiceConfigW
46 */
47 BOOL
48 STDCALL
49 ChangeServiceConfigW(
50 SC_HANDLE hService,
51 DWORD dwServiceType,
52 DWORD dwStartType,
53 DWORD dwErrorControl,
54 LPCWSTR lpBinaryPathName,
55 LPCWSTR lpLoadOrderGroup,
56 LPDWORD lpdwTagId,
57 LPCWSTR lpDependencies,
58 LPCWSTR lpServiceStartName,
59 LPCWSTR lpPassword,
60 LPCWSTR lpDisplayName
61 )
62 {
63 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
64 return FALSE;
65 }
66
67
68 /**********************************************************************
69 * CloseServiceHandle
70 */
71 BOOL
72 STDCALL
73 CloseServiceHandle( SC_HANDLE hSCObject )
74 {
75 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
76 return FALSE;
77 }
78
79
80 /**********************************************************************
81 * ControlService
82 */
83 BOOL
84 STDCALL
85 ControlService(
86 SC_HANDLE hService,
87 DWORD dwControl,
88 LPSERVICE_STATUS lpServiceStatus
89 )
90 {
91 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
92 return FALSE;
93 }
94
95
96 /**********************************************************************
97 * CreateServiceA
98 */
99 SC_HANDLE
100 STDCALL
101 CreateServiceA(
102 SC_HANDLE hSCManager,
103 LPCTSTR lpServiceName,
104 LPCTSTR lpDisplayName,
105 DWORD dwDesiredAccess,
106 DWORD dwServiceType,
107 DWORD dwStartType,
108 DWORD dwErrorControl,
109 LPCTSTR lpBinaryPathName,
110 LPCTSTR lpLoadOrderGroup,
111 LPDWORD lpdwTagId,
112 LPCTSTR lpDependencies,
113 LPCTSTR lpServiceStartName,
114 LPCTSTR lpPassword
115 )
116 {
117 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
118 return NULL;
119 }
120
121
122 /**********************************************************************
123 * CreateServiceW
124 */
125 SC_HANDLE
126 STDCALL
127 CreateServiceW(
128 SC_HANDLE hSCManager,
129 LPCWSTR lpServiceName,
130 LPCWSTR lpDisplayName,
131 DWORD dwDesiredAccess,
132 DWORD dwServiceType,
133 DWORD dwStartType,
134 DWORD dwErrorControl,
135 LPCWSTR lpBinaryPathName,
136 LPCWSTR lpLoadOrderGroup,
137 LPDWORD lpdwTagId,
138 LPCWSTR lpDependencies,
139 LPCWSTR lpServiceStartName,
140 LPCWSTR lpPassword
141 )
142 {
143 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
144 return NULL;
145 }
146
147
148 /**********************************************************************
149 * DeleteService
150 */
151 BOOL
152 STDCALL
153 DeleteService( SC_HANDLE hService )
154 {
155 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
156 return FALSE;
157 }
158
159
160 /**********************************************************************
161 * EnumDependentServicesA
162 */
163 BOOL
164 STDCALL
165 EnumDependentServicesA(
166 SC_HANDLE hService,
167 DWORD dwServiceState,
168 LPENUM_SERVICE_STATUSA lpServices,
169 DWORD cbBufSize,
170 LPDWORD pcbBytesNeeded,
171 LPDWORD lpServicesReturned
172 )
173 {
174 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
175 return FALSE;
176 }
177
178
179 /**********************************************************************
180 * EnumDependentServicesW
181 */
182 BOOL
183 STDCALL
184 EnumDependentServicesW(
185 SC_HANDLE hService,
186 DWORD dwServiceState,
187 LPENUM_SERVICE_STATUSW lpServices,
188 DWORD cbBufSize,
189 LPDWORD pcbBytesNeeded,
190 LPDWORD lpServicesReturned
191 )
192 {
193 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
194 return FALSE;
195 }
196
197
198 /**********************************************************************
199 * EnumServiceGroupW
200 *
201 * (unknown)
202 */
203 BOOL
204 STDCALL
205 EnumServiceGroupW (
206 DWORD Unknown0,
207 DWORD Unknown1,
208 DWORD Unknown2,
209 DWORD Unknown3,
210 DWORD Unknown4,
211 DWORD Unknown5,
212 DWORD Unknown6,
213 DWORD Unknown7,
214 DWORD Unknown8
215 )
216 {
217 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
218 return FALSE;
219 }
220
221
222 /**********************************************************************
223 * EnumServicesStatusA
224 */
225 BOOL
226 STDCALL
227 EnumServicesStatusA (
228 SC_HANDLE hSCManager,
229 DWORD dwServiceType,
230 DWORD dwServiceState,
231 LPENUM_SERVICE_STATUSA lpServices,
232 DWORD cbBufSize,
233 LPDWORD pcbBytesNeeded,
234 LPDWORD lpServicesReturned,
235 LPDWORD lpResumeHandle
236 )
237 {
238 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
239 return FALSE;
240 }
241
242
243 /**********************************************************************
244 * EnumServicesStatusExA
245 */
246 BOOL
247 STDCALL
248 EnumServicesStatusExA(VOID)
249 {
250 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
251 return FALSE;
252 }
253
254
255 /**********************************************************************
256 * EnumServicesStatusExW
257 */
258 BOOL
259 STDCALL
260 EnumServicesStatusExW(VOID)
261 {
262 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
263 return FALSE;
264 }
265
266
267 /**********************************************************************
268 * EnumServicesStatusW
269 */
270 BOOL
271 STDCALL
272 EnumServicesStatusW(
273 SC_HANDLE hSCManager,
274 DWORD dwServiceType,
275 DWORD dwServiceState,
276 LPENUM_SERVICE_STATUSW lpServices,
277 DWORD cbBufSize,
278 LPDWORD pcbBytesNeeded,
279 LPDWORD lpServicesReturned,
280 LPDWORD lpResumeHandle
281 )
282 {
283 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
284 return FALSE;
285 }
286
287
288 /**********************************************************************
289 * GetServiceDisplayNameA
290 */
291 BOOL
292 STDCALL
293 GetServiceDisplayNameA(
294 SC_HANDLE hSCManager,
295 LPCSTR lpServiceName,
296 LPSTR lpDisplayName,
297 LPDWORD lpcchBuffer
298 )
299 {
300 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
301 return FALSE;
302 }
303
304
305 /**********************************************************************
306 * GetServiceDisplayNameW
307 */
308 BOOL
309 STDCALL
310 GetServiceDisplayNameW(
311 SC_HANDLE hSCManager,
312 LPCWSTR lpServiceName,
313 LPWSTR lpDisplayName,
314 LPDWORD lpcchBuffer
315 )
316 {
317 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
318 return FALSE;
319 }
320
321
322 /**********************************************************************
323 * GetServiceKeyNameA
324 */
325 BOOL
326 STDCALL
327 GetServiceKeyNameA(
328 SC_HANDLE hSCManager,
329 LPCSTR lpDisplayName,
330 LPSTR lpServiceName,
331 LPDWORD lpcchBuffer
332 )
333 {
334 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
335 return FALSE;
336 }
337
338
339 /**********************************************************************
340 * GetServiceKeyNameW
341 */
342 BOOL
343 STDCALL
344 GetServiceKeyNameW(
345 SC_HANDLE hSCManager,
346 LPCWSTR lpDisplayName,
347 LPWSTR lpServiceName,
348 LPDWORD lpcchBuffer
349 )
350 {
351 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
352 return FALSE;
353 }
354
355 /**********************************************************************
356 * LockServiceDatabase
357 */
358 SC_LOCK
359 STDCALL
360 LockServiceDatabase(
361 SC_HANDLE hSCManager
362 )
363 {
364 SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
365 return NULL;
366 }
367
368
369 /**********************************************************************
370 * OpenSCManagerA
371 */
372 SC_HANDLE STDCALL OpenSCManagerA(LPCSTR lpMachineName,
373 LPCSTR lpDatabaseName,
374 DWORD dwDesiredAccess)
375 {
376 SC_HANDLE h;
377 UNICODE_STRING MachineNameW;
378 UNICODE_STRING DatabaseNameW;
379 ANSI_STRING MachineNameA;
380 ANSI_STRING DatabaseNameA;
381
382 RtlInitAnsiString(&MachineNameA, lpMachineName);
383 RtlAnsiStringToUnicodeString(&MachineNameW,
384 &MachineNameA,
385 TRUE);
386 RtlInitAnsiString(&DatabaseNameA, lpDatabaseName);
387 RtlAnsiStringToUnicodeString(&DatabaseNameW,
388 &DatabaseNameA,
389 TRUE);
390
391 h = OpenSCManagerW(MachineNameW.Buffer,
392 DatabaseNameW.Buffer,
393 dwDesiredAccess);
394
395 RtlFreeHeap(GetProcessHeap(),
396 0,
397 MachineNameW.Buffer);
398 RtlFreeHeap(GetProcessHeap(),
399 0,
400 DatabaseNameW.Buffer);
401
402 return(h);
403 }
404
405
406 /**********************************************************************
407 * OpenSCManagerW
408 */
409 SC_HANDLE STDCALL OpenSCManagerW(LPCWSTR lpMachineName,
410 LPCWSTR lpDatabaseName,
411 DWORD dwDesiredAccess)
412 {
413 HANDLE h;
414
415 if (lpMachineName == NULL ||
416 wcslen(lpMachineName) == 0)
417 {
418 if (lpDatabaseName != NULL &&
419 wcscmp(lpDatabaseName, SERVICES_ACTIVE_DATABASEW) != 0)
420 {
421 return(NULL);
422 }
423
424 h = CreateFile(L"\\\\.\\pipe\\ntsrvctrl",
425 dwDesiredAccess,
426 0,
427 NULL,
428 OPEN_EXISTING,
429 0,
430 NULL);
431 if (h == INVALID_HANDLE_VALUE)
432 {
433 return(NULL);
434 }
435
436 return(h);
437 }
438 else
439 {
440 return(NULL);
441 }
442 }
443
444
445 /**********************************************************************
446 * OpenServiceA
447 */
448 SC_HANDLE
449 STDCALL
450 OpenServiceA(
451 SC_HANDLE hSCManager,
452 LPCSTR lpServiceName,
453 DWORD dwDesiredAccess
454 )
455 {
456 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
457 return NULL;
458 }
459
460
461 /**********************************************************************
462 * OpenServiceW
463 */
464 SC_HANDLE
465 STDCALL
466 OpenServiceW(
467 SC_HANDLE hSCManager,
468 LPCWSTR lpServiceName,
469 DWORD dwDesiredAccess
470 )
471 {
472 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
473 return NULL;
474 }
475
476
477 /**********************************************************************
478 * PrivilegedServiceAuditAlarmA
479 */
480 BOOL
481 STDCALL
482 PrivilegedServiceAuditAlarmA(
483 LPCSTR SubsystemName,
484 LPCSTR ServiceName,
485 HANDLE ClientToken,
486 PPRIVILEGE_SET Privileges,
487 BOOL AccessGranted
488 )
489 {
490 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
491 return FALSE;
492 }
493
494
495 /**********************************************************************
496 * PrivilegedServiceAuditAlarmW
497 */
498 BOOL
499 STDCALL
500 PrivilegedServiceAuditAlarmW(
501 LPCWSTR SubsystemName,
502 LPCWSTR ServiceName,
503 HANDLE ClientToken,
504 PPRIVILEGE_SET Privileges,
505 BOOL AccessGranted
506 )
507 {
508 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
509 return 1;
510 }
511
512
513 /**********************************************************************
514 * QueryServiceConfigA
515 */
516 BOOL
517 STDCALL
518 QueryServiceConfigA(
519 SC_HANDLE hService,
520 LPQUERY_SERVICE_CONFIGA lpServiceConfig,
521 DWORD cbBufSize,
522 LPDWORD pcbBytesNeeded
523 )
524 {
525 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
526 return FALSE;
527 }
528
529
530 /**********************************************************************
531 * QueryServiceConfigW
532 */
533 BOOL
534 STDCALL
535 QueryServiceConfigW(
536 SC_HANDLE hService,
537 LPQUERY_SERVICE_CONFIGW lpServiceConfig,
538 DWORD cbBufSize,
539 LPDWORD pcbBytesNeeded
540 )
541 {
542 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
543 return FALSE;
544 }
545
546
547 /**********************************************************************
548 * QueryServiceLockStatusA
549 */
550 BOOL
551 STDCALL
552 QueryServiceLockStatusA(
553 SC_HANDLE hSCManager,
554 LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus,
555 DWORD cbBufSize,
556 LPDWORD pcbBytesNeeded
557 )
558 {
559 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
560 return FALSE;
561 }
562
563
564 /**********************************************************************
565 * QueryServiceLockStatusW
566 */
567 BOOL
568 STDCALL
569 QueryServiceLockStatusW(
570 SC_HANDLE hSCManager,
571 LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus,
572 DWORD cbBufSize,
573 LPDWORD pcbBytesNeeded
574 )
575 {
576 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
577 return FALSE;
578 }
579
580
581 /**********************************************************************
582 * QueryServiceObjectSecurity
583 */
584 BOOL
585 STDCALL
586 QueryServiceObjectSecurity(
587 SC_HANDLE hService,
588 SECURITY_INFORMATION dwSecurityInformation,
589 PSECURITY_DESCRIPTOR lpSecurityDescriptor,
590 DWORD cbBufSize,
591 LPDWORD pcbBytesNeeded
592 )
593 {
594 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
595 return FALSE;
596 }
597
598
599 /**********************************************************************
600 * QueryServiceStatus
601 */
602 BOOL
603 STDCALL
604 QueryServiceStatus(
605 SC_HANDLE hService,
606 LPSERVICE_STATUS lpServiceStatus
607 )
608 {
609 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
610 return FALSE;
611 }
612
613
614 /**********************************************************************
615 * QueryServiceStatusEx
616 */
617 BOOL
618 STDCALL
619 QueryServiceStatusEx(VOID)
620 {
621 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
622 return FALSE;
623 }
624
625
626 /**********************************************************************
627 * StartServiceA
628 */
629 BOOL
630 STDCALL
631 StartServiceA(
632 SC_HANDLE hService,
633 DWORD dwNumServiceArgs,
634 LPCSTR *lpServiceArgVectors
635 )
636 {
637 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
638 return FALSE;
639 }
640
641
642
643
644 /**********************************************************************
645 * StartServiceW
646 */
647 BOOL
648 STDCALL
649 StartServiceW(
650 SC_HANDLE hService,
651 DWORD dwNumServiceArgs,
652 LPCWSTR *lpServiceArgVectors
653 )
654 {
655 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
656 return FALSE;
657 }
658
659
660 /**********************************************************************
661 * UnlockServiceDatabase
662 */
663 BOOL
664 STDCALL
665 UnlockServiceDatabase(
666 SC_LOCK ScLock
667 )
668 {
669 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
670 return FALSE;
671 }
672
673
674 /* EOF */