ReactOS 0.4.15-dev-5666-gc548b97
services.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/services/audiosrv/services.c
5 * PURPOSE: Audio Service Plug and Play
6 * COPYRIGHT: Copyright 2009 Johannes Anderwald
7 */
8
9#include "audiosrv.h"
10
11BOOL
13 SC_HANDLE hService,
14 ULONG RetryCount)
15{
16 ULONG Index = 0;
19
20 do
21 {
23 {
24 logmsg("QueryServiceStatusEx failed %x\n", GetLastError());
25 break;
26 }
27
28 if (Info.dwCurrentState == SERVICE_RUNNING)
29 return TRUE;
30
31 Sleep(1000);
32
33 } while (Index++ < RetryCount);
34
35 logmsg("Timeout while waiting for service to become ready %p\n", hService);
36
37 return FALSE;
38}
39
40BOOL
42 SC_HANDLE hSCManager,
44 ULONG RetryCount)
45{
46 SC_HANDLE hService;
47 BOOL ret;
48
50 if (!hService)
51 {
52 logmsg("Failed to open service %S %x\n", ServiceName, GetLastError());
53 return FALSE;
54 }
55
56 if (!StartService(hService, 0, NULL))
57 {
58 logmsg("Failed to start service %S %x\n", ServiceName, GetLastError());
59 CloseServiceHandle(hService);
60 return FALSE;
61 }
62
63 ret = WaitForService(hService, RetryCount);
64
65 CloseServiceHandle(hService);
66 return ret;
67}
68
69BOOL
71{
72 SC_HANDLE hSCManager;
73
74 logmsg("Starting system audio services\n");
75
77 if (!hSCManager)
78 {
79 logmsg("Failed to open service manager %x\n", GetLastError());
80 return FALSE;
81 }
82
83 logmsg("Starting sysaudio service\n");
84 StartAudioService(hSCManager, L"sysaudio", 20);
85 logmsg("Starting wdmaud service\n");
86 StartAudioService(hSCManager, L"wdmaud", 20);
87
89 return TRUE;
90}
void logmsg(char *string,...)
Definition: debug.c:10
BOOL WaitForService(SC_HANDLE hService, ULONG RetryCount)
Definition: services.c:12
BOOL StartAudioService(SC_HANDLE hSCManager, LPWSTR ServiceName, ULONG RetryCount)
Definition: services.c:41
BOOL StartSystemAudioServices(VOID)
Definition: services.c:70
static WCHAR ServiceName[]
Definition: browser.c:19
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned int ULONG
Definition: retypes.h:1
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define L(x)
Definition: ntvdm.h:50
SC_HANDLE hSCManager
Definition: sc.c:12
BOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
Definition: scm.c:2835
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
Definition: scm.c:580
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
unsigned char * LPBYTE
Definition: typedefs.h:53
int ret
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_In_ WDFCOLLECTION _In_ ULONG Index
DWORD WINAPI GetLastError(void)
Definition: except.c:1040
#define OpenSCManager
Definition: winsvc.h:575
@ SC_STATUS_PROCESS_INFO
Definition: winsvc.h:119
#define SERVICE_ALL_ACCESS
Definition: winsvc.h:62
#define SC_MANAGER_CONNECT
Definition: winsvc.h:14
#define StartService
Definition: winsvc.h:585
#define SERVICE_RUNNING
Definition: winsvc.h:24
#define OpenService
Definition: winsvc.h:576
WCHAR * LPWSTR
Definition: xmlstorage.h:184