Как определить, какой процесс использует последовательный порт?
Компания, с которой я работаю, производит аппаратное обеспечение, которое взаимодействует с компьютером через последовательный порт. Сторонние компании пишут программное обеспечение, которое общается с нашим оборудованием.
Бывают случаи, когда мне нужно диагностировать наше оборудование. Тем не менее, стороннее программное приложение подключается к последовательному порту при запуске Windows, блокируя любое другое соединение. Я не знаю названия этого приложения/службы, и он не всегда один и тот же.
Есть ли какой-либо способ:
- Найдите имя /pid приложения/службы, использующего данный последовательный порт, или
- Украдите соединение с последовательным портом из другого приложения.
vb.net предпочтительно, но я также отвечу на язык агностический ответ.
Ответы
Ответ 1
Вы можете использовать инструмент проводник процесса из SysInternals для поиска открытых дескрипторов. В этом случае вам нужно будет искать "Serial", так как он использует имена устройств, которые не могут сопоставляться с номерами com-портов. (например, COM1 является \Device\Serial0 в моей системе).
Если вы хотите взять под контроль последовательный порт из другого приложения, я думаю, вам понадобится сотрудничество с драйвером.
Ответ 2
Как сказал Роб Уокер, вы можете найти, кто использует последовательный порт, используя Process Explorer. В большинстве случаев, набрав Ctrl + F и выполнив поиск по "serial", вы увидите, у кого есть последовательный порт, но я столкнулся с ситуацией, когда мой дескриптор последовательного порта COM3 появился как "\ Device\VCP0". Это может быть странно, потому что он работал под VirtualBox с разъемом USB-to-serial.
Если поиск "serial" и "device\vcp" не дает вам никаких результатов, вы можете выяснить, как названы дескрипторы последовательного порта, открыв его с помощью известной программы. В Process Explorer отобразите нижнюю панель с помощью каждого обрабатываемого процесса, набрав Ctrl + L. Нажмите процесс, который вы использовали для открытия последовательного порта, и просмотрите нижнюю панель, чтобы увидеть, какие дескрипторы выглядят так, как будто они могут быть последовательным портом. Вы можете открывать и закрывать порт во время поиска, а дескриптор файла должен появляться и исчезать, а также выделяться зеленым или красным цветом. Конечно, это возможно только в том случае, если у вас более одного последовательного порта или последовательный порт, который вы пытаетесь диагностировать, не всегда заблокирован каким-то тайным процессом.
Ответ 3
Sysinternals имеет множество утилит, которые я нахожу очень полезными и учебными для отслеживания процессов, которые выполняются в системе.
У них есть утилита, которая делает именно то, что вам нужно вызвать Portmon, и дать некоторую информацию о том, как она работает в нижней части страницы, Эта информация и несколько хорошо заданных вопросов, вероятно, предоставят вам все необходимое для ее реализации, если утилиты недостаточно.
-Adam