Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Определение параметров виртуального COM-порта


Автор: Lord Dagger 23.7.2006, 22:58
Приветствую читателей этой темы!

Возник следующий вопрос: необходимо определить параметры виртуальных Com-портов, имеющихся в системе? На всякий случай, еще раз напомню: интерфейс Bluetooth, ОС Windows mobile 2003-2005.

При помощи следующего нехитрого кода я перечисляю все имеющиеся в системе com-порты:
Код

DEVMGR_DEVICE_INFORMATION devInfo;

HANDLE devSearchHandle = NULL;
bool devFound = true;

devInfo.dwSize = sizeof(devInfo);

devSearchHandle = FindFirstDevice(DeviceSearchByLegacyName,L"COM*",&devInfo);
if ( ( devSearchHandle == NULL ) || ( devInfo.hDevice == NULL ) )
{
    devFound = false;//ERR( HRESULT_FROM_WIN32( GetLastError() ));
}

while(devFound != 0)
    devFound = FindNextDevice(devSearchHandle,&devInfo);
        
if(devSearchHandle)
    FindClose(devSearchHandle);


Прочитав devInfo.szDeviceKey можно определить принадлежность порта к Bluetooth-интерфейсам, но, к сожалению, НЕ ОДНОЗНАЧНО.
Что более важно, предоставляемая информация не позволяет узнать параметры этого порта, например, является ли он клиентским или серверным.

При регистрации порта в системе функцией RegisterDevice(), соотв. параметры указываются в структуре PORTEMUPortParams, например, так:
Код

PORTEMUPortParams pp;
memset (&pp, 0, sizeof(pp));
pp.flocal = TRUE;
pp.channel = channel & 0xff;

HANDLE h = RegisterDevice (L"COM", index, L"btd.dll", (DWORD)&pp);


Однако, несмотря на двухдневные поиски в MSDN я так и не нашел способа получить обратно эту структуру. Тем не менее, многие приложения от сторонних производителей отображают параметры виртуальных com-портов.

Хотель бы услышать мнение профессионаловsmile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)