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

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

?? volume.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.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;

namespace UsbEject.Library
{
    /// <summary>
    /// A volume device.
    /// </summary>
    public class Volume : Device, IComparable
    {
        private string _volumeName;
        private string _logicalDrive;
        private int[] _diskNumbers;
        private List<Device> _disks;
        private List<Device> _removableDevices;

        internal Volume(DeviceClass deviceClass, Native.SP_DEVINFO_DATA deviceInfoData, string path, int index)
            :base(deviceClass, deviceInfoData, path, index)
        {
        }

        /// <summary>
        /// Gets the volume's name.
        /// </summary>
        public string VolumeName
        {
            get
            {
                if (_volumeName == null)
                {
                    StringBuilder sb = new StringBuilder(1024);
                    if (!Native.GetVolumeNameForVolumeMountPoint(Path + "\\", sb, sb.Capacity))
                    {
                        // throw new Win32Exception(Marshal.GetLastWin32Error());
                        
                    }

                    if (sb.Length > 0)
                    {
                        _volumeName = sb.ToString();
                    }
                }
                return _volumeName;
            }
        }

        /// <summary>
        /// Gets the volume's logical drive in the form [letter]:\
        /// </summary>
        public string LogicalDrive
        {
            get
            {
                if ((_logicalDrive == null) && (VolumeName != null))
                {
                    ((VolumeDeviceClass)DeviceClass)._logicalDrives.TryGetValue(VolumeName, out _logicalDrive);
                }
                return _logicalDrive;
            }
        }

        /// <summary>
        /// Gets a value indicating whether this volume is a based on USB devices.
        /// </summary>
        public override bool IsUsb
        {
            get
            {
                if (Disks != null)
                {
                    foreach (Device disk in Disks)
                    {
                        if (disk.IsUsb)
                            return true;
                    }
                }
                return false;
            }
        }

        /// <summary>
        /// Gets a list of underlying disks for this volume.
        /// </summary>
        public List<Device> Disks
        {
            get
            {
                if (_disks == null)
                {
                    _disks = new List<Device>();

                    if (DiskNumbers != null)
                    {
                        DiskDeviceClass disks = new DiskDeviceClass();
                        foreach (int index in DiskNumbers)
                        {
                            if (index < disks.Devices.Count)
                            {
                                _disks.Add(disks.Devices[index]);
                            }
                        }
                    }
                }
                return _disks;
            }
        }

        private int[] DiskNumbers
        {
            get
            {
                if (_diskNumbers == null)
                {
                    List<int> numbers = new List<int>();
                    if (LogicalDrive != null)
                    {

                        IntPtr hFile = Native.CreateFile(@"\\.\" + LogicalDrive, Native.GENERIC_READ, Native.FILE_SHARE_READ | Native.FILE_SHARE_WRITE, IntPtr.Zero, Native.OPEN_EXISTING, 0, IntPtr.Zero);
                        if (hFile.ToInt32() == Native.INVALID_HANDLE_VALUE)
                            throw new Win32Exception(Marshal.GetLastWin32Error());

                        int size = 0x400; // some big size
                        IntPtr buffer = Marshal.AllocHGlobal(size);
                        int bytesReturned = 0;
                        try
                        {
                            if (!Native.DeviceIoControl(hFile, Native.IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, IntPtr.Zero, 0, buffer, size, out bytesReturned, IntPtr.Zero))
                            {
                                // do nothing here on purpose
                            }
                        }
                        finally
                        {
                            Native.CloseHandle(hFile);
                        }

                        if (bytesReturned > 0)
                        {
                            int numberOfDiskExtents = (int)Marshal.PtrToStructure(buffer, typeof(int));
                            for (int i = 0; i < numberOfDiskExtents; i++)
                            {
                                IntPtr extentPtr = new IntPtr(buffer.ToInt32() + Marshal.SizeOf(typeof(long)) + i * Marshal.SizeOf(typeof(Native.DISK_EXTENT)));
                                Native.DISK_EXTENT extent = (Native.DISK_EXTENT)Marshal.PtrToStructure(extentPtr, typeof(Native.DISK_EXTENT));
                                numbers.Add(extent.DiskNumber);
                            }
                        }
                        Marshal.FreeHGlobal(buffer);
                    }

                    _diskNumbers = new int[numbers.Count];
                    numbers.CopyTo(_diskNumbers);
                }
                return _diskNumbers;
            }
        }

        /// <summary>
        /// Gets a list of removable devices for this volume.
        /// </summary>
        public override List<Device> RemovableDevices
        {
            get
            {
                if (_removableDevices == null)
                {
                    _removableDevices = new List<Device>();
                    if (Disks == null)
                    {
                        _removableDevices = base.RemovableDevices;
                    }
                    else
                    {
                        foreach (Device disk in Disks)
                        {
                            foreach (Device device in disk.RemovableDevices)
                            {
                                _removableDevices.Add(device);
                            }
                        }
                    }
                }
                return _removableDevices;
            }
        }

        /// <summary>
        /// Compares the current instance with another object of the same type.
        /// </summary>
        /// <param name="obj">An object to compare with this instance.</param>
        /// <returns>A 32-bit signed integer that indicates the relative order of the comparands.</returns>
        public override int CompareTo(object obj)
        {
            Volume device = obj as Volume;
            if (device == null)
                throw new ArgumentException();

            if (LogicalDrive == null)
                return 1;

            if (device.LogicalDrive == null)
                return -1;

            return LogicalDrive.CompareTo(device.LogicalDrive);
        }
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲一区二区三区四区| 99久久婷婷国产| 欧美一区二区免费观在线| 亚洲香蕉伊在人在线观| 欧美亚男人的天堂| 日韩在线a电影| 日韩三级高清在线| 国产精品原创巨作av| 久久久蜜桃精品| eeuss鲁片一区二区三区在线看| 亚洲欧美日韩国产手机在线| 精品视频免费看| 美女视频黄 久久| 亚洲国产精品ⅴa在线观看| 99精品视频在线观看免费| 亚洲国产成人精品视频| 日韩欧美一区二区视频| 国产a久久麻豆| 国产乱人伦偷精品视频不卡| 日韩毛片精品高清免费| 欧美三级资源在线| 国内精品视频666| 日韩毛片高清在线播放| 日韩欧美一区中文| 99久久精品免费看| 午夜精品123| 国产亚洲综合性久久久影院| 91视频国产观看| 激情久久五月天| 亚洲一区二区黄色| 国产日韩欧美麻豆| 56国语精品自产拍在线观看| 福利一区二区在线| 日韩成人dvd| 国产精品久久二区二区| 欧美一级二级三级乱码| 91日韩在线专区| 国内成+人亚洲+欧美+综合在线| 一区二区激情小说| 久久精品人人做人人综合 | 成人黄色小视频在线观看| 亚洲国产精品一区二区www| 国产三区在线成人av| 日韩一级黄色片| 欧美主播一区二区三区| gogogo免费视频观看亚洲一| 精品中文av资源站在线观看| 国产69精品久久777的优势| 日韩不卡免费视频| 亚洲综合一区二区| 国产精品久久久久久久久动漫| 欧美成人三级电影在线| 欧美日韩国产精品成人| 色综合天天综合色综合av | 亚洲妇女屁股眼交7| 亚洲欧洲在线观看av| 久久综合一区二区| 欧美精品在线一区二区| 在线一区二区观看| 97国产精品videossex| 国产成人精品免费| 国产在线精品一区在线观看麻豆| 日韩av中文字幕一区二区三区| 一区二区三区国产精华| 亚洲天堂中文字幕| 国产精品青草综合久久久久99| 精品福利av导航| 精品国产91洋老外米糕| 欧美一级理论片| 日韩欧美在线观看一区二区三区| 欧美日韩情趣电影| 欧美猛男男办公室激情| 欧美三级一区二区| 欧美三区在线视频| 欧美日韩午夜影院| 欧美男男青年gay1069videost| 欧美日韩五月天| 欧美一区二区精品在线| 91精品婷婷国产综合久久性色 | voyeur盗摄精品| 99视频精品免费视频| 91在线观看污| 欧洲一区二区av| 制服丝袜激情欧洲亚洲| 欧美一区三区四区| 91精品欧美综合在线观看最新 | 国产亚洲欧洲997久久综合 | 国产精品成人在线观看| 中文字幕日韩精品一区| 亚洲色图第一区| 洋洋成人永久网站入口| 水野朝阳av一区二区三区| 视频一区中文字幕国产| 美国三级日本三级久久99| 国产综合成人久久大片91| 丁香五精品蜜臀久久久久99网站| 99精品久久只有精品| 欧美午夜电影在线播放| 日韩一区二区三区视频在线观看 | 91国偷自产一区二区使用方法| 91福利小视频| 日韩欧美电影在线| 久久久国产午夜精品| 亚洲私人黄色宅男| 天涯成人国产亚洲精品一区av| 精品在线一区二区| 99久久99久久免费精品蜜臀| 欧美人狂配大交3d怪物一区| 久久久午夜精品| 亚洲综合自拍偷拍| 精品一二三四在线| 91色婷婷久久久久合中文| 717成人午夜免费福利电影| xvideos.蜜桃一区二区| 亚洲精选免费视频| 久久精品国产亚洲a| 91在线视频网址| 欧美电视剧免费观看| 韩国理伦片一区二区三区在线播放| 懂色一区二区三区免费观看| 欧美影视一区在线| 久久精品视频免费| 午夜激情一区二区| 99久久精品99国产精品| 日韩欧美高清在线| 亚洲曰韩产成在线| 国产91精品露脸国语对白| 欧美久久久久久蜜桃| 欧美经典一区二区三区| 午夜精品久久久久久久久久久| 成人综合在线视频| 日韩欧美一区二区在线视频| 亚洲精品一二三四区| 国产精品一区一区三区| 欧美人xxxx| 一区二区三区在线免费播放| 国产精品亚洲午夜一区二区三区| 欧美在线视频日韩| 亚洲欧洲国产专区| 国产九色sp调教91| 欧美一区二区三区在线观看| 亚洲欧美另类小说| 成人一级片网址| 久久综合狠狠综合久久激情| 日本视频一区二区| 一本久久综合亚洲鲁鲁五月天| 国产情人综合久久777777| 美国av一区二区| 91精品久久久久久久久99蜜臂| 亚洲精品中文字幕乱码三区| 9色porny自拍视频一区二区| 久久亚洲综合色一区二区三区| 日韩不卡手机在线v区| 欧美日韩一区二区在线观看| 亚洲日本中文字幕区| 成人免费av在线| 日本一区二区三区在线不卡| 国产麻豆成人精品| 久久久久久久久蜜桃| 精品一区二区三区在线视频| 亚洲欧美激情小说另类| 懂色一区二区三区免费观看| 国产网站一区二区| 国产aⅴ综合色| 国产日韩高清在线| 国内精品久久久久影院色| 精品国产污污免费网站入口| 免费成人美女在线观看| 日韩一区二区三区电影| 蜜桃久久av一区| 欧美不卡在线视频| 国产一区二区在线视频| 久久久另类综合| 粉嫩av一区二区三区粉嫩| 欧美国产精品久久| 成人97人人超碰人人99| 亚洲私人黄色宅男| 欧美亚洲图片小说| 爽爽淫人综合网网站| 日韩欧美自拍偷拍| 国产黄人亚洲片| 国产精品区一区二区三| 色就色 综合激情| 偷窥少妇高潮呻吟av久久免费| 欧美日韩小视频| 久久精品国产**网站演员| 国产三级三级三级精品8ⅰ区| 国产成人福利片| 亚洲免费观看高清完整版在线| 在线一区二区观看| 麻豆精品新av中文字幕| 国产清纯白嫩初高生在线观看91 | 精品国一区二区三区| 国产**成人网毛片九色| 亚洲美女免费视频| 欧美一级久久久| 不卡影院免费观看| 一区二区三区四区五区视频在线观看 | 91精品国产乱码久久蜜臀| 欧美在线影院一区二区|