Я могу ответить только на часть вопроса. Вы можете «извлечь» USB-устройства с помощью этого API:
CM_Request_Device_Eject (ссылка MSDN)
Я использую его для извлечения флэш-накопителей USB после того, как скопировал на них данные в приложении резервного копирования. Я почти уверен, что есть способы перечисления доступных USB-устройств с использованием одной из многих подпрограмм CM_XXX, но меня интересовали только устройства хранения, подключенные через USB, поэтому я не могу комментировать WiFi-устройства.
Еще одно предложение: возможно, вы можете решить свою проблему на другом уровне, может быть, вы сможете обнаружить добавление нового сетевого адаптера и отключить его. Не все USB-устройства могут быть извлечены, возможно, это проблема, связанная с драйвером. Но я думаю, что если вы можете извлечь его из значка области уведомлений, вы можете извлечь его из кода.