- Check if allocation succeeded

- Wait untill each audio service has been started
- May now fix randomly playing logon sound

svn path=/trunk/; revision=42611
This commit is contained in:
Johannes Anderwald 2009-08-11 10:37:40 +00:00
parent ca039fbfa9
commit fb04896e11
2 changed files with 73 additions and 32 deletions

View file

@ -61,6 +61,12 @@ ProcessExistingDevices()
0,
length);
if ( ! detail_data )
{
logmsg("ProcessExistingDevices() failed to allocate detail_data\n");
return TRUE;
}
while (
SetupDiEnumDeviceInterfaces(dev_info,
NULL,

View file

@ -17,51 +17,86 @@
#include <audiosrv/audiosrv.h>
#include "audiosrv.h"
BOOL
WaitForService(
SC_HANDLE hService,
ULONG RetryCount)
{
ULONG Index = 0;
DWORD dwSize;
SERVICE_STATUS_PROCESS Info;
do
{
if (!QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, (LPBYTE)&Info, sizeof(SERVICE_STATUS_PROCESS), &dwSize))
{
logmsg("QueryServiceStatusEx failed %x\n", GetLastError());
break;
}
if (Info.dwCurrentState == SERVICE_RUNNING)
return TRUE;
Sleep(1000);
}while(Index++ < RetryCount);
logmsg("Timeout while waiting for service to become ready %p\n", hService);
return FALSE;
}
BOOL
StartAudioService(
SC_HANDLE hSCManager,
LPWSTR ServiceName,
ULONG RetryCount)
{
SC_HANDLE hService;
BOOL ret;
hService = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS);
if (!hService)
{
logmsg("Failed to open service %S %x\n", ServiceName, GetLastError());
return FALSE;
}
if (!StartService(hService, 0, NULL))
{
logmsg("Failed to start service %S %x\n", ServiceName, GetLastError());
CloseServiceHandle(hService);
return FALSE;
}
ret = WaitForService(hService, RetryCount);
CloseServiceHandle(hService);
return ret;
}
BOOL
StartSystemAudioServices()
{
SC_HANDLE hSCManager, hService;
SC_HANDLE hSCManager;
logmsg("Starting system audio services\n");
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (!hSCManager)
{
logmsg("Failed to open service manager\n");
logmsg("Failed to open service manager %x\n", GetLastError());
return FALSE;
}
hService = OpenService(hSCManager, L"sysaudio", SERVICE_ALL_ACCESS);
if (hService)
{
if (!StartService(hService, 0, NULL))
{
logmsg("Failed to start sysaudio service\n");
CloseServiceHandle(hService);
CloseServiceHandle(hSCManager);
return FALSE;
}
CloseServiceHandle(hService);
logmsg("Sysaudio service started\n");
// FIXME
// wait untill service is started
}
hService = OpenService(hSCManager, L"wdmaud", SERVICE_ALL_ACCESS);
if (hService)
{
if (!StartService(hService, 0, NULL))
{
logmsg("Failed to start sysaudio service\n");
CloseServiceHandle(hService);
CloseServiceHandle(hSCManager);
return FALSE;
}
CloseServiceHandle(hService);
logmsg("Wdmaud service started\n");
}
logmsg("Starting sysaudio service\n");
StartAudioService(hSCManager, L"sysaudio", 20);
logmsg("Starting wdmaud service\n");
StartAudioService(hSCManager, L"wdmaud", 20);
CloseServiceHandle(hSCManager);
return TRUE;