コード例 #1
0
        bool GetNativeDevInfo(DEVICE_INFO deviceToChangeState, out IntPtr ptrDevInfo, out Native.SP_DEVINFO_DATA devData)
        {
            Guid   myGUID   = System.Guid.Empty;
            IntPtr hDevInfo = Native.SetupDiGetClassDevs(ref myGUID, 0, IntPtr.Zero, Native.DIGCF_ALLCLASSES | Native.DIGCF_PRESENT);

            if (hDevInfo.ToInt64() == Native.INVALID_HANDLE_VALUE)
            {
                throw new Exception("Could retrieve handle for device");
            }

            Native.SP_DEVINFO_DATA DeviceInfoData;
            DeviceInfoData = new Native.SP_DEVINFO_DATA();

            //for 32-bit, IntPtr.Size = 4
            //for 64-bit, IntPtr.Size = 8
            if (IntPtr.Size == 4)
            {
                DeviceInfoData.cbSize = 28;
            }
            else if (IntPtr.Size == 8)
            {
                DeviceInfoData.cbSize = 32;
            }

            //is devices exist for class
            DeviceInfoData.devInst   = 0;
            DeviceInfoData.classGuid = System.Guid.Empty;
            DeviceInfoData.reserved  = 0;
            UInt32        i;
            StringBuilder DeviceHardwareId   = new StringBuilder("");
            StringBuilder DeviceFriendlyName = new StringBuilder("");

            DeviceHardwareId.Capacity = DeviceFriendlyName.Capacity = Native.MAX_DEV_LEN;
            for (i = 0; Native.SetupDiEnumDeviceInfo(hDevInfo, i, DeviceInfoData); i++)
            {
                //Declare vars
                Native.SetupDiGetDeviceRegistryProperty(hDevInfo, DeviceInfoData, Native.SPDRP_HARDWAREID, 0, DeviceHardwareId, Native.MAX_DEV_LEN, IntPtr.Zero);
                Native.SetupDiGetDeviceRegistryProperty(hDevInfo, DeviceInfoData, Native.SPDRP_FRIENDLYNAME, 0, DeviceFriendlyName, Native.MAX_DEV_LEN, IntPtr.Zero);

                Console.WriteLine(DeviceHardwareId + " -- " + DeviceFriendlyName);
                if (DeviceHardwareId.ToString().ToLower().Contains(deviceToChangeState.hardwareId.ToLower()) &&
                    DeviceFriendlyName.ToString().ToLower().Contains(deviceToChangeState.friendlyName.ToLower()))
                {
                    Console.WriteLine("Found: " + DeviceFriendlyName);

                    devData    = DeviceInfoData;
                    ptrDevInfo = hDevInfo;
                    return
                        (true);
                }
            }

            Native.SetupDiDestroyDeviceInfoList(hDevInfo);

            devData    = null;
            ptrDevInfo = IntPtr.Zero;

            return
                (false);
        }
コード例 #2
0
        //Name:     SetDeviceState
        //Inputs:   string[],bool
        //Outputs:  bool
        //Errors:   This method may throw the following exceptions.
        //          Failed to enumerate device tree!
        //Remarks:  This is nearly identical to the method above except it
        //          tries to match the hardware description against the criteria
        //          passed in.  If a match is found, that device will the be
        //          enabled or disabled based on bEnable.
        public bool SetDeviceState(DEVICE_INFO deviceToChangeState, bool bEnable)
        {
            Guid   myGUID   = System.Guid.Empty;
            IntPtr hDevInfo = Native.SetupDiGetClassDevs(ref myGUID, 0, IntPtr.Zero, Native.DIGCF_ALLCLASSES | Native.DIGCF_PRESENT);

            if (hDevInfo.ToInt64() == Native.INVALID_HANDLE_VALUE)
            {
                throw new Exception("Could retrieve handle for device");
            }

            Native.SP_DEVINFO_DATA DeviceInfoData;
            DeviceInfoData = new Native.SP_DEVINFO_DATA();

            //for 32-bit, IntPtr.Size = 4
            //for 64-bit, IntPtr.Size = 8
            if (IntPtr.Size == 4)
            {
                DeviceInfoData.cbSize = 28;
            }
            else if (IntPtr.Size == 8)
            {
                DeviceInfoData.cbSize = 32;
            }

            //is devices exist for class
            DeviceInfoData.devInst   = 0;
            DeviceInfoData.classGuid = System.Guid.Empty;
            DeviceInfoData.reserved  = 0;
            UInt32        i;
            StringBuilder DeviceHardwareId   = new StringBuilder("");
            StringBuilder DeviceFriendlyName = new StringBuilder("");

            DeviceHardwareId.Capacity = DeviceFriendlyName.Capacity = Native.MAX_DEV_LEN;
            for (i = 0; Native.SetupDiEnumDeviceInfo(hDevInfo, i, DeviceInfoData); i++)
            {
                DeviceFriendlyName.Length = DeviceHardwareId.Length = 0;

                //Declare vars
                Native.SetupDiGetDeviceRegistryProperty(hDevInfo, DeviceInfoData, Native.SPDRP_HARDWAREID, 0, DeviceHardwareId, Native.MAX_DEV_LEN, IntPtr.Zero);
                Native.SetupDiGetDeviceRegistryProperty(hDevInfo, DeviceInfoData, Native.SPDRP_FRIENDLYNAME, 0, DeviceFriendlyName, Native.MAX_DEV_LEN, IntPtr.Zero);

                //Console.WriteLine(DeviceHardwareId + " -- " + DeviceFriendlyName);
                if (DeviceHardwareId.ToString().ToLower().Contains(deviceToChangeState.hardwareId.ToLower()) && DeviceFriendlyName.ToString().ToLower().Contains(deviceToChangeState.friendlyName.ToLower()))
                {
                    Console.WriteLine("Found: " + DeviceFriendlyName);
                    bool couldChangeState = ChangeIt(hDevInfo, DeviceInfoData, bEnable);
                    if (!couldChangeState)
                    {
                        throw new Exception("Unable to change " + DeviceFriendlyName + " device state, make sure you have administrator privileges");
                    }
                    break;
                }
            }

            Native.SetupDiDestroyDeviceInfoList(hDevInfo);

            return(true);
        }
コード例 #3
0
        public bool ResetDevice(DEVICE_INFO dev)
        {
            Native.SP_DEVINFO_DATA devInfo;
            IntPtr devPtr;

            if (GetNativeDevInfo(dev, out devPtr, out devInfo))
            {
                bool bOk = _ResetDevice(devPtr, devInfo);
                Native.SetupDiDestroyDeviceInfoList(devPtr);

                return
                    (bOk);
            }

            return
                (false);
        }