NTSTATUS WdmAudControlDeviceType( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PWDMAUD_DEVICE_INFO DeviceInfo, IN PWDMAUD_CLIENT ClientInfo) { ULONG Result = 0; NTSTATUS Status = STATUS_SUCCESS; PWDMAUD_DEVICE_EXTENSION DeviceExtension; DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension; if (DeviceInfo->DeviceType == MIXER_DEVICE_TYPE) { Result = WdmAudGetMixerDeviceCount(); } else if (DeviceInfo->DeviceType == WAVE_OUT_DEVICE_TYPE) { Result = WdmAudGetWaveInDeviceCount(); } else if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE) { Result = WdmAudGetWaveOutDeviceCount(); } else if (DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE) { Result = WdmAudGetMidiInDeviceCount(); } else if (DeviceInfo->DeviceType == MIDI_OUT_DEVICE_TYPE) { Result = WdmAudGetMidiOutDeviceCount(); } /* store result count */ DeviceInfo->DeviceCount = Result; DPRINT("WdmAudControlDeviceType Status %x Devices %u\n", Status, DeviceInfo->DeviceCount); return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO)); }
VOID NTAPI WdmAudInitWorkerRoutine( IN PDEVICE_OBJECT DeviceObject, IN PVOID Context) { NTSTATUS Status; PWDMAUD_DEVICE_EXTENSION DeviceExtension; ULONG DeviceCount; /* get device extension */ DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension; /* get device count */ DeviceCount = GetSysAudioDeviceCount(DeviceObject); DPRINT("WdmAudInitWorkerRoutine SysAudioDeviceCount %ld\n", DeviceCount); /* was a device added / removed */ if (DeviceCount != DeviceExtension->SysAudioDeviceCount) { /* init mmixer library */ Status = WdmAudMixerInitialize(DeviceObject); DPRINT("WdmAudMixerInitialize Status %x WaveIn %lu WaveOut %lu Mixer %lu\n", Status, WdmAudGetWaveInDeviceCount(), WdmAudGetWaveOutDeviceCount(), WdmAudGetMixerDeviceCount()); /* store sysaudio device count */ DeviceExtension->SysAudioDeviceCount = DeviceCount; } /* signal completion */ KeSetEvent(&DeviceExtension->InitializationCompletionEvent, IO_NO_INCREMENT, FALSE); /* reset work item status indicator */ InterlockedDecrement((volatile long *)&DeviceExtension->WorkItemActive); }