xref: /reactos/base/services/audiosrv/services.c (revision b819608e)
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 
11 BOOL
12 WaitForService(
13     SC_HANDLE hService,
14     ULONG RetryCount)
15 {
16     ULONG Index = 0;
17     DWORD dwSize;
18     SERVICE_STATUS_PROCESS Info;
19 
20     do
21     {
22         if (!QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, (LPBYTE)&Info, sizeof(SERVICE_STATUS_PROCESS), &dwSize))
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 
40 BOOL
41 StartAudioService(
42     SC_HANDLE hSCManager,
43     LPWSTR ServiceName,
44     ULONG RetryCount)
45 {
46     SC_HANDLE hService;
47     BOOL ret;
48 
49     hService = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS);
50 
51     if (!hService)
52     {
53         logmsg("Failed to open service %S %x\n", ServiceName, GetLastError());
54         return FALSE;
55     }
56 
57     if (!StartService(hService, 0, NULL))
58     {
59         logmsg("Failed to start service %S %x\n", ServiceName, GetLastError());
60         CloseServiceHandle(hService);
61         return FALSE;
62     }
63 
64     ret = WaitForService(hService, RetryCount);
65 
66     CloseServiceHandle(hService);
67     return ret;
68 }
69 
70 
71 
72 
73 BOOL
74 StartSystemAudioServices()
75 {
76     SC_HANDLE hSCManager;
77 
78     logmsg("Starting system audio services\n");
79 
80     hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
81     if (!hSCManager)
82     {
83         logmsg("Failed to open service manager %x\n", GetLastError());
84         return FALSE;
85     }
86 
87     logmsg("Starting sysaudio service\n");
88     StartAudioService(hSCManager, L"sysaudio", 20);
89     logmsg("Starting wdmaud service\n");
90     StartAudioService(hSCManager, L"wdmaud", 20);
91 
92     CloseServiceHandle(hSCManager);
93     return TRUE;
94 }
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106