Круто - я попробую эти варианты, так как они, вероятно, лучше по умолчанию, учитывая мои намерения. К сожалению, я знаю, что мое устройство там, и мне в конечном счете понадобится доступ для чтения / записи позже (как только я осмотрю дескрипторы и проверим, действительно ли это на моем устройстве).
Это означает, что моя настоящая цель - узнать, что его использует, поэтому я могу сообщить клиенту / пользователю: «Привет, iexplore.exe» в настоящее время использует ваше устройство SuperWidget. Вам придется закрыть это в Чтобы использовать приложение SuperWidget. " (если не на уровне приложения, то хотя бы на уровне поддержки телефона.)
Я забыл упомянуть, что ошибка Windows, о которой сообщает GetLastError ():
0x20. Процесс не может получить доступ к файлу, поскольку он используется другим процессом.
(Таким образом, ваши альтернативы для совместного использования, вероятно, откроют файл, при условии отсутствия FILE_SHARE_NONE от имени другого процесса).
[править]
Да, это больно, хорошо. Я видел, как мыши и клавиатуры были заблокированы тем, что Windows использует для чтения с них. Я также видел, что у многих людей возникают проблемы с виртуальной машиной, такой как Paralells на OS X, где драйвер класса HID имеет устройство, открытое исключительно для того, чтобы виртуальная машина не использовала стандартные запросы USB.
Я видел некоторый код, воссоздающий то, что делает ProcessMonitor . Возможно, SysInternals просто выбирает игнорировать дескрипторы устройства, но для определения PID здесь можно использовать тот же метод (или небольшое изменение).
Mike