Програмне визначення використовуваного 3g модемом COM порту у Windows
ОС WIN ХР SP3, 3G-модем Huawei або 3G-модем Alcatel, встановлені драйвера до них та готові підключення у папці «Мережеві підключення»
Відомо також, що при безпосередньому приєднанні модему до порту USB створюється кілька віртуальних COM-портів (для різних моделей число може бути різним, як правило, від 2 до 4 портів). Номери портів, природно, довільні і при кожному підключенні можуть змінюватися. Один з цих портів розпізнається в Диспетчері пристроїв на вкладці Модеми як 3G-модем, а інші порти розміщуються у вкладці Порти (COM і LPT), і їм присвоюються будь-які номери.
При цьому модем використовує найчастіше один із COM-портів для читання команд, а інший для запису відповідей. Іноді буває, що один COM-порт використовується для читання команд, а відповідь пишеться відразу в кілька інших COM-портів.
Питання:як програмно(за допомогою WINAPI, мова С/С++), визначити для даного підключення, в який (у які) порти для цього модему здійснювати запис, а з якого (з яких) портів робити читання відповідей?
Моя ідея була в тому, щоб програмно отримати назву COM-порту з ярлика Підключення (див. вихідні дані), а далі відправити стандартну команду AT, при цьому в циклі перебираючи та прослуховуючи всі вільні COM-порти. Отримавши відповідь на якомусь із них (або на кількох відразу), вважати, що пара портів для запису-читання знайдена.
Проблема, з якою я зіткнувся, полягає в тому, що мені не вдалося знайти відповідної функції WINAPI, яка, грубо кажучи, за вхідним параметром Ім'я_підключення повернула б Ім'я_COM_порту, що відповідає цьому підключенню. При цьому, у самому ярлику Підключення цей COM-порт цілком добре видно. (Для прикладу у випадку Мегафона в його підключенні вказаноCOM9, а вкладці «Порти (COM і LPT)» видно COM10, відповідно пишемо в COM9, читаємо з COM10. А Alcatel взагалі відкриває 4 COM-порти). Для вирішення цього завдання використовував підмножину функцій та структур RAS з WINAPI, але, як сказав вище, не знайшов відповідної функції для повернення імені COM-порту.
Можливо, завдання взагалі вирішувати по-іншому. Як бути?