1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
// Copyright © 2006-2010 Travis Robinson. All rights reserved.
//
// website: http://sourceforge.net/projects/libusbdotnet
// e-mail: libusbdotnet@gmail.com
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or
// visit www.gnu.org.
//
//
using System;
using System.Runtime.InteropServices;
using LibUsbDotNet.DeviceNotify.Internal;
namespace LibUsbDotNet.DeviceNotify.Info
{
/// <summary> Describes the storage volume that caused the notification.
/// See <see cref="IVolumeNotifyInfo"/> for more information.
/// </summary>
public class VolumeNotifyInfo : IVolumeNotifyInfo
{
private const int DBTF_MEDIA = 0x0001;
private const int DBTF_NET = 0x0002;
private readonly DevBroadcastVolume mBaseHdr = new DevBroadcastVolume();
internal VolumeNotifyInfo(IntPtr lParam) { Marshal.PtrToStructure(lParam, mBaseHdr); }
#region IVolumeNotifyInfo Members
/// <summary>
/// Gets the letter representation of the unitmask.
/// </summary>
public string Letter
{
get
{
Int32 tempMask = Unitmask;
for (byte b = 65; b < (65 + 32); b++)
{
Byte bValue = b;
if (bValue > 90)
bValue -= 43;
if ((tempMask & 0x1) == 1)
return ((char) bValue).ToString();
tempMask >>= 1;
}
return ((char) 63).ToString();
}
}
///<summary>
/// If true, change affects media in drive. If false, change affects physical device or drive.
///</summary>
public bool ChangeAffectsMediaInDrive
{
get { return ((Flags & DBTF_MEDIA) == DBTF_MEDIA); }
}
/// <summary>
/// If True, the indicated logical volume is a network volume
/// </summary>
public bool IsNetworkVolume
{
get { return ((Flags & DBTF_NET) == DBTF_NET); }
}
/// <summary>
/// Raw DevBroadcastVolume flags.
/// </summary>
public short Flags
{
get { return mBaseHdr.Flags; }
}
/// <summary>
/// Gets the bit unit mask of the device. IE (bit 0 = A:, bit 1 = B:, etc..)
/// </summary>
public int Unitmask
{
get { return mBaseHdr.UnitMask; }
}
///<summary>
///Returns a <see cref="T:System.String"/> that represents the current <see cref="VolumeNotifyInfo"/>.
///</summary>
///
///<returns>
///A <see cref="System.String"/> that represents the current <see cref="VolumeNotifyInfo"/>.
///</returns>
public override string ToString()
{
return string.Format("[Letter:{0}] [IsNetworkVolume:{1}] [ChangeAffectsMediaInDrive:{2}] ",
Letter,
IsNetworkVolume,
ChangeAffectsMediaInDrive);
}
#endregion
}
}
|