У меня есть приложение, которое отслеживает события файловой системы. Это требует постоянно открытого дескриптора целевых томов. Это хорошо для таких вещей, как системный загрузочный диск и другие стационарные устройства, но очень нежелательно, если мы имеем дело с томами, размещенными на съемных устройствах, таких как 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 - однако ОС распознает последнее как нечто, что должно быть показано в диалоговом окне «Безопасное удаление».