Trigger4Win/Trigger/Classes/Device/CdRomDrive.cs
2015-04-10 00:09:58 +00:00

238 lines
9.1 KiB
C#

using System;
using System.Management;
namespace Trigger.Classes.Device
{
/// <summary>
/// <para>The Win32_CDROMDrive WMI class represents a CD-ROM drive on a computer system running Windows. Be aware that the name of the drive does not correspond to the logical drive letter assigned to the device.</para>
/// </summary>
public class CdRomDrive : StorageDisk
{
#region Enums
/// <summary>
/// <para>The availabilitys of the <see cref="CdRomDrive"/></para>
/// </summary>
public enum Availabilities : ushort
{
/// <summary></summary>
Other = 0x1,
/// <summary></summary>
Unknown = 0x2,
/// <summary><para>Running / Full power</para></summary>
Running_FullPower = 0x3,
/// <summary></summary>
Warning = 0x4,
/// <summary></summary>
InTest = 0x5,
/// <summary></summary>
NotApplicable = 0x6,
/// <summary></summary>
PowerOff = 0x7,
/// <summary></summary>
OffLine = 0x8,
/// <summary></summary>
OffDuty = 0x9,
/// <summary></summary>
Degraded = 0xA,
/// <summary></summary>
NotInstalled = 0xB,
/// <summary></summary>
InstallError = 0xC,
/// <summary><para>The device is known to be in a power save mode, but its exact status is unknown.</para></summary>
PowerSave_Unknown = 0xD,
/// <summary><para>The device is in a power save state but still functioning, and may exhibit degraded performance.</para></summary>
PowerSave_LowPowerMode = 0xE,
/// <summary><para>The device is not functioning, but could be brought to full power quickly.</para></summary>
PowerSave_Standby = 0xF,
/// <summary></summary>
PowerCycle = 0x10,
/// <summary><para>The device is in a warning state, though also in a power save mode.</para></summary>
PowerSave_Warning = 0x11,
}
/// <summary>
/// <para>The capability of the <see cref="CdRomDrive"/></para>
/// </summary>
public enum Capabilitiy : ushort
{
/// <summary></summary>
Unknown = 0,
/// <summary></summary>
Other = 1,
/// <summary></summary>
SequentialAccess = 2,
/// <summary></summary>
RandomAccess = 3,
/// <summary></summary>
SupportsWriting = 4,
/// <summary></summary>
Encryption = 5,
/// <summary></summary>
Compression = 6,
/// <summary></summary>
SupportsRemovableMedia = 7,
/// <summary></summary>
ManualCleaning = 8,
/// <summary></summary>
AutomaticCleaning = 9,
/// <summary></summary>
SMARTNotification = 10,
/// <summary></summary>
SupportsDualSidedMedia = 11,
/// <summary></summary>
PredismountEjectNotRequired = 12,
}
/// <summary>
/// <para>Errors and their codes that the config manager can return</para>
/// </summary>
public enum ConfigManagerErrorCodes : uint
{
///<summary><param>Device is working properly.</param></summary>
OK = 0x0,
///<summary><param>Device is not configured correctly.</param></summary>
Misconfigured = 0x1,
///<summary><param>Windows cannot load the driver for this device.</param></summary>
DriversNotLoaded = 0x2,
///<summary><param>Driver for this device might be corrupted, or the system may be low on memory or other resources.</param></summary>
CorruptDrivers = 0x3,
///<summary><param>Device is not working properly. One of its drivers or the registry might be corrupted.</param></summary>
DriverOrRegistryCorrupted = 0x4,
///<summary><param>Driver for the device requires a resource that Windows cannot manage.</param></summary>
UnmanagableResourceRequired = 0x5,
///<summary><param>Boot configuration for the device conflicts with other devices.</param></summary>
BootConfigConflict = 0x6,
///<summary><param>Cannot filter.</param></summary>
Unfilterable = 0x7,
///<summary><param>Driver loader for the device is missing.</param></summary>
DriverLoaderMissing = 0x8,
///<summary><param>Device is not working properly. The controlling firmware is incorrectly reporting the resources for the device.</param></summary>
FirmwareError = 0x9,
///<summary><param>Device cannot start.</param></summary>
CannotStart = 0xA,
///<summary><param>Device failed.</param></summary>
Failed = 0xB,
///<summary><param>Device cannot find enough free resources to use.</param></summary>
NoMemory = 0xC,
///<summary><param>Windows cannot verify the device's resources.</param></summary>
VerifyResourcesFailed = 0xD,
///<summary><param>Device cannot work properly until the computer is restarted.</param></summary>
RestartRequired = 0xE,
///<summary><param>Device is not working properly due to a possible re-enumeration problem.</param></summary>
ReEnumerationProblem = 0xF,
///<summary><param>Windows cannot identify all of the resources that the device uses.</param></summary>
NotAllResourcesIdentified = 0x10,
///<summary><param>Device is requesting an unknown resource type.</param></summary>
UnknownResourceRequested = 0x11,
///<summary><param>Device drivers must be reinstalled.</param></summary>
ReinstallDriver = 0x12,
///<summary><param>Failure using the VxD loader.</param></summary>
VxDLoaderFailed = 0x13,
///<summary><param>Registry might be corrupted.</param></summary>
RegistryCorrupted = 0x14,
///<summary><param>System failure. If changing the device driver is ineffective, see the hardware documentation. Windows is removing the device.</param></summary>
SystemFailure = 0x15,
///<summary><param>Device is disabled.</param></summary>
DeviceDisabled = 0x16,
///<summary><param>System failure. If changing the device driver is ineffective, see the hardware documentation.</param></summary>
SystemFailure2 = 0x17,
///<summary><param>Device is not present, not working properly, or does not have all of its drivers installed.</param></summary>
NotPresent = 0x18,
///<summary><param>Windows is still setting up the device.</param></summary>
SettingUp = 0x19,
///<summary><param>Windows is still setting up the device.</param></summary>
SettingUp2 = 0x1A,
///<summary><param>Device does not have valid log configuration.</param></summary>
InvalidLogConfig = 0x1B,
///<summary><param>Device drivers are not installed.</param></summary>
NoDrivers = 0x1C,
///<summary><param>Device is disabled. The device firmware did not provide the required resources.</param></summary>
FirmwareResourceError = 0x1D,
///<summary><param>Device is using an IRQ resource that another device is using.</param></summary>
IrqResourceConflict = 0x1E,
///<summary><param>Device is not working properly. Windows cannot load the required device drivers.</param></summary>
DriversNotLoaded2 = 0x1F,
}
#endregion
#region Properties
/// <summary><para>Availabilities and status of the device.</para></summary>
public Availabilities Availability
{
get;
internal set;
}
/// <summary><para>Array of capabilities of the media access device.</para></summary>
public ushort[] Capabilities
{
get;
internal set;
}
/// <summary><para>Short description of the object—a one-line string.</para></summary>
public string Caption
{
get;
internal set;
}
/// <summary><para>Windows Configuration Manager error code.</para></summary>
public ConfigManagerErrorCodes ConfigManagerErrorCode
{
get;
internal set;
}
/// <summary>Manufacturer of the Windows CD-ROM drive.</summary>
public string Manufacturer
{
get;
internal set;
}
/// <summary><para>Maximum size, in kilobytes, of media supported by this device.</para></summary>
public ulong MaxMediaSize
{
get;
internal set;
}
/// <summary><para>If True, a CD-ROM is in the drive.</para></summary>
public bool MediaLoaded
{
get;
internal set;
}
/// <summary>
/// <para>Type of media that can be used or accessed by this device.</para>
/// </summary>
/// <example>CdRomOnly, CdRomWrite, DVDRomOnly, DVDRomWrite</example>
public string MediaType
{
get;
internal set;
}
/// <summary>
/// <para>Transfer rate of the CD-ROM drive. A value of -1 indicates that the rate cannot be determined. When this happens, the CD is not in the drive. (kB/s)</para>
/// </summary>
public double TransferRate
{
get;
internal set;
}
#endregion
#region Constructors
/// <summary>
/// <para>Initialize a new instance with the given values.</para>
/// </summary>
/// <param name="mo"></param>
public CdRomDrive(ManagementObject mo) : base(mo["DeviceId"].ToString(), mo["Name"].ToString(), mo["Caption"].ToString())
{
this.Type = DeviceType.CD;
this.Availability = (Availabilities)mo["Availability"];
this.Capabilities = (ushort[])mo["Capabilities"];
this.Caption = mo["Caption"].ToString();
this.ConfigManagerErrorCode = (ConfigManagerErrorCodes)mo["ConfigManagerErrorCode"];
this.Manufacturer = mo["Manufacturer"].ToString();
this.MediaLoaded = Convert.ToBoolean(mo["MediaLoaded"]);
this.MediaType = mo["MediaType"].ToString();
this.TransferRate = (double)mo["TransferRate"];
}
#endregion
}
}