[wdmaudiodev] Unregistering virtual MIDI devices

  • From: Jan <jdboer@xxxxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Tue, 28 Jul 2020 11:05:26 +0200

Hi,

I am looking for some advice and pointers on how to properly remove a 
dynamically created miniport driver. I am creating a driver that can create / 
destroy virtual MIDI devices on the fly. 

To create a device I am using the code that looks like the sample code from: 
https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/subdevice-creation
 
<https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/subdevice-creation>.
 

I am creating a CLSID_PortDMus port with a custom miniport driver. The device 
is correctly created and shows up when enumerating the available MIDI devices 
with: midiInGetNumDevs (1) and midiInGetDevCaps (2) and works as expected. 

(1) 
https://docs.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-midiingetnumdevs
 
<https://docs.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-midiingetnumdevs>
(2) 
https://docs.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-midiingetdevcaps
 
<https://docs.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-midiingetdevcaps>

To destroy the device (3) I call the UnregisterSubdevice (4) method from the 
IUnregisterSubdevice (5) interface of the miniport. 

(3) 
https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/driver-support-for-dynamic-subdevices
 
<https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/driver-support-for-dynamic-subdevices>
(4) 
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/portcls/nn-portcls-iunregistersubdevice
 
<https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/portcls/nn-portcls-iunregistersubdevice>
  
(5) 
https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/portcls/nf-portcls-iunregistersubdevice-unregistersubdevice
 
<https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/portcls/nf-portcls-iunregistersubdevice-unregistersubdevice>
  

I have created a Win32 application that communicates with the driver. The 
application creates a virtual device on the fly.  After some time I unregister 
/ destroy the device using the method above. But the device keeps listed when 
enumerating the MIDI devices using the method above. Only after I close the 
application the device is gone. I am experiencing the same behaviour  in other 
applications that use midi. 

I am looking for a method to properly remove the virtual device, the same 
behaviour as when you disconnect a physical MIDI controller. 

Any clues on how to achieve this would great,

Thanks,

Jan

Other related posts:

  • » [wdmaudiodev] Unregistering virtual MIDI devices - Jan