Возможные причины для x80004005 "не разрешено писать" при попытке (программно) извлечь USB-накопитель? - PullRequest
0 голосов
/ 07 ноября 2018

При использовании кода для удаления 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-накопителями, а не с другими.

Я заблудился в причинах этого и был бы признателен за совет.

...