//private bool m_configInProgress;
        //private bool m_extractAbort;

        //public event ConnectionManager.ExtractUpdateDelegate ExtractUpdate;

        public ConnectionManager()
        {
            this.m_ObjDeviceManager    = new DeviceManagement();
            this.m_DeviceIdentity      = new Hashtable();
            this.m_ParseAndPackDataObj = new ParseAndPackData();
            this.m_DevicePathList      = new List <string>();
            this.m_DevicePathID        = new Hashtable();
        }
        internal eReturn UnRegisterDevices(IntPtr deviceNotificationHandle)
        {
            eReturn eReturn = eReturn.FAILURE;

            try
            {
                if (DeviceManagement.UnregisterDeviceNotification(deviceNotificationHandle))
                {
                    eReturn = eReturn.SUCCESS;
                }
            }
            catch
            {
                eReturn = eReturn.FAILURE;
            }
            return(eReturn);
        }
        internal eReturn EnumerateDevices(Guid geneaGuid, List <string> devicePathName)
        {
            int    RequiredSize  = 0;
            IntPtr num           = IntPtr.Zero;
            IntPtr DeviceInfoSet = new IntPtr();
            bool   flag1         = false;

            DeviceManagement.SP_DEVICE_INTERFACE_DATA DeviceInterfaceData = new DeviceManagement.SP_DEVICE_INTERFACE_DATA();
            bool    flag2    = false;
            eReturn eReturn1 = eReturn.FAILURE;
            eReturn eReturn2;

            try
            {
                DeviceInfoSet = DeviceManagement.SetupDiGetClassDevs(ref geneaGuid, IntPtr.Zero, IntPtr.Zero, 18);
                eReturn2      = eReturn.SUCCESS;
            }
            catch
            {
                eReturn2 = eReturn.FAILURE;
            }
            if (eReturn2 == eReturn.SUCCESS)
            {
                eReturn1 = eReturn.FAILURE;
                int MemberIndex = 0;
                try
                {
                    DeviceInterfaceData.cbSize = Marshal.SizeOf <DeviceManagement.SP_DEVICE_INTERFACE_DATA>(DeviceInterfaceData);
                    eReturn2 = eReturn.SUCCESS;
                }
                catch
                {
                    eReturn2 = eReturn.FAILURE;
                }
                if (eReturn2 == eReturn.SUCCESS)
                {
                    eReturn1 = eReturn.FAILURE;
                    do
                    {
                        try
                        {
                            flag2    = DeviceManagement.SetupDiEnumDeviceInterfaces(DeviceInfoSet, IntPtr.Zero, ref geneaGuid, MemberIndex, ref DeviceInterfaceData);
                            eReturn2 = eReturn.SUCCESS;
                        }
                        catch
                        {
                            eReturn2 = eReturn.FAILURE;
                        }
                        if (eReturn2 == eReturn.SUCCESS)
                        {
                            eReturn2 = eReturn.FAILURE;
                            if (!flag2)
                            {
                                flag1 = true;
                            }
                            else
                            {
                                try
                                {
                                    flag2 = DeviceManagement.SetupDiGetDeviceInterfaceDetail(DeviceInfoSet, ref DeviceInterfaceData, IntPtr.Zero, 0, ref RequiredSize, IntPtr.Zero);
                                    num   = Marshal.AllocHGlobal(RequiredSize);
                                    Marshal.WriteInt32(num, IntPtr.Size == 4 ? 4 + Marshal.SystemDefaultCharSize : 8);
                                    flag2    = DeviceManagement.SetupDiGetDeviceInterfaceDetail(DeviceInfoSet, ref DeviceInterfaceData, num, RequiredSize, ref RequiredSize, IntPtr.Zero);
                                    eReturn2 = eReturn.SUCCESS;
                                }
                                catch
                                {
                                    eReturn2 = eReturn.FAILURE;
                                }
                                if (eReturn2 == eReturn.SUCCESS)
                                {
                                    eReturn2 = eReturn.FAILURE;
                                    if (flag2)
                                    {
                                        IntPtr ptr = new IntPtr(num.ToInt32() + 4);
                                        devicePathName.Add(Marshal.PtrToStringAuto(ptr));
                                    }
                                }
                            }
                        }
                        ++MemberIndex;
                    }while (!flag1);
                }
                if (num != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(num);
                }
                if (DeviceInfoSet != IntPtr.Zero)
                {
                    try
                    {
                        DeviceManagement.SetupDiDestroyDeviceInfoList(DeviceInfoSet);
                        eReturn2 = eReturn.SUCCESS;
                    }
                    catch
                    {
                        eReturn2 = eReturn.FAILURE;
                    }
                }
                if (flag1)
                {
                    eReturn2 = eReturn.SUCCESS;
                }
            }
            return(eReturn2);
        }
        internal eReturn RegisterDevices(IntPtr formHandle, Guid classGuid, ref IntPtr deviceNotificationHandle)
        {
            DeviceManagement.DEV_BROADCAST_DEVICEINTERFACE structure = new DeviceManagement.DEV_BROADCAST_DEVICEINTERFACE();
            IntPtr  num      = IntPtr.Zero;
            int     cb       = 0;
            eReturn eReturn1 = eReturn.FAILURE;
            eReturn eReturn2;

            try
            {
                cb       = Marshal.SizeOf <DeviceManagement.DEV_BROADCAST_DEVICEINTERFACE>(structure);
                eReturn2 = eReturn.SUCCESS;
            }
            catch
            {
                eReturn2 = eReturn.FAILURE;
            }
            if (eReturn2 == eReturn.SUCCESS)
            {
                eReturn1                  = eReturn.FAILURE;
                structure.dbcc_size       = cb;
                structure.dbcc_devicetype = 5;
                structure.dbcc_reserved   = 0;
                structure.dbcc_classguid  = classGuid;
                num = Marshal.AllocHGlobal(cb);
                try
                {
                    Marshal.StructureToPtr <DeviceManagement.DEV_BROADCAST_DEVICEINTERFACE>(structure, num, true);
                    eReturn2 = eReturn.SUCCESS;
                }
                catch
                {
                    eReturn2 = eReturn.FAILURE;
                }
                if (eReturn2 == eReturn.SUCCESS)
                {
                    eReturn1 = eReturn.FAILURE;
                    deviceNotificationHandle = DeviceManagement.RegisterDeviceNotification(formHandle, num, 0);
                    try
                    {
                        Marshal.PtrToStructure <DeviceManagement.DEV_BROADCAST_DEVICEINTERFACE>(num, structure);
                        eReturn2 = eReturn.SUCCESS;
                    }
                    catch
                    {
                        eReturn2 = eReturn.FAILURE;
                    }
                    if (eReturn2 == eReturn.SUCCESS)
                    {
                        eReturn1 = eReturn.FAILURE;
                        try
                        {
                            eReturn2 = deviceNotificationHandle.ToInt32() != IntPtr.Zero.ToInt32() ? eReturn.SUCCESS : eReturn.FAILURE;
                        }
                        catch
                        {
                            eReturn2 = eReturn.FAILURE;
                        }
                    }
                }
            }
            if (num != IntPtr.Zero)
            {
                Marshal.FreeHGlobal(num);
            }
            return(eReturn2);
        }