2015-08-06 2 views
2

Я следую за CodeProject Tutorial, чтобы удалить USB-накопитель на C#. проблема, с которой я столкнулся, - это извлечение USB Pen Drive, но не работает на переносном жестком диске. код приведен нижеИзвлечение USB-накопителя

int r = CM_Request_Device_Eject_NoUi(DevInstParent, IntPtr.Zero, null, 0, 0); 
LogFile.Err("Eject Return value - " + r); 

Когда ручка привода USB вынужден катапультироваться целое число г возвращает 0 и вытолкнуть команда выполнена успешно, но когда портативный накопитель вынужден катапультироваться, он возвращает 23.

+1

В зависимости от того, является ли это 23 в делении или шестнадцатеричном формате, возврат является либо «CR_REMOVE_VETOED», либо «CR_NO_MORE_HW_PROFILES», возможно, первым. В коде, который вы связали, есть перечисление 'PNP_VETO_TYPE', которое я бы посмотрел, чтобы узнать, почему происходит вето. – TJennings

+0

жизнь слишком коротка для безопасного извлечения USB;) – silver

+0

@silver трепло, но я выбрасывания сразу после включения, значит, не делая каких-либо операций на USB – WiXXeY

ответ

1

По на cfgmgr32.h, 23 (0x17) равен CR_REMOVE_VETOED, что указывает на то, что ОС перегружает вашу попытку удалить диск. Рассматривая код, который вы связали, CM_Request_Device_Eject_NoUi просто вызывает CM_Request_Device_Eject без использования параметра out для pVetoType, поэтому ваше вето Причина отбрасывается, не сообщая вам.

Настройте код, чтобы показать вам значение pVetoType. Вам почти наверняка нужно будет найти копию исходного кода cfgmgr32.h, чтобы узнать, что означает возвращаемое значение. Эта информация будет необходима для любой отладки furthur.

Смежные вопросы