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 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 69 BOOL 70 StartSystemAudioServices(VOID) 71 { 72 SC_HANDLE hSCManager; 73 74 logmsg("Starting system audio services\n"); 75 76 hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); 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 88 CloseServiceHandle(hSCManager); 89 return TRUE; 90 } 91