sync with trunk r49322
[reactos.git] / base / services / audiosrv / pnp_list_lock.c
1 /*
2 * PROJECT: ReactOS
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/services/audiosrv/list_lock.c
5 * PURPOSE: Audio Service Plug and Play list locking mechanism
6 * COPYRIGHT: Copyright 2007 Andrew Greenwood
7 */
8
9 #include <windows.h>
10 #include <assert.h>
11 #include <audiosrv/audiosrv.h>
12
13 static HANDLE audio_device_list_lock = NULL;
14
15 BOOL
16 InitializeAudioDeviceListLock()
17 {
18 /* The security stuff is to make sure the mutex can be grabbed by
19 other processes - is this the best idea though ??? */
20
21 SECURITY_DESCRIPTOR security_descriptor;
22 SECURITY_ATTRIBUTES security;
23
24 InitializeSecurityDescriptor(&security_descriptor, SECURITY_DESCRIPTOR_REVISION);
25 SetSecurityDescriptorDacl(&security_descriptor, TRUE, 0, FALSE);
26
27 security.nLength = sizeof(SECURITY_ATTRIBUTES);
28 security.lpSecurityDescriptor = &security_descriptor;
29 security.bInheritHandle = FALSE;
30
31 audio_device_list_lock = CreateMutex(&security,
32 FALSE,
33 AUDIO_LIST_LOCK_NAME);
34
35 return ( audio_device_list_lock != NULL );
36 }
37
38 VOID
39 KillAudioDeviceListLock()
40 {
41 CloseHandle(audio_device_list_lock);
42 audio_device_list_lock = NULL;
43 }
44
45 VOID
46 LockAudioDeviceList()
47 {
48 assert( audio_device_list_lock != NULL );
49 WaitForSingleObject(audio_device_list_lock, INFINITE);
50 }
51
52 VOID
53 UnlockAudioDeviceList()
54 {
55 assert( audio_device_list_lock != NULL );
56 ReleaseMutex(audio_device_list_lock);
57 }
58