Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / IO / DriveInfo.cs / 1305376 / DriveInfo.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: DriveInfo
**
** [....]
**
**
** Purpose: Exposes routines for exploring a drive.
**
**
===========================================================*/
using System;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Security.Permissions;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
namespace System.IO
{
// Matches Win32's DRIVE_XXX #defines from winbase.h
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum DriveType
{
Unknown = 0,
NoRootDirectory = 1,
Removable = 2,
Fixed = 3,
Network = 4,
CDRom = 5,
Ram = 6
}
// Ideally we'll get a better security permission, but possibly
// not for Whidbey.
[Serializable]
[ComVisible(true)]
public sealed class DriveInfo : ISerializable
{
private String _name;
private const String NameField = "_name"; // For serialization
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public DriveInfo(String driveName)
{
if (driveName == null)
throw new ArgumentNullException("driveName");
Contract.EndContractBlock();
if (driveName.Length == 1)
_name = driveName + ":\\";
else {
// GetPathRoot does not check all invalid characters
Path.CheckInvalidPathChars(driveName);
_name = Path.GetPathRoot(driveName);
// Disallow null or empty drive letters and UNC paths
if (_name == null || _name.Length == 0 || _name.StartsWith("\\\\", StringComparison.Ordinal))
throw new ArgumentException(Environment.GetResourceString("Arg_MustBeDriveLetterOrRootDir"));
}
// We want to normalize to have a trailing backslash so we don't have two equivalent forms and
// because some Win32 API don't work without it.
if (_name.Length == 2 && _name[1] == ':') {
_name = _name + "\\";
}
// Now verify that the drive letter could be a real drive name.
// On Windows this means it's between A and Z, ignoring case.
// On a Unix platform, perhaps this should be a device name with
// a partition like /dev/hdc0, or possibly a mount point.
char letter = driveName[0];
if (!((letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z')))
throw new ArgumentException(Environment.GetResourceString("Arg_MustBeDriveLetterOrRootDir"));
// Now do a security check.
String demandPath = _name + '.';
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, demandPath).Demand();
}
[System.Security.SecurityCritical] // auto-generated
private DriveInfo(SerializationInfo info, StreamingContext context)
{
// Need to add in a security check here once it has been spec'ed.
_name = (String) info.GetValue(NameField, typeof(String));
// Now do a security check.
String demandPath = _name + '.';
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, demandPath).Demand();
}
public String Name {
get { return _name; }
}
public DriveType DriveType {
[System.Security.SecuritySafeCritical] // auto-generated
get {
// GetDriveType can't fail
return (DriveType) Win32Native.GetDriveType(Name);
}
}
public String DriveFormat {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
const int volNameLen = 50;
StringBuilder volumeName = new StringBuilder(volNameLen);
const int fileSystemNameLen = 50;
StringBuilder fileSystemName = new StringBuilder(fileSystemNameLen);
int serialNumber, maxFileNameLen, fileSystemFlags;
int oldMode = Win32Native.SetErrorMode(Win32Native.SEM_FAILCRITICALERRORS);
try {
bool r = Win32Native.GetVolumeInformation(Name, volumeName, volNameLen, out serialNumber, out maxFileNameLen, out fileSystemFlags, fileSystemName, fileSystemNameLen);
if (!r) {
int errorCode = Marshal.GetLastWin32Error();
__Error.WinIODriveError(Name, errorCode);
}
}
finally {
Win32Native.SetErrorMode(oldMode);
}
return fileSystemName.ToString();
}
}
public bool IsReady {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
get {
return Directory.InternalExists(Name);
}
}
public long AvailableFreeSpace {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
long userBytes, totalBytes, freeBytes;
int oldMode = Win32Native.SetErrorMode(Win32Native.SEM_FAILCRITICALERRORS);
try {
bool r = Win32Native.GetDiskFreeSpaceEx(Name, out userBytes, out totalBytes, out freeBytes);
if (!r)
__Error.WinIODriveError(Name);
}
finally {
Win32Native.SetErrorMode(oldMode);
}
return userBytes;
}
}
public long TotalFreeSpace {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
long userBytes, totalBytes, freeBytes;
int oldMode = Win32Native.SetErrorMode(Win32Native.SEM_FAILCRITICALERRORS);
try {
bool r = Win32Native.GetDiskFreeSpaceEx(Name, out userBytes, out totalBytes, out freeBytes);
if (!r)
__Error.WinIODriveError(Name);
}
finally {
Win32Native.SetErrorMode(oldMode);
}
return freeBytes;
}
}
public long TotalSize {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
// Don't cache this, to handle variable sized floppy drives
// or other various removable media drives.
long userBytes, totalBytes, freeBytes;
int oldMode = Win32Native.SetErrorMode(Win32Native.SEM_FAILCRITICALERRORS);
try {
bool r = Win32Native.GetDiskFreeSpaceEx(Name, out userBytes, out totalBytes, out freeBytes);
if (!r)
__Error.WinIODriveError(Name);
}
finally {
Win32Native.SetErrorMode(oldMode);
}
return totalBytes;
}
}
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public static DriveInfo[] GetDrives()
{
// Directory.GetLogicalDrives demands unmanaged code permission
String[] drives = Directory.GetLogicalDrives();
DriveInfo[] di = new DriveInfo[drives.Length];
for(int i=0; i
[System.Security.SecurityCritical]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
// No need for an additional security check - everything is public.
info.AddValue(NameField, _name, typeof(String));
}
#endif
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: DriveInfo
**
** [....]
**
**
** Purpose: Exposes routines for exploring a drive.
**
**
===========================================================*/
using System;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Security.Permissions;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
namespace System.IO
{
// Matches Win32's DRIVE_XXX #defines from winbase.h
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum DriveType
{
Unknown = 0,
NoRootDirectory = 1,
Removable = 2,
Fixed = 3,
Network = 4,
CDRom = 5,
Ram = 6
}
// Ideally we'll get a better security permission, but possibly
// not for Whidbey.
[Serializable]
[ComVisible(true)]
public sealed class DriveInfo : ISerializable
{
private String _name;
private const String NameField = "_name"; // For serialization
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public DriveInfo(String driveName)
{
if (driveName == null)
throw new ArgumentNullException("driveName");
Contract.EndContractBlock();
if (driveName.Length == 1)
_name = driveName + ":\\";
else {
// GetPathRoot does not check all invalid characters
Path.CheckInvalidPathChars(driveName);
_name = Path.GetPathRoot(driveName);
// Disallow null or empty drive letters and UNC paths
if (_name == null || _name.Length == 0 || _name.StartsWith("\\\\", StringComparison.Ordinal))
throw new ArgumentException(Environment.GetResourceString("Arg_MustBeDriveLetterOrRootDir"));
}
// We want to normalize to have a trailing backslash so we don't have two equivalent forms and
// because some Win32 API don't work without it.
if (_name.Length == 2 && _name[1] == ':') {
_name = _name + "\\";
}
// Now verify that the drive letter could be a real drive name.
// On Windows this means it's between A and Z, ignoring case.
// On a Unix platform, perhaps this should be a device name with
// a partition like /dev/hdc0, or possibly a mount point.
char letter = driveName[0];
if (!((letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z')))
throw new ArgumentException(Environment.GetResourceString("Arg_MustBeDriveLetterOrRootDir"));
// Now do a security check.
String demandPath = _name + '.';
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, demandPath).Demand();
}
[System.Security.SecurityCritical] // auto-generated
private DriveInfo(SerializationInfo info, StreamingContext context)
{
// Need to add in a security check here once it has been spec'ed.
_name = (String) info.GetValue(NameField, typeof(String));
// Now do a security check.
String demandPath = _name + '.';
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, demandPath).Demand();
}
public String Name {
get { return _name; }
}
public DriveType DriveType {
[System.Security.SecuritySafeCritical] // auto-generated
get {
// GetDriveType can't fail
return (DriveType) Win32Native.GetDriveType(Name);
}
}
public String DriveFormat {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
const int volNameLen = 50;
StringBuilder volumeName = new StringBuilder(volNameLen);
const int fileSystemNameLen = 50;
StringBuilder fileSystemName = new StringBuilder(fileSystemNameLen);
int serialNumber, maxFileNameLen, fileSystemFlags;
int oldMode = Win32Native.SetErrorMode(Win32Native.SEM_FAILCRITICALERRORS);
try {
bool r = Win32Native.GetVolumeInformation(Name, volumeName, volNameLen, out serialNumber, out maxFileNameLen, out fileSystemFlags, fileSystemName, fileSystemNameLen);
if (!r) {
int errorCode = Marshal.GetLastWin32Error();
__Error.WinIODriveError(Name, errorCode);
}
}
finally {
Win32Native.SetErrorMode(oldMode);
}
return fileSystemName.ToString();
}
}
public bool IsReady {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
get {
return Directory.InternalExists(Name);
}
}
public long AvailableFreeSpace {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
long userBytes, totalBytes, freeBytes;
int oldMode = Win32Native.SetErrorMode(Win32Native.SEM_FAILCRITICALERRORS);
try {
bool r = Win32Native.GetDiskFreeSpaceEx(Name, out userBytes, out totalBytes, out freeBytes);
if (!r)
__Error.WinIODriveError(Name);
}
finally {
Win32Native.SetErrorMode(oldMode);
}
return userBytes;
}
}
public long TotalFreeSpace {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
long userBytes, totalBytes, freeBytes;
int oldMode = Win32Native.SetErrorMode(Win32Native.SEM_FAILCRITICALERRORS);
try {
bool r = Win32Native.GetDiskFreeSpaceEx(Name, out userBytes, out totalBytes, out freeBytes);
if (!r)
__Error.WinIODriveError(Name);
}
finally {
Win32Native.SetErrorMode(oldMode);
}
return freeBytes;
}
}
public long TotalSize {
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
// Don't cache this, to handle variable sized floppy drives
// or other various removable media drives.
long userBytes, totalBytes, freeBytes;
int oldMode = Win32Native.SetErrorMode(Win32Native.SEM_FAILCRITICALERRORS);
try {
bool r = Win32Native.GetDiskFreeSpaceEx(Name, out userBytes, out totalBytes, out freeBytes);
if (!r)
__Error.WinIODriveError(Name);
}
finally {
Win32Native.SetErrorMode(oldMode);
}
return totalBytes;
}
}
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public static DriveInfo[] GetDrives()
{
// Directory.GetLogicalDrives demands unmanaged code permission
String[] drives = Directory.GetLogicalDrives();
DriveInfo[] di = new DriveInfo[drives.Length];
for(int i=0; i
[System.Security.SecurityCritical]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
// No need for an additional security check - everything is public.
info.AddValue(NameField, _name, typeof(String));
}
#endif
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NavigationService.cs
- BindingFormattingDialog.cs
- FormClosingEvent.cs
- LinqDataSourceContextEventArgs.cs
- DesignerTransaction.cs
- TargetFrameworkAttribute.cs
- FloaterBaseParagraph.cs
- TypeToStringValueConverter.cs
- WebBrowserSiteBase.cs
- HttpGetClientProtocol.cs
- BaseResourcesBuildProvider.cs
- SR.cs
- DataViewListener.cs
- PocoEntityKeyStrategy.cs
- CompilationAssemblyInstallComponent.cs
- XmlSecureResolver.cs
- PageParser.cs
- FontCacheLogic.cs
- ComplexPropertyEntry.cs
- SecureStringHasher.cs
- XmlElementAttributes.cs
- JsonWriter.cs
- XPathNodePointer.cs
- Utils.cs
- MiniConstructorInfo.cs
- BufferedGraphics.cs
- HttpDebugHandler.cs
- ByteAnimation.cs
- WindowsFormsEditorServiceHelper.cs
- WSSecureConversation.cs
- InvariantComparer.cs
- RegistryPermission.cs
- DataBoundControlAdapter.cs
- _SecureChannel.cs
- XmlSchemaSequence.cs
- ReliabilityContractAttribute.cs
- AuthenticationManager.cs
- HotSpotCollection.cs
- HtmlUtf8RawTextWriter.cs
- ConnectionConsumerAttribute.cs
- TraversalRequest.cs
- AlternationConverter.cs
- DetailsViewUpdatedEventArgs.cs
- UnsafeNativeMethodsTablet.cs
- DataExchangeServiceBinder.cs
- BindingExpression.cs
- SmtpReplyReaderFactory.cs
- ReceiveActivity.cs
- ComponentResourceKey.cs
- XmlSequenceWriter.cs
- EventWaitHandle.cs
- CacheOutputQuery.cs
- ExecutionEngineException.cs
- EmbeddedMailObject.cs
- EventManager.cs
- SafeArrayRankMismatchException.cs
- TypeDescriptionProvider.cs
- ParallelTimeline.cs
- SystemDiagnosticsSection.cs
- WindowsSecurityToken.cs
- MouseCaptureWithinProperty.cs
- DependencyObject.cs
- ItemCheckEvent.cs
- Error.cs
- TreeNode.cs
- ForEachDesigner.xaml.cs
- ComponentResourceKey.cs
- OrderedDictionaryStateHelper.cs
- TextComposition.cs
- recordstatescratchpad.cs
- AnimatedTypeHelpers.cs
- ProxyElement.cs
- FlowDocument.cs
- RectAnimationBase.cs
- HttpProfileGroupBase.cs
- GenericFlowSwitchHelper.cs
- Bitmap.cs
- NTAccount.cs
- DeclarativeCatalogPart.cs
- MethodBody.cs
- LeftCellWrapper.cs
- GroupBoxRenderer.cs
- RootProjectionNode.cs
- XmlSchemas.cs
- OledbConnectionStringbuilder.cs
- mansign.cs
- FixUp.cs
- WebPartDisplayModeCancelEventArgs.cs
- DecoderReplacementFallback.cs
- CompositeControlDesigner.cs
- DebugView.cs
- CustomAttributeBuilder.cs
- TextOptions.cs
- ListControlConvertEventArgs.cs
- NullableBoolConverter.cs
- PromptStyle.cs
- InvalidDocumentContentsException.cs
- IEnumerable.cs
- TreeViewImageIndexConverter.cs
- LocalClientSecuritySettings.cs