diff --git a/reactos/dll/win32/wdmaud.drv/mmixer.c b/reactos/dll/win32/wdmaud.drv/mmixer.c index bdf5875d193..ab1ba6fb242 100644 --- a/reactos/dll/win32/wdmaud.drv/mmixer.c +++ b/reactos/dll/win32/wdmaud.drv/mmixer.c @@ -20,6 +20,8 @@ MIXER_STATUS Enum(IN PVOID EnumContext, IN ULONG DeviceIndex, OUT LPWSTR * Dev MIXER_STATUS OpenKey(IN HANDLE hKey, IN LPWSTR SubKey, IN ULONG DesiredAccess, OUT PHANDLE OutKey); MIXER_STATUS CloseKey(IN HANDLE hKey); MIXER_STATUS QueryKeyValue(IN HANDLE hKey, IN LPWSTR KeyName, OUT PVOID * ResultBuffer, OUT PULONG ResultLength, OUT PULONG KeyType); +PVOID AllocEventData(IN ULONG ExtraSize); +VOID FreeEventData(IN PVOID EventData); MIXER_CONTEXT MixerContext = { @@ -33,7 +35,9 @@ MIXER_CONTEXT MixerContext = Copy, OpenKey, QueryKeyValue, - CloseKey + CloseKey, + AllocEventData, + FreeEventData }; GUID CategoryGuid = {STATIC_KSCATEGORY_AUDIO}; @@ -285,6 +289,35 @@ Enum( return Status; } +PVOID +AllocEventData( + IN ULONG ExtraSize) +{ + PKSEVENTDATA Data = (PKSEVENTDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(KSEVENTDATA) + ExtraSize); + if (!Data) + return NULL; + + Data->EventHandle.Event = CreateEventW(NULL, FALSE, FALSE, NULL); + if (!Data->EventHandle.Event) + { + HeapFree(GetProcessHeap(), 0, Data); + return NULL; + } + + Data->NotificationType = KSEVENTF_EVENT_HANDLE; + return Data; +} + +VOID +FreeEventData(IN PVOID EventData) +{ + PKSEVENTDATA Data = (PKSEVENTDATA)EventData; + + CloseHandle(Data->EventHandle.Event); + HeapFree(GetProcessHeap(), 0, Data); +} + + BOOL WdmAudInitUserModeMixer() { diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild index 69b1f5729ed..31039ccabf7 100644 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild @@ -5,7 +5,7 @@ . . . - + 1 mmebuddy ntdll