Как определить, какие диски (тома) отображаются в диалоговом окне «Безопасное извлечение устройства»? - PullRequest
0 голосов
/ 25 апреля 2011

У меня есть приложение, которое отслеживает события файловой системы. Это требует постоянно открытого дескриптора целевых томов. Это хорошо для таких вещей, как системный загрузочный диск и другие стационарные устройства, но очень нежелательно, если мы имеем дело с томами, размещенными на съемных устройствах, таких как eSATA, USB, Firewire, iSCSI и т. Д., Поскольку пользователь может отключить их в любое время. время, но открытый дескриптор не позволит выполнить «Безопасное извлечение устройства».

В идеале я хотел бы запретить привязку моего приложения к любому тому, чей родитель может появиться в «Безопасное извлечение устройства» по умолчанию. Проблема в том, что не существует документированного способа определения того, какие устройства отображаются там, а какие нет. Я что-то пропустил? У кого-нибудь есть лидерство?

Обратите внимание, что можно запросить тип шины устройства, и это почти делает работу за меня:

typedef enum _STORAGE_BUS_TYPE {
  BusTypeUnknown             = 0x00,
  BusTypeScsi                = 0x1,
  BusTypeAtapi               = 0x2,
  BusTypeAta                 = 0x3,
  BusType1394                = 0x4,
  BusTypeSsa                 = 0x5,
  BusTypeFibre               = 0x6,
  BusTypeUsb                 = 0x7,
  BusTypeRAID                = 0x8,
  BusTypeiScsi               = 0x9,
  BusTypeSas                 = 0xA,
  BusTypeSata                = 0xB,
  BusTypeSd                  = 0xC,
  BusTypeMmc                 = 0xD,
  BusTypeVirtual             = 0xE,
  BusTypeFileBackedVirtual   = 0xF,
  BusTypeMax                 = 0x10,
  BusTypeMaxReserved         = 0x7F 
} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;

Однако IOCTL возвращает BusTypeSata как для SATA, так и для eSATA - однако ОС распознает последнее как нечто, что должно быть показано в диалоговом окне «Безопасное удаление».

1 Ответ

0 голосов
/ 05 июля 2011

Вы можете прослушивать события устройства, чтобы знать, когда вы должны закрыть свои ручки:

http://msdn.microsoft.com/en-us/library/aa363217(v=vs.85).aspx

Обратите внимание, что это также необходимо для фиксированных устройств, иначе ваш открытый дескриптор может помешать запуску таких вещей, как chkdsk (для этого вам нужно прослушивать события блокировки / размонтирования).

-скотт

...