亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? deviceclass.cs

?? USB device eject 的源文件
?? CS
字號:
// UsbEject version 1.0 March 2006
// written by Simon Mourier <email: simon [underscore] mourier [at] hotmail [dot] com>

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;

namespace UsbEject.Library
{
    /// <summary>
    /// A generic base class for physical device classes.
    /// </summary>
    public abstract class DeviceClass : IDisposable
	{
		private IntPtr _deviceInfoSet;
		private Guid _classGuid;
        private List<Device> _devices;

		protected DeviceClass(Guid classGuid)
			:this(classGuid, IntPtr.Zero)
		{
		}

        internal virtual Device CreateDevice(DeviceClass deviceClass, Native.SP_DEVINFO_DATA deviceInfoData, string path, int index)
        {
            return new Device(deviceClass, deviceInfoData, path, index);
        }

        /// <summary>
        /// Initializes a new instance of the DeviceClass class.
        /// </summary>
        /// <param name="classGuid">A device class Guid.</param>
        /// <param name="hwndParent">The handle of the top-level window to be used for any user interface or IntPtr.Zero for no handle.</param>
		protected DeviceClass(Guid classGuid, IntPtr hwndParent)
		{
			_classGuid = classGuid;

			_deviceInfoSet = Native.SetupDiGetClassDevs(ref _classGuid, 0, hwndParent, Native.DIGCF_DEVICEINTERFACE | Native.DIGCF_PRESENT);
			if (_deviceInfoSet.ToInt32() == Native.INVALID_HANDLE_VALUE)
				throw new Win32Exception(Marshal.GetLastWin32Error());
		}

        /// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
		public void Dispose()
		{
			if (_deviceInfoSet != IntPtr.Zero)
			{
				Native.SetupDiDestroyDeviceInfoList(_deviceInfoSet);
				_deviceInfoSet = IntPtr.Zero;
			}
		}

        /// <summary>
        /// Gets the device class's guid.
        /// </summary>
		public Guid ClassGuid
		{
			get
			{
				return _classGuid;
			}
		}

        /// <summary>
        /// Gets the list of devices of this device class.
        /// </summary>
        public List<Device> Devices
        {
            get
            {
                if (_devices == null)
                {
                    _devices = new List<Device>();
			        int index = 0;
                    while (true)
                    {
                        Native.SP_DEVICE_INTERFACE_DATA interfaceData = new Native.SP_DEVICE_INTERFACE_DATA();

                        if (!Native.SetupDiEnumDeviceInterfaces(_deviceInfoSet, null, ref _classGuid, index, interfaceData))
                        {
                            int error = Marshal.GetLastWin32Error();
                            if (error != Native.ERROR_NO_MORE_ITEMS)
                                throw new Win32Exception(error);
                            break;
                        }

                        Native.SP_DEVINFO_DATA devData = new Native.SP_DEVINFO_DATA();
                        int size = 0;
                        if (!Native.SetupDiGetDeviceInterfaceDetail(_deviceInfoSet, interfaceData, IntPtr.Zero, 0, ref size, devData))
                        {
                            int error = Marshal.GetLastWin32Error();
                            if (error != Native.ERROR_INSUFFICIENT_BUFFER)
                                throw new Win32Exception(error);
                        }

                        IntPtr buffer = Marshal.AllocHGlobal(size);
                        Native.SP_DEVICE_INTERFACE_DETAIL_DATA detailData = new Native.SP_DEVICE_INTERFACE_DETAIL_DATA();
                        detailData.cbSize = Marshal.SizeOf(typeof(Native.SP_DEVICE_INTERFACE_DETAIL_DATA));
                        Marshal.StructureToPtr(detailData, buffer, false);

                        if (!Native.SetupDiGetDeviceInterfaceDetail(_deviceInfoSet, interfaceData, buffer, size, ref size, devData))
                        {
                            Marshal.FreeHGlobal(buffer);
                            throw new Win32Exception(Marshal.GetLastWin32Error());
                        }

                        IntPtr pDevicePath = (IntPtr)((int)buffer + Marshal.SizeOf(typeof(int)));
                        string devicePath = Marshal.PtrToStringAuto(pDevicePath);
                        Marshal.FreeHGlobal(buffer);

                        Device device = CreateDevice(this, devData, devicePath, index);
                        _devices.Add(device);

                        index++;
                    }
                    _devices.Sort();
                }
                return _devices;
            }
        }

        internal Native.SP_DEVINFO_DATA GetInfo(int dnDevInst)
        {
            StringBuilder sb = new StringBuilder(1024);
            int hr = Native.CM_Get_Device_ID(dnDevInst, sb, sb.Capacity, 0);
            if (hr != 0)
                throw new Win32Exception(hr);

            Native.SP_DEVINFO_DATA devData = new Native.SP_DEVINFO_DATA();
            devData.cbSize = Marshal.SizeOf(typeof(Native.SP_DEVINFO_DATA));
            if (!Native.SetupDiOpenDeviceInfo(_deviceInfoSet, sb.ToString(), IntPtr.Zero, 0, devData))
                throw new Win32Exception(Marshal.GetLastWin32Error());

            return devData;
        }

        internal string GetProperty(Native.SP_DEVINFO_DATA devData, int property, string defaultValue)
        {
            if (devData == null)
                throw new ArgumentNullException("devData");

            int propertyRegDataType = 0;
            int requiredSize;
            int propertyBufferSize = 1024;

            IntPtr propertyBuffer = Marshal.AllocHGlobal(propertyBufferSize);
            if (!Native.SetupDiGetDeviceRegistryProperty(_deviceInfoSet,
                devData,
                property,
                out propertyRegDataType,
                propertyBuffer,
                propertyBufferSize,
                out requiredSize))
            {
                Marshal.FreeHGlobal(propertyBuffer);
                int error = Marshal.GetLastWin32Error();
                if (error != Native.ERROR_INVALID_DATA)
                    throw new Win32Exception(error);
                return defaultValue;
            }

            string value = Marshal.PtrToStringAuto(propertyBuffer);
            Marshal.FreeHGlobal(propertyBuffer);
            return value;
        }

        internal int GetProperty(Native.SP_DEVINFO_DATA devData, int property, int defaultValue)
        {
            if (devData == null)
                throw new ArgumentNullException("devData");

            int propertyRegDataType = 0;
            int requiredSize;
            int propertyBufferSize = Marshal.SizeOf(typeof(int));

            IntPtr propertyBuffer = Marshal.AllocHGlobal(propertyBufferSize);
            if (!Native.SetupDiGetDeviceRegistryProperty(_deviceInfoSet,
                devData,
                property,
                out propertyRegDataType,
                propertyBuffer,
                propertyBufferSize,
                out requiredSize))
            {
                Marshal.FreeHGlobal(propertyBuffer);
                int error = Marshal.GetLastWin32Error();
                if (error != Native.ERROR_INVALID_DATA)
                    throw new Win32Exception(error);
                return defaultValue;
            }

            int value = (int)Marshal.PtrToStructure(propertyBuffer, typeof(int));
            Marshal.FreeHGlobal(propertyBuffer);
            return value;
        }

        internal Guid GetProperty(Native.SP_DEVINFO_DATA devData, int property, Guid defaultValue)
        {
            if (devData == null)
                throw new ArgumentNullException("devData");

            int propertyRegDataType = 0;
            int requiredSize;
            int propertyBufferSize = Marshal.SizeOf(typeof(Guid));

            IntPtr propertyBuffer = Marshal.AllocHGlobal(propertyBufferSize);
            if (!Native.SetupDiGetDeviceRegistryProperty(_deviceInfoSet,
                devData,
                property,
                out propertyRegDataType,
                propertyBuffer,
                propertyBufferSize,
                out requiredSize))
            {
                Marshal.FreeHGlobal(propertyBuffer);
                int error = Marshal.GetLastWin32Error();
                if (error != Native.ERROR_INVALID_DATA)
                    throw new Win32Exception(error);
                return defaultValue;
            }

            Guid value = (Guid)Marshal.PtrToStructure(propertyBuffer, typeof(Guid));
            Marshal.FreeHGlobal(propertyBuffer);
            return value;
        }

	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久九九国产精品| 日韩电影免费在线| 日本欧美一区二区在线观看| 91蝌蚪porny成人天涯| 56国语精品自产拍在线观看| 久久综合九色综合欧美98| 一区二区三区四区中文字幕| 精品综合久久久久久8888| 色美美综合视频| 欧美午夜一区二区三区| 国产欧美日韩激情| 久久99热99| 日韩限制级电影在线观看| 一区二区三区在线视频播放| 91久久精品网| 喷水一区二区三区| 欧美理论片在线| 一区二区三区丝袜| 欧美一区二区三区视频| 婷婷综合五月天| 在线免费观看日本欧美| 国产精品家庭影院| 国产精品99久久久久久久女警| 91精品国产手机| 成人综合婷婷国产精品久久免费| 日韩一级黄色大片| 成人激情动漫在线观看| 中文成人综合网| 成人午夜激情视频| 亚洲成人先锋电影| 欧美男人的天堂一二区| 日欧美一区二区| 欧美伦理电影网| 高清在线不卡av| 国产精品理论片| 欧美精品乱码久久久久久| 国产河南妇女毛片精品久久久 | 亚洲成人自拍偷拍| 久久综合五月天婷婷伊人| 91福利在线导航| 精品一区二区综合| 亚洲第一狼人社区| 国产精品无遮挡| 日韩免费性生活视频播放| 美女脱光内衣内裤视频久久网站 | 成人免费毛片app| 午夜私人影院久久久久| 国产精品第四页| 欧美电影精品一区二区| 欧美性生活大片视频| 粉嫩一区二区三区在线看| 日韩专区欧美专区| 一区二区三区在线视频观看58| 国产欧美日韩精品一区| 日韩一区二区麻豆国产| 色老汉一区二区三区| 国产成人亚洲综合色影视| 琪琪一区二区三区| 亚洲午夜国产一区99re久久| 欧美军同video69gay| 91日韩一区二区三区| 成人在线视频一区| 国产福利精品导航| 久久99国产精品久久99| 日韩av中文字幕一区二区三区 | 国产婷婷色一区二区三区在线| 在线播放国产精品二区一二区四区 | 欧美日韩成人一区二区| 在线免费视频一区二区| 一本久道久久综合中文字幕| 国产成人av资源| 狠狠网亚洲精品| 亚洲欧美日韩一区| 欧美区视频在线观看| 欧美在线观看禁18| 国产欧美一区二区精品性色| 日韩精品一区二区三区三区免费| 欧美一区二区在线视频| 日韩一区二区三区免费观看| 9191国产精品| 日韩三级免费观看| 精品乱人伦小说| 色哟哟欧美精品| 欧美在线一区二区| 欧美日韩电影在线播放| 91精品国产综合久久精品性色| 欧美视频一区二区三区| 3d动漫精品啪啪| 精品久久久久久无| 国产色一区二区| 亚洲精品亚洲人成人网| 日韩精品一区二区在线观看| www成人在线观看| 中文字幕精品一区二区精品绿巨人| 欧美日韩中文字幕一区二区| 成人激情小说乱人伦| 波多野结衣91| 国产91高潮流白浆在线麻豆| 成人短视频下载| 波多野结衣欧美| 欧美性猛交xxxxxx富婆| 欧美日韩国产高清一区二区三区| 91精品国产综合久久久久久 | 亚洲男同1069视频| 亚洲va欧美va人人爽| 久久国产视频网| 成人激情动漫在线观看| 欧美专区日韩专区| 欧美xxxxxxxx| 最新国产精品久久精品| 欧美成人vr18sexvr| 国产欧美一区二区精品久导航 | 亚洲精品久久久久久国产精华液| 亚洲一区二区三区影院| 成人免费在线观看入口| 五月婷婷久久丁香| 国产一区二区影院| 国产一区二区三区在线观看精品| 成人综合婷婷国产精品久久蜜臀| 欧美性三三影院| 国产亚洲成av人在线观看导航| 亚洲欧美电影一区二区| 精品系列免费在线观看| 一本在线高清不卡dvd| 日韩免费高清视频| 亚洲精品欧美综合四区| 精一区二区三区| 在线观看不卡视频| 国产亚洲成年网址在线观看| 亚洲成av人片一区二区三区| 大尺度一区二区| 欧美白人最猛性xxxxx69交| 亚洲精品免费一二三区| 国产福利一区在线观看| 91精品国产日韩91久久久久久| 中文字幕在线观看不卡视频| 久久99九九99精品| 欧美日韩激情在线| 中文字幕人成不卡一区| 狠狠久久亚洲欧美| 欧美日韩国产高清一区二区三区| 一色桃子久久精品亚洲| 国产精品99久久久| 日韩一卡二卡三卡| 亚洲一区日韩精品中文字幕| 粉嫩一区二区三区在线看 | 久久久久国色av免费看影院| 国产午夜亚洲精品午夜鲁丝片| 亚洲一级二级在线| 91啪亚洲精品| 久久久亚洲午夜电影| 毛片av一区二区| 在线影院国内精品| 亚洲欧美自拍偷拍| 粉嫩13p一区二区三区| 精品91自产拍在线观看一区| 中文字幕中文字幕在线一区| 国产一区亚洲一区| 久久在线免费观看| 精品一区二区在线免费观看| 日韩一区二区在线看| 日韩av网站免费在线| 7878成人国产在线观看| 亚洲gay无套男同| 欧美男人的天堂一二区| 亚洲国产成人91porn| 在线看国产一区| 亚洲图片欧美色图| 精品视频一区 二区 三区| 国产精品羞羞答答xxdd| www国产成人免费观看视频 深夜成人网| 日韩不卡手机在线v区| 日韩一区二区三区av| 美女一区二区久久| 精品国产免费人成在线观看| 精品一区二区三区在线观看国产| 日韩欧美一级在线播放| 久久99久久99精品免视看婷婷| 日韩视频一区二区三区 | 亚洲妇女屁股眼交7| 欧美视频在线观看一区二区| 亚洲高清一区二区三区| 9191久久久久久久久久久| 日韩av不卡一区二区| 日韩美女一区二区三区| 国产九色sp调教91| 国产精品卡一卡二| 欧美在线视频全部完| 水野朝阳av一区二区三区| 日韩精品影音先锋| 国产精品一区二区果冻传媒| 国产精品不卡在线观看| 欧美在线999| 蜜桃视频在线观看一区二区| 久久精品在线观看| 91网站最新地址| 日本成人在线网站| 国产三级精品三级| 色视频欧美一区二区三区| 免费欧美高清视频|