При использовании кода для удаления USB, описанного здесь и с кодом из здесь
У меня следующая проблема.
Симптомы
Программа успешно извлекла USB-память, но при попытке использовать другую, она не может извлечь ее . Однако при повторном запуске процесса это удалось.
Памяти USB использовались до попытки их извлечения (они использовались для записи на них файлов)
Где это терпит неудачу
Исследуя причины, я обнаружил, что в этой строке ничего не получается
int hr = Native.CM_Request_Device_Eject(device.InstanceHandle, out veto, sb, sb.Capacity, 0);
if (hr != 0)
throw new Win32Exception(hr);
, где CM_Request_Device_Eject
- это собственный вызов setupapi.dll
Об исключении сообщается как x80004005 «запрещено писать»
Теперь я не понимаю, что если бы у меня не было разрешения на запись на USB, я бы всегда получал исключение, но это происходит только один раз после завершения записи файла. Кроме того, это происходит только с некоторыми USB-накопителями, а не с другими.
Я заблудился в причинах этого и был бы признателен за совет.