using System;
using System.Threading;
using System.Collections;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.InteropServices.CustomMarshalers;
using System.Text.RegularExpressions;
namespace Storage.Interop.IMAPIv2Raw
{
#region Interfaces
/// Use this interface to enumerate the CD and DVD devices installed on the computer.
[
ComImport,
Guid("25983550-9D65-49CE-B335-40630D901227"),
InterfaceType(ComInterfaceType.InterfaceIsDual)
]
public interface IRawCDImageCreator
{
// Methods
[DispId(0x200)]
IStream CreateResultImage();
[DispId(0x201)]
int AddTrack(CDSectorType dataType, IStream data);
[DispId(0x202)]
void AddSpecialPregap(IStream data);
[DispId(0x203)]
void AddSubcodeRWGenerator(IStream subcode);
// Properties
[DispId(0x100)]
Storage.Interop.IMAPIv2.Format2RawCDDataSectorType ResultingImageType{ set; get; }
[DispId(0x101)]
int StartOfLeadout{ get; }
[DispId(0x102)]
int StartOfLeadoutLimit { set; get; }
[DispId(0x103)]
bool DisableGaplessAudio { set; [return: MarshalAs(UnmanagedType.VariantBool)] get; }
[DispId(0x104)]
String MediaCatalogNumber { set; [return: MarshalAs(UnmanagedType.BStr)] get; }
// BUGBUG: How to do range??? [in,range(1,99)] LONG value
[DispId(0x105)]
int StartingTrackNumber { set; get; }
//[DispId(0x106)]
//IRawCDImageTrackInfo TrackInfo{ int trackIndex get; }
[DispId(0x107)]
int NumberOfExistingTracks { get; }
[DispId(0x108)]
int LastUsedUserSectorInImage { get; }
[DispId(0x109)]
String[] ExpectedTableOfContents { [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] get; }
}
/// Use this interface to enumerate the CD and DVD devices installed on the computer.
[
ComImport,
Guid("25983551-9D65-49CE-B335-40630D901227"),
InterfaceType(ComInterfaceType.InterfaceIsDual)
]
public interface IRawCDImageTrackInfo
{
// Properties
[DispId(0x100)]
int StartingLba { get; }
[DispId(0x101)]
int SectorCount { get; }
[DispId(0x102)]
int TrackNumber { get; }
[DispId(0x103)]
CDSectorType SectorType { get; }
[DispId(0x104)]
bool ISRC { set; [return: MarshalAs(UnmanagedType.BStr)] get; }
[DispId(0x105)]
CDTrackDigitalCopySetting DigitalAudioCopySetting { set; get; }
[DispId(0x106)]
bool AudioHasPreemphasis { set; [return: MarshalAs(UnmanagedType.VariantBool)] get; }
[DispId(0x107)]
String[] TrackIndexes { [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] get; }
// Methods
// range [in,range(0,0x7FFFFFFF)] LONG
[DispId(0x200)]
void AddTrackIndex( int lbaOffset);
// range [in, range(0,0x7FFFFFFF)] LONG
[DispId(0x201)]
void ClearTrackIndex( int lbaOffset);
}
#endregion Interfaces
#region CoClass
///
///
///
[
ComImport,
Guid("25983550-9D65-49CE-B335-40630D901227"),
CoClass(typeof(MsftRawCDImageCreatorClass))
]
public interface MsftRawCDImageCreator : IRawCDImageCreator
{
}
#endregion CoClass
#region Class
///
///
///
[
ComImport,
Guid("25983561-9D65-49CE-B335-40630D901227"),
ClassInterface(ClassInterfaceType.None),
TypeLibType(TypeLibTypeFlags.FCanCreate)
]
public class MsftRawCDImageCreatorClass
{
}
#endregion Class
#region Enumerators
[Serializable]
public enum CDSectorType : int
{
Audio = 0x00,
ModeZero = 0x01,
Mode1 = 0x02,
Mode2Form0 = 0x03,
Mode2Form1 = 0x04,
Mode2Form2 = 0x05,
Mode1Raw = 0x06,
Mode2Form0Raw = 0x07,
Mode2Form1Raw = 0x08,
Mode2Form2Raw = 0x09,
}
[Serializable]
public enum CDTrackDigitalCopySetting : int
{
Permitted = 0x00,
Prohibited = 0x01,
SCMS = 0x02,
}
#endregion Enumerators
}