Здравствуйте.
Есть прибор, у которого несколько блоков, каждый подключается по USB. эмуляция COM-портов.
Пока портов было не больше двух — все работало нормально.
С появлением третьего (а в будущем, может и 4-й и 5-й появятся) появилась проблема.
при включении прибора, "одновременно" добавляются три COM порта COM3, COM6 и COM12.
По факту, при включении прибора, программа видит подключение только COM3 и COM12 (DeviceManager — видит появление всех).
а при отключении — видит только отключение COM6 и COM12.
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_DEVICECHANGE)
{
switch ((int)m.WParam)
{
case DBT_DEVNODES_CHANGED:
break;
case DBT_DEVICEARRIVAL:
pHdr = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR));
if (pHdr.dbcd_devicetype == DBT_DEVTYP_PORT)
{
Msg = Marshal.PtrToStringUni((IntPtr)(m.LParam.ToInt32() +
Marshal.SizeOf(typeof(DEV_BROADCAST_PORT_Fixed))));
System.Diagnostics.Debug.Print("{0} Connected", Msg);
}
break;
case DBT_DEVICEREMOVECOMPLETE:
pHdr = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR));
if (pHdr.dbcd_devicetype == DBT_DEVTYP_PORT)
{
Msg = Marshal.PtrToStringUni((IntPtr)(m.LParam.ToInt32() +
Marshal.SizeOf(typeof(DEV_BROADCAST_PORT_Fixed))));
System.Diagnostics.Debug.Print("{0} Disconnected", Msg);
}
break;
default:
break;
}
}
base.WndProc(ref m);
}
При включении питания прибора выводится:
COM12 Connected
COM3 Connected
При отключении питания прибора:
COM12 Disconnected
COM6 Disconnected
Если прибор уже включен и выдергивать кабель от каждого USB, то детектирование подключения и отключения происходит без ошибок.
Можно как-то вылечить эту проблему?