Как я могу закрыть usb-устройство, когда оно уже извлечено
Я подключаюсь к своему USB устройству через функцию
HANDLE hDevice = CreateFile("\\\\.\\dev_name", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);Если мое usb-устройство было неожиданно удалено, и после этого я попытался закрыть Windows crash to BSOD. Что я могу сделать, чтобы ручка закрылась правильно?
Что я уже пробовал:
Я попытался использовать RegisterDeviceNotification для отслеживания события устройства DBT_DEVICEQUERYREMOVE, но это событие, похоже, не срабатывает, если устройство было неожиданно удалено.
11917640 Member
Попробуйте DBT_DEVICEREMOVECOMPLETE.
MaxSandi
DBT_DEVICEREMOVECOMPLETE вызывается после удаления usb-устройства, и если я использовал CloseHandle Windows, то он разбился.
0x01AA
Только идея: например, Process Explorer от Sysinternals показывает вам все дескрипторы, используемые процессом. Поэтому я бы проверил с помощью Process Explorer, исчезает ли ручка, Если usb удален.
Если дескриптор исчезает в Process Explorer, вам "только" нужен способ получить список дескрипторов, используемых программно, и проверить, находится ли ваш дескриптор все еще в списке.
Я понимаю, что это безумная идея ;)
[Редактировать]
Это, возможно, поможет получить список дескрипторов: Список Использованных Файлов[^]