/* Automated generated idl file <imapi2>.
 * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
 */

#include <windows.h>

/* Interface forward declarations.  */
interface DDiscMaster2Events;
interface DWriteEngine2Events;
interface DDiscFormat2EraseEvents;
interface DDiscFormat2DataEvents;
interface DDiscFormat2TrackAtOnceEvents;
interface DDiscFormat2RawCDEvents;
interface IStream;
interface ISequentialStream;
interface IBurnVerification;
interface IConnectionPointContainer;
interface IEnumConnectionPoints;
interface IConnectionPoint;
interface IEnumConnections;
interface IDiscRecorder2Ex;
interface IStreamPseudoRandomBased;
interface IStreamConcatenate;
interface IStreamInterleave;
interface IMultisessionSequential;
interface IMultisession;

/* Structure forward declarations.  */
struct _LARGE_INTEGER;
struct _ULARGE_INTEGER;
struct tagSTATSTG;
struct _FILETIME;
struct tagCONNECTDATA;

/* Union record forward declarations.  */
dispinterface IWriteEngine2EventArgs;
dispinterface IDiscFormat2DataEventArgs;
dispinterface IDiscFormat2TrackAtOnceEventArgs;
dispinterface IDiscFormat2RawCDEventArgs;
dispinterface IWriteSpeedDescriptor;
dispinterface IRawCDImageCreator;
dispinterface IRawCDImageTrackInfo;
dispinterface IDiscMaster2;
dispinterface IDiscRecorder2;
dispinterface IWriteEngine2;
dispinterface IDiscFormat2Erase;
dispinterface IDiscFormat2;
dispinterface IDiscFormat2Data;
dispinterface IDiscFormat2TrackAtOnce;
dispinterface IDiscFormat2RawCD;

/* Union record forward declarations.  */
coclass MsftDiscMaster2;
coclass MsftDiscRecorder2;
coclass MsftWriteEngine2;
coclass MsftDiscFormat2Erase;
coclass MsftDiscFormat2Data;
coclass MsftDiscFormat2TrackAtOnce;
coclass MsftDiscFormat2RawCD;
coclass MsftStreamZero;
coclass MsftStreamPrng001;
coclass MsftStreamConcatenate;
coclass MsftStreamInterleave;
coclass MsftWriteSpeedDescriptor;
coclass MsftMultisessionSequential;
coclass MsftRawCDImageCreator;

/* Enumeration declarations.  */
[
  helpstring("The current action being performed for the data write")
]
enum _IMAPI_FORMAT2_DATA_WRITE_ACTION
{
  IMAPI_FORMAT2_DATA_WRITE_ACTION_VALIDATING_MEDIA = (int) 201326592,
  IMAPI_FORMAT2_DATA_WRITE_ACTION_FORMATTING_MEDIA = (int) 201326593,
  IMAPI_FORMAT2_DATA_WRITE_ACTION_INITIALIZING_HARDWARE = (int) 201326594,
  IMAPI_FORMAT2_DATA_WRITE_ACTION_CALIBRATING_POWER = (int) 201326595,
  IMAPI_FORMAT2_DATA_WRITE_ACTION_WRITING_DATA = (int) 201326596,
  IMAPI_FORMAT2_DATA_WRITE_ACTION_FINALIZATION = (int) 201326597,
  IMAPI_FORMAT2_DATA_WRITE_ACTION_COMPLETED = (int) 201326598,
  IMAPI_FORMAT2_DATA_WRITE_ACTION_VERIFYING = (int) 201326599
};
[
  helpstring("Current action when writing to CD in Track-at-Once mode")
]
enum _IMAPI_FORMAT2_TAO_WRITE_ACTION
{
  IMAPI_FORMAT2_TAO_WRITE_ACTION_UNKNOWN = (int) 201326592,
  IMAPI_FORMAT2_TAO_WRITE_ACTION_PREPARING = (int) 201326593,
  IMAPI_FORMAT2_TAO_WRITE_ACTION_WRITING = (int) 201326594,
  IMAPI_FORMAT2_TAO_WRITE_ACTION_FINISHING = (int) 201326595,
  IMAPI_FORMAT2_TAO_WRITE_ACTION_VERIFYING = (int) 201326596
};
[
  helpstring("Current action when writing to the CD in Disc-At-Once (RAW) mode")
]
enum _IMAPI_FORMAT2_RAW_CD_WRITE_ACTION
{
  IMAPI_FORMAT2_RAW_CD_WRITE_ACTION_UNKNOWN = (int) 201326592,
  IMAPI_FORMAT2_RAW_CD_WRITE_ACTION_PREPARING = (int) 201326593,
  IMAPI_FORMAT2_RAW_CD_WRITE_ACTION_WRITING = (int) 201326594,
  IMAPI_FORMAT2_RAW_CD_WRITE_ACTION_FINISHING = (int) 201326595
};
[
  helpstring("Physical type of the optical media")
]
enum _IMAPI_MEDIA_PHYSICAL_TYPE
{
  IMAPI_MEDIA_TYPE_UNKNOWN = (int) 201326592,
  IMAPI_MEDIA_TYPE_CDROM = (int) 201326593,
  IMAPI_MEDIA_TYPE_CDR = (int) 201326594,
  IMAPI_MEDIA_TYPE_CDRW = (int) 201326595,
  IMAPI_MEDIA_TYPE_DVDROM = (int) 201326596,
  IMAPI_MEDIA_TYPE_DVDRAM = (int) 201326597,
  IMAPI_MEDIA_TYPE_DVDPLUSR = (int) 201326598,
  IMAPI_MEDIA_TYPE_DVDPLUSRW = (int) 201326599,
  IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER = (int) 201326600,
  IMAPI_MEDIA_TYPE_DVDDASHR = (int) 201326601,
  IMAPI_MEDIA_TYPE_DVDDASHRW = (int) 201326602,
  IMAPI_MEDIA_TYPE_DVDDASHR_DUALLAYER = (int) 201326603,
  IMAPI_MEDIA_TYPE_DISK = (int) 201326604,
  IMAPI_MEDIA_TYPE_DVDPLUSRW_DUALLAYER = (int) 201326605,
  IMAPI_MEDIA_TYPE_HDDVDROM = (int) 201326606,
  IMAPI_MEDIA_TYPE_HDDVDR = (int) 201326607,
  IMAPI_MEDIA_TYPE_HDDVDRAM = (int) 201326608,
  IMAPI_MEDIA_TYPE_BDROM = (int) 201326609,
  IMAPI_MEDIA_TYPE_BDR = (int) 201326610,
  IMAPI_MEDIA_TYPE_BDRE = (int) 201326611,
  IMAPI_MEDIA_TYPE_MAX = (int) 201326611
};
[
  helpstring("The CD sector type for provided data")
]
enum _IMAPI_CD_SECTOR_TYPE
{
  IMAPI_CD_SECTOR_AUDIO = (int) 201326592,
  IMAPI_CD_SECTOR_MODE_ZERO = (int) 201326593,
  IMAPI_CD_SECTOR_MODE1 = (int) 201326594,
  IMAPI_CD_SECTOR_MODE2FORM0 = (int) 201326595,
  IMAPI_CD_SECTOR_MODE2FORM1 = (int) 201326596,
  IMAPI_CD_SECTOR_MODE2FORM2 = (int) 201326597,
  IMAPI_CD_SECTOR_MODE1RAW = (int) 201326598,
  IMAPI_CD_SECTOR_MODE2FORM0RAW = (int) 201326599,
  IMAPI_CD_SECTOR_MODE2FORM1RAW = (int) 201326600,
  IMAPI_CD_SECTOR_MODE2FORM2RAW = (int) 201326601
};
[
  helpstring("Data sector type to use when writing to CD in Disc-At-Once (RAW) mode")
]
enum _IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE
{
  IMAPI_FORMAT2_RAW_CD_SUBCODE_PQ_ONLY = (int) 201326593,
  IMAPI_FORMAT2_RAW_CD_SUBCODE_IS_COOKED = (int) 201326594,
  IMAPI_FORMAT2_RAW_CD_SUBCODE_IS_RAW = (int) 201326595
};
[
  helpstring("The audio track digital copy setting")
]
enum _IMAPI_CD_TRACK_DIGITAL_COPY_SETTING
{
  IMAPI_CD_TRACK_DIGITAL_COPY_PERMITTED = (int) 201326592,
  IMAPI_CD_TRACK_DIGITAL_COPY_PROHIBITED = (int) 201326593,
  IMAPI_CD_TRACK_DIGITAL_COPY_SCMS = (int) 201326594
};
[
  helpstring("Burn verification level")
]
enum _IMAPI_BURN_VERIFICATION_LEVEL
{
  IMAPI_BURN_VERIFICATION_NONE = (int) 201326592,
  IMAPI_BURN_VERIFICATION_QUICK = (int) 201326593,
  IMAPI_BURN_VERIFICATION_FULL = (int) 201326594
};
[
  helpstring("Address type provided for reading track information")
]
enum _IMAPI_READ_TRACK_ADDRESS_TYPE
{
  IMAPI_READ_TRACK_ADDRESS_TYPE_LBA = (int) 201326592,
  IMAPI_READ_TRACK_ADDRESS_TYPE_TRACK = (int) 201326593,
  IMAPI_READ_TRACK_ADDRESS_TYPE_SESSION = (int) 201326594
};
[
  helpstring("Type of the feature page data")
]
enum _IMAPI_FEATURE_PAGE_TYPE
{
  IMAPI_FEATURE_PAGE_TYPE_PROFILE_LIST = (int) 201326592,
  IMAPI_FEATURE_PAGE_TYPE_CORE = (int) 201326593,
  IMAPI_FEATURE_PAGE_TYPE_MORPHING = (int) 201326594,
  IMAPI_FEATURE_PAGE_TYPE_REMOVABLE_MEDIUM = (int) 201326595,
  IMAPI_FEATURE_PAGE_TYPE_WRITE_PROTECT = (int) 201326596,
  IMAPI_FEATURE_PAGE_TYPE_RANDOMLY_READABLE = (int) 201326608,
  IMAPI_FEATURE_PAGE_TYPE_CD_MULTIREAD = (int) 201326621,
  IMAPI_FEATURE_PAGE_TYPE_CD_READ = (int) 201326622,
  IMAPI_FEATURE_PAGE_TYPE_DVD_READ = (int) 201326623,
  IMAPI_FEATURE_PAGE_TYPE_RANDOMLY_WRITABLE = (int) 201326624,
  IMAPI_FEATURE_PAGE_TYPE_INCREMENTAL_STREAMING_WRITABLE = (int) 201326625,
  IMAPI_FEATURE_PAGE_TYPE_SECTOR_ERASABLE = (int) 201326626,
  IMAPI_FEATURE_PAGE_TYPE_FORMATTABLE = (int) 201326627,
  IMAPI_FEATURE_PAGE_TYPE_HARDWARE_DEFECT_MANAGEMENT = (int) 201326628,
  IMAPI_FEATURE_PAGE_TYPE_WRITE_ONCE = (int) 201326629,
  IMAPI_FEATURE_PAGE_TYPE_RESTRICTED_OVERWRITE = (int) 201326630,
  IMAPI_FEATURE_PAGE_TYPE_CDRW_CAV_WRITE = (int) 201326631,
  IMAPI_FEATURE_PAGE_TYPE_MRW = (int) 201326632,
  IMAPI_FEATURE_PAGE_TYPE_ENHANCED_DEFECT_REPORTING = (int) 201326633,
  IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_RW = (int) 201326634,
  IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_R = (int) 201326635,
  IMAPI_FEATURE_PAGE_TYPE_RIGID_RESTRICTED_OVERWRITE = (int) 201326636,
  IMAPI_FEATURE_PAGE_TYPE_CD_TRACK_AT_ONCE = (int) 201326637,
  IMAPI_FEATURE_PAGE_TYPE_CD_MASTERING = (int) 201326638,
  IMAPI_FEATURE_PAGE_TYPE_DVD_DASH_WRITE = (int) 201326639,
  IMAPI_FEATURE_PAGE_TYPE_DOUBLE_DENSITY_CD_READ = (int) 201326640,
  IMAPI_FEATURE_PAGE_TYPE_DOUBLE_DENSITY_CD_R_WRITE = (int) 201326641,
  IMAPI_FEATURE_PAGE_TYPE_DOUBLE_DENSITY_CD_RW_WRITE = (int) 201326642,
  IMAPI_FEATURE_PAGE_TYPE_LAYER_JUMP_RECORDING = (int) 201326643,
  IMAPI_FEATURE_PAGE_TYPE_CD_RW_MEDIA_WRITE_SUPPORT = (int) 201326647,
  IMAPI_FEATURE_PAGE_TYPE_BD_PSEUDO_OVERWRITE = (int) 201326648,
  IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_R_DUAL_LAYER = (int) 201326651,
  IMAPI_FEATURE_PAGE_TYPE_BD_READ = (int) 201326656,
  IMAPI_FEATURE_PAGE_TYPE_BD_WRITE = (int) 201326657,
  IMAPI_FEATURE_PAGE_TYPE_HD_DVD_READ = (int) 201326672,
  IMAPI_FEATURE_PAGE_TYPE_HD_DVD_WRITE = (int) 201326673,
  IMAPI_FEATURE_PAGE_TYPE_POWER_MANAGEMENT = (int) 201326848,
  IMAPI_FEATURE_PAGE_TYPE_SMART = (int) 201326849,
  IMAPI_FEATURE_PAGE_TYPE_EMBEDDED_CHANGER = (int) 201326850,
  IMAPI_FEATURE_PAGE_TYPE_CD_ANALOG_PLAY = (int) 201326851,
  IMAPI_FEATURE_PAGE_TYPE_MICROCODE_UPDATE = (int) 201326852,
  IMAPI_FEATURE_PAGE_TYPE_TIMEOUT = (int) 201326853,
  IMAPI_FEATURE_PAGE_TYPE_DVD_CSS = (int) 201326854,
  IMAPI_FEATURE_PAGE_TYPE_REAL_TIME_STREAMING = (int) 201326855,
  IMAPI_FEATURE_PAGE_TYPE_LOGICAL_UNIT_SERIAL_NUMBER = (int) 201326856,
  IMAPI_FEATURE_PAGE_TYPE_MEDIA_SERIAL_NUMBER = (int) 201326857,
  IMAPI_FEATURE_PAGE_TYPE_DISC_CONTROL_BLOCKS = (int) 201326858,
  IMAPI_FEATURE_PAGE_TYPE_DVD_CPRM = (int) 201326859,
  IMAPI_FEATURE_PAGE_TYPE_FIRMWARE_INFORMATION = (int) 201326860,
  IMAPI_FEATURE_PAGE_TYPE_AACS = (int) 201326861,
  IMAPI_FEATURE_PAGE_TYPE_VCPS = (int) 201326864
};
[
  helpstring("Type of the mode page data")
]
enum _IMAPI_MODE_PAGE_TYPE
{
  IMAPI_MODE_PAGE_TYPE_READ_WRITE_ERROR_RECOVERY = (int) 201326593,
  IMAPI_MODE_PAGE_TYPE_MRW = (int) 201326595,
  IMAPI_MODE_PAGE_TYPE_WRITE_PARAMETERS = (int) 201326597,
  IMAPI_MODE_PAGE_TYPE_CACHING = (int) 201326600,
  IMAPI_MODE_PAGE_TYPE_INFORMATIONAL_EXCEPTIONS = (int) 201326620,
  IMAPI_MODE_PAGE_TYPE_TIMEOUT_AND_PROTECT = (int) 201326621,
  IMAPI_MODE_PAGE_TYPE_POWER_CONDITION = (int) 201326618,
  IMAPI_MODE_PAGE_TYPE_LEGACY_CAPABILITIES = (int) 201326634
};
[
  helpstring("Mode page data type to request")
]
enum _IMAPI_MODE_PAGE_REQUEST_TYPE
{
  IMAPI_MODE_PAGE_REQUEST_TYPE_CURRENT_VALUES = (int) 201326592,
  IMAPI_MODE_PAGE_REQUEST_TYPE_CHANGEABLE_VALUES = (int) 201326593,
  IMAPI_MODE_PAGE_REQUEST_TYPE_DEFAULT_VALUES = (int) 201326594,
  IMAPI_MODE_PAGE_REQUEST_TYPE_SAVED_VALUES = (int) 201326595
};
[
  helpstring("Type of the profile in feature page data")
]
enum _IMAPI_PROFILE_TYPE
{
  IMAPI_PROFILE_TYPE_INVALID = (int) 201326592,
  IMAPI_PROFILE_TYPE_NON_REMOVABLE_DISK = (int) 201326593,
  IMAPI_PROFILE_TYPE_REMOVABLE_DISK = (int) 201326594,
  IMAPI_PROFILE_TYPE_MO_ERASABLE = (int) 201326595,
  IMAPI_PROFILE_TYPE_MO_WRITE_ONCE = (int) 201326596,
  IMAPI_PROFILE_TYPE_AS_MO = (int) 201326597,
  IMAPI_PROFILE_TYPE_CDROM = (int) 201326600,
  IMAPI_PROFILE_TYPE_CD_RECORDABLE = (int) 201326601,
  IMAPI_PROFILE_TYPE_CD_REWRITABLE = (int) 201326602,
  IMAPI_PROFILE_TYPE_DVDROM = (int) 201326608,
  IMAPI_PROFILE_TYPE_DVD_DASH_RECORDABLE = (int) 201326609,
  IMAPI_PROFILE_TYPE_DVD_RAM = (int) 201326610,
  IMAPI_PROFILE_TYPE_DVD_DASH_REWRITABLE = (int) 201326611,
  IMAPI_PROFILE_TYPE_DVD_DASH_RW_SEQUENTIAL = (int) 201326612,
  IMAPI_PROFILE_TYPE_DVD_DASH_R_DUAL_SEQUENTIAL = (int) 201326613,
  IMAPI_PROFILE_TYPE_DVD_DASH_R_DUAL_LAYER_JUMP = (int) 201326614,
  IMAPI_PROFILE_TYPE_DVD_PLUS_RW = (int) 201326618,
  IMAPI_PROFILE_TYPE_DVD_PLUS_R = (int) 201326619,
  IMAPI_PROFILE_TYPE_DDCDROM = (int) 201326624,
  IMAPI_PROFILE_TYPE_DDCD_RECORDABLE = (int) 201326625,
  IMAPI_PROFILE_TYPE_DDCD_REWRITABLE = (int) 201326626,
  IMAPI_PROFILE_TYPE_DVD_PLUS_RW_DUAL = (int) 201326634,
  IMAPI_PROFILE_TYPE_DVD_PLUS_R_DUAL = (int) 201326635,
  IMAPI_PROFILE_TYPE_BD_ROM = (int) 201326656,
  IMAPI_PROFILE_TYPE_BD_R_SEQUENTIAL = (int) 201326657,
  IMAPI_PROFILE_TYPE_BD_R_RANDOM_RECORDING = (int) 201326658,
  IMAPI_PROFILE_TYPE_BD_REWRITABLE = (int) 201326659,
  IMAPI_PROFILE_TYPE_HD_DVD_ROM = (int) 201326672,
  IMAPI_PROFILE_TYPE_HD_DVD_RECORDABLE = (int) 201326673,
  IMAPI_PROFILE_TYPE_HD_DVD_RAM = (int) 201326674,
  IMAPI_PROFILE_TYPE_NON_STANDARD = (int) 201392127
};
[
  helpstring("Set of flags to indicate current media state")
]
enum _IMAPI_FORMAT2_DATA_MEDIA_STATE
{
  IMAPI_FORMAT2_DATA_MEDIA_STATE_UNKNOWN = (int) 201326592,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_INFORMATIONAL_MASK = (int) 201326607,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_UNSUPPORTED_MASK = (int) 201391104,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_OVERWRITE_ONLY = (int) 201326593,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_RANDOMLY_WRITABLE = (int) 201326593,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_BLANK = (int) 201326594,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_APPENDABLE = (int) 201326596,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_FINAL_SESSION = (int) 201326600,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_DAMAGED = (int) 201327616,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_ERASE_REQUIRED = (int) 201328640,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_NON_EMPTY_SESSION = (int) 201330688,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_WRITE_PROTECTED = (int) 201334784,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_FINALIZED = (int) 201342976,
  IMAPI_FORMAT2_DATA_MEDIA_STATE_UNSUPPORTED_MEDIA = (int) 201359360
};
[
  helpstring("Detected write protection type of the media")
]
enum _IMAPI_MEDIA_WRITE_PROTECT_STATE
{
  IMAPI_WRITEPROTECTED_UNTIL_POWERDOWN = (int) 201326593,
  IMAPI_WRITEPROTECTED_BY_CARTRIDGE = (int) 201326594,
  IMAPI_WRITEPROTECTED_BY_MEDIA_SPECIFIC_REASON = (int) 201326596,
  IMAPI_WRITEPROTECTED_BY_SOFTWARE_WRITE_PROTECT = (int) 201326600,
  IMAPI_WRITEPROTECTED_BY_DISC_CONTROL_BLOCK = (int) 201326608,
  IMAPI_WRITEPROTECTED_READ_ONLY_MEDIA = (int) 201342976
};

/* Structure/union declarations.  */
struct _LARGE_INTEGER
{
  LONGLONG QuadPart;
};
struct _ULARGE_INTEGER
{
  ULONGLONG QuadPart;
};
struct tagSTATSTG
{
  LPWSTR pwcsName;
  UINT type;
  struct _ULARGE_INTEGER cbSize;
  struct _FILETIME mtime;
  struct _FILETIME ctime;
  struct _FILETIME atime;
  UINT grfMode;
  UINT grfLocksSupported;
  struct GUID clsid;
  UINT grfStateBits;
  UINT reserved;
};
struct _FILETIME
{
  UINT dwLowDateTime;
  UINT dwHighDateTime;
};
struct tagCONNECTDATA
{
  IUnknown * pUnk;
  UINT dwCookie;
};

/* Type definitions.  */
[
  helpstring("The current action being performed for the data write")
]
typedef enum _IMAPI_FORMAT2_DATA_WRITE_ACTION IMAPI_FORMAT2_DATA_WRITE_ACTION;
[
  helpstring("Current action when writing to CD in Track-at-Once mode")
]
typedef enum _IMAPI_FORMAT2_TAO_WRITE_ACTION IMAPI_FORMAT2_TAO_WRITE_ACTION;
[
  helpstring("Current action when writing to the CD in Disc-At-Once (RAW) mode")
]
typedef enum _IMAPI_FORMAT2_RAW_CD_WRITE_ACTION IMAPI_FORMAT2_RAW_CD_WRITE_ACTION;
[
  helpstring("Physical type of the optical media")
]
typedef enum _IMAPI_MEDIA_PHYSICAL_TYPE IMAPI_MEDIA_PHYSICAL_TYPE;
[
  helpstring("The CD sector type for provided data")
]
typedef enum _IMAPI_CD_SECTOR_TYPE IMAPI_CD_SECTOR_TYPE;
[
  helpstring("Data sector type to use when writing to CD in Disc-At-Once (RAW) mode")
]
typedef enum _IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE;
[
  helpstring("The audio track digital copy setting")
]
typedef enum _IMAPI_CD_TRACK_DIGITAL_COPY_SETTING IMAPI_CD_TRACK_DIGITAL_COPY_SETTING;
[
  helpstring("Burn verification level")
]
typedef enum _IMAPI_BURN_VERIFICATION_LEVEL IMAPI_BURN_VERIFICATION_LEVEL;
[
  helpstring("Address type provided for reading track information")
]
typedef enum _IMAPI_READ_TRACK_ADDRESS_TYPE IMAPI_READ_TRACK_ADDRESS_TYPE;
[
  helpstring("Type of the feature page data")
]
typedef enum _IMAPI_FEATURE_PAGE_TYPE IMAPI_FEATURE_PAGE_TYPE;
[
  helpstring("Type of the mode page data")
]
typedef enum _IMAPI_MODE_PAGE_TYPE IMAPI_MODE_PAGE_TYPE;
[
  helpstring("Mode page data type to request")
]
typedef enum _IMAPI_MODE_PAGE_REQUEST_TYPE IMAPI_MODE_PAGE_REQUEST_TYPE;
[
  helpstring("Type of the profile in feature page data")
]
typedef enum _IMAPI_PROFILE_TYPE IMAPI_PROFILE_TYPE;
[
  helpstring("Set of flags to indicate current media state")
]
typedef enum _IMAPI_FORMAT2_DATA_MEDIA_STATE IMAPI_FORMAT2_DATA_MEDIA_STATE;
[
  helpstring("Detected write protection type of the media")
]
typedef enum _IMAPI_MEDIA_WRITE_PROTECT_STATE IMAPI_MEDIA_WRITE_PROTECT_STATE;

[
  uuid(2735412F-7F64-5B0F-8F00-5D77AFBE261E),
  version(1.0),
  helpstring("Microsoft IMAPI2 Base Functionality")
]
library imapi2
{
  importlib("stdole2.tlb");

   /* CoClass declarations.  */
   [
     uuid(2735412E-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 Disc Master"),
     cancreate
   ]
   coclass MsftDiscMaster2
   {
     dispinterface IDiscMaster2;
     interface IConnectionPointContainer;
     interface DDiscMaster2Events;
   };
   [
     uuid(2735412D-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 Disc Recorder"),
     cancreate
   ]
   coclass MsftDiscRecorder2
   {
     dispinterface IDiscRecorder2;
     interface IDiscRecorder2Ex;
   };
   [
     uuid(2735412C-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 CD Write Engine"),
     cancreate
   ]
   coclass MsftWriteEngine2
   {
     dispinterface IWriteEngine2;
     interface IConnectionPointContainer;
     interface DWriteEngine2Events;
   };
   [
     uuid(2735412B-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 Media Erase/Blank"),
     cancreate
   ]
   coclass MsftDiscFormat2Erase
   {
     dispinterface IDiscFormat2Erase;
     interface IConnectionPointContainer;
     interface DDiscFormat2EraseEvents;
   };
   [
     uuid(2735412A-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 Data Writer"),
     cancreate
   ]
   coclass MsftDiscFormat2Data
   {
     dispinterface IDiscFormat2Data;
     interface IBurnVerification;
     interface IConnectionPointContainer;
     interface DDiscFormat2DataEvents;
   };
   [
     uuid(27354129-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 Track-at-Once Audio CD Writer"),
     cancreate
   ]
   coclass MsftDiscFormat2TrackAtOnce
   {
     dispinterface IDiscFormat2TrackAtOnce;
     interface IBurnVerification;
     interface IConnectionPointContainer;
     interface DDiscFormat2TrackAtOnceEvents;
   };
   [
     uuid(27354128-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 Disc-at-Once RAW CD Image Writer"),
     cancreate
   ]
   coclass MsftDiscFormat2RawCD
   {
     dispinterface IDiscFormat2RawCD;
     interface IConnectionPointContainer;
     interface DDiscFormat2RawCDEvents;
   };
   [
     uuid(27354127-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 /dev/zero Stream "),
     cancreate
   ]
   coclass MsftStreamZero
   {
     interface IStream;
   };
   [
     uuid(27354126-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 PRNG based Stream (LCG: 0x19660D, 0x3C6EF35F)"),
     cancreate
   ]
   coclass MsftStreamPrng001
   {
     interface IStreamPseudoRandomBased;
   };
   [
     uuid(27354125-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 concatenation stream"),
     cancreate
   ]
   coclass MsftStreamConcatenate
   {
     interface IStreamConcatenate;
   };
   [
     uuid(27354124-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 interleave stream"),
     cancreate
   ]
   coclass MsftStreamInterleave
   {
     interface IStreamInterleave;
   };
   [
     uuid(27354123-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 Write Speed Descriptor")
   ]
   coclass MsftWriteSpeedDescriptor
   {
     dispinterface IWriteSpeedDescriptor;
   };
   [
     uuid(27354122-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Microsoft IMAPIv2 sequential Multi-session")
   ]
   coclass MsftMultisessionSequential
   {
     interface IMultisessionSequential;
   };
   [
     uuid(25983561-9D65-49CE-B335-40630D901227),
     helpstring("Microsoft IMAPIv2 RAW CD Image Creator"),
     cancreate
   ]
   coclass MsftRawCDImageCreator
   {
     dispinterface IRawCDImageCreator;
   };

   /* Dispatch interface declarations.  */
   [
     uuid(27354136-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("CD Write Engine"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IWriteEngine2EventArgs : IDispatch
   {
     [id(256), propget]
     HRESULT __stdcall StartLba (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall SectorCount (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall LastReadLba (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall LastWrittenLba (
       [out retval] long *value
     );
     [id(262), propget]
     HRESULT __stdcall TotalSystemBuffer (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall UsedSystemBuffer (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall FreeSystemBuffer (
       [out retval] long *value
     );
   };
   [
     uuid(2735413D-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Track-at-once Data Writer"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscFormat2DataEventArgs : IWriteEngine2EventArgs
   {
     [id(768), propget]
     HRESULT __stdcall ElapsedTime (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall RemainingTime (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall TotalTime (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall CurrentAction (
       [out retval] IMAPI_FORMAT2_DATA_WRITE_ACTION *value
     );
   };
   [
     uuid(27354140-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("CD Track-at-once Audio Writer Event Arguments"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscFormat2TrackAtOnceEventArgs : IWriteEngine2EventArgs
   {
     [id(768), propget]
     HRESULT __stdcall CurrentTrackNumber (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall CurrentAction (
       [out retval] IMAPI_FORMAT2_TAO_WRITE_ACTION *value
     );
     [propget]
     HRESULT __stdcall ElapsedTime (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall RemainingTime (
       [out retval] long *value
     );
   };
   [
     uuid(27354143-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("CD Disc-At-Once RAW Writer Event Arguments"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscFormat2RawCDEventArgs : IWriteEngine2EventArgs
   {
     [id(769), propget]
     HRESULT __stdcall CurrentAction (
       [out retval] IMAPI_FORMAT2_RAW_CD_WRITE_ACTION *value
     );
     [propget]
     HRESULT __stdcall ElapsedTime (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall RemainingTime (
       [out retval] long *value
     );
   };
   [
     uuid(27354144-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("A single optical drive Write Speed Configuration"),
     dual,
     oleautomation,
     dispatchable
   ]
   dispinterface IWriteSpeedDescriptor : IDispatch
   {
     [id(257), propget]
     HRESULT __stdcall MediaType (
       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
     );
     [propget]
     HRESULT __stdcall RotationTypeIsPureCAV (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall WriteSpeed (
       [out retval] long *value
     );
   };
   [
     uuid(25983550-9D65-49CE-B335-40630D901227),
     helpstring("CD Raw CD (Disc-at-Once) Image Creator"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRawCDImageCreator : IDispatch
   {
     [id(512)]
     HRESULT __stdcall CreateResultImage (
       [out retval] interface IStream **resultStream
     );
     HRESULT __stdcall AddTrack (
       [in] IMAPI_CD_SECTOR_TYPE dataType,
       [in] interface IStream *data,
       [out retval] long *trackIndex
     );
     HRESULT __stdcall AddSpecialPregap (
       [in] interface IStream *data
     );
     HRESULT __stdcall AddSubcodeRWGenerator (
       [in] interface IStream *subcode
     );
     [id(256), propput]
     HRESULT __stdcall ResultingImageType (
       [in] IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE argNo1
     );
     [id(256), propget]
     HRESULT __stdcall ResultingImageType (
       [out retval] IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE *value
     );
     [propget]
     HRESULT __stdcall StartOfLeadout (
       [out retval] long *value
     );
     [propput]
     HRESULT __stdcall StartOfLeadoutLimit (
       [in] long argNo1
     );
     [id(258), propget]
     HRESULT __stdcall StartOfLeadoutLimit (
       [out retval] long *value
     );
     [propput]
     HRESULT __stdcall DisableGaplessAudio (
       [in] WINBOOL argNo1
     );
     [id(259), propget]
     HRESULT __stdcall DisableGaplessAudio (
       [out retval] WINBOOL *value
     );
     [propput]
     HRESULT __stdcall MediaCatalogNumber (
       [in] BSTR argNo1
     );
     [id(260), propget]
     HRESULT __stdcall MediaCatalogNumber (
       [out retval] BSTR *value
     );
     [propput]
     HRESULT __stdcall StartingTrackNumber (
       [in] long argNo1
     );
     [id(261), propget]
     HRESULT __stdcall StartingTrackNumber (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall TrackInfo (
       [in] long trackIndex,
       [out retval] dispinterface IRawCDImageTrackInfo **value
     );
     [propget]
     HRESULT __stdcall NumberOfExistingTracks (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall LastUsedUserSectorInImage (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall ExpectedTableOfContents (
       [out retval] VARIANT value[]*
     );
   };
   [
     uuid(25983551-9D65-49CE-B335-40630D901227),
     helpstring("CD Raw CD (Disc-at-Once) Per-Track Information"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRawCDImageTrackInfo : IDispatch
   {
     [id(256), propget]
     HRESULT __stdcall StartingLba (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall SectorCount (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall TrackNumber (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall SectorType (
       [out retval] IMAPI_CD_SECTOR_TYPE *value
     );
     [propget]
     HRESULT __stdcall ISRC (
       [out retval] BSTR *value
     );
     [id(260), propput]
     HRESULT __stdcall ISRC (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall DigitalAudioCopySetting (
       [out retval] IMAPI_CD_TRACK_DIGITAL_COPY_SETTING *value
     );
     [id(261), propput]
     HRESULT __stdcall DigitalAudioCopySetting (
       [in] IMAPI_CD_TRACK_DIGITAL_COPY_SETTING argNo1
     );
     [propget]
     HRESULT __stdcall AudioHasPreemphasis (
       [out retval] WINBOOL *value
     );
     [id(262), propput]
     HRESULT __stdcall AudioHasPreemphasis (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall TrackIndexes (
       [out retval] VARIANT value[]*
     );
     [id(512)]
     HRESULT __stdcall AddTrackIndex (
       [in] long lbaOffset
     );
     HRESULT __stdcall ClearTrackIndex (
       [in] long lbaOffset
     );
   };
   [
     uuid(27354130-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("IDiscMaster2 is used to get an enumerator for the set of CD/DVD (optical) devices on the system"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscMaster2 : IDispatch
   {
     [id(-4), propget, restricted, hidden]
     HRESULT __stdcall _NewEnum (
       [out retval] interface IEnumVARIANT **ppunk
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] long index,
       [out retval] BSTR *value
     );
     [propget]
     HRESULT __stdcall Count (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall IsSupportedEnvironment (
       [out retval] WINBOOL *value
     );
   };
   [
     uuid(27354133-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Represents a single CD/DVD type device, and enables many common operations via a simplified API."),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscRecorder2 : IDispatch
   {
     [id(256)]
     HRESULT __stdcall EjectMedia (void);
     HRESULT __stdcall CloseTray (void);
     HRESULT __stdcall AcquireExclusiveAccess (
       [in] WINBOOL force,
       [in] BSTR __MIDL__IDiscRecorder20000
     );
     HRESULT __stdcall ReleaseExclusiveAccess (void);
     HRESULT __stdcall DisableMcn (void);
     HRESULT __stdcall EnableMcn (void);
     HRESULT __stdcall InitializeDiscRecorder (
       [in] BSTR recorderUniqueId
     );
     [id(0), propget]
     HRESULT __stdcall ActiveDiscRecorder (
       [out retval] BSTR *value
     );
     [id(513), propget]
     HRESULT __stdcall VendorId (
       [out retval] BSTR *value
     );
     [propget]
     HRESULT __stdcall ProductId (
       [out retval] BSTR *value
     );
     [propget]
     HRESULT __stdcall ProductRevision (
       [out retval] BSTR *value
     );
     [propget]
     HRESULT __stdcall VolumeName (
       [out retval] BSTR *value
     );
     [propget]
     HRESULT __stdcall VolumePathNames (
       [out retval] VARIANT value[]*
     );
     [propget]
     HRESULT __stdcall DeviceCanLoadMedia (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall LegacyDeviceNumber (
       [out retval] long *LegacyDeviceNumber
     );
     [propget]
     HRESULT __stdcall SupportedFeaturePages (
       [out retval] VARIANT value[]*
     );
     [propget]
     HRESULT __stdcall CurrentFeaturePages (
       [out retval] VARIANT value[]*
     );
     [propget]
     HRESULT __stdcall SupportedProfiles (
       [out retval] VARIANT value[]*
     );
     [propget]
     HRESULT __stdcall CurrentProfiles (
       [out retval] VARIANT value[]*
     );
     [propget]
     HRESULT __stdcall SupportedModePages (
       [out retval] VARIANT value[]*
     );
     [propget]
     HRESULT __stdcall ExclusiveAccessOwner (
       [out retval] BSTR *value
     );
   };
   [
     uuid(27354135-7F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Write Engine"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IWriteEngine2 : IDispatch
   {
     [id(512)]
     HRESULT __stdcall WriteSection (
       [in] interface IStream *data,
       [in] long startingBlockAddress,
       [in] long numberOfBlocks
     );
     HRESULT __stdcall CancelWrite (void);
     [id(256), propput]
     HRESULT __stdcall Recorder (
       [in] interface IDiscRecorder2Ex *argNo1
     );
     [id(256), propget]
     HRESULT __stdcall Recorder (
       [out retval] interface IDiscRecorder2Ex **value
     );
     [propput]
     HRESULT __stdcall UseStreamingWrite12 (
       [in] WINBOOL argNo1
     );
     [id(257), propget]
     HRESULT __stdcall UseStreamingWrite12 (
       [out retval] WINBOOL *value
     );
     [propput]
     HRESULT __stdcall StartingSectorsPerSecond (
       [in] long argNo1
     );
     [id(258), propget]
     HRESULT __stdcall StartingSectorsPerSecond (
       [out retval] long *value
     );
     [propput]
     HRESULT __stdcall EndingSectorsPerSecond (
       [in] long argNo1
     );
     [id(259), propget]
     HRESULT __stdcall EndingSectorsPerSecond (
       [out retval] long *value
     );
     [propput]
     HRESULT __stdcall BytesPerSector (
       [in] long argNo1
     );
     [id(260), propget]
     HRESULT __stdcall BytesPerSector (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall WriteInProgress (
       [out retval] WINBOOL *value
     );
   };
   [
     uuid(27354156-8F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Optical media erase"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscFormat2Erase : IDiscFormat2
   {
     [id(256), propput]
     HRESULT __stdcall Recorder (
       [in] dispinterface IDiscRecorder2 *argNo1
     );
     [id(256), propget]
     HRESULT __stdcall Recorder (
       [out retval] dispinterface IDiscRecorder2 **value
     );
     [propput]
     HRESULT __stdcall FullErase (
       [in] WINBOOL argNo1
     );
     [id(257), propget]
     HRESULT __stdcall FullErase (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall CurrentPhysicalMediaType (
       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
     );
     [propput]
     HRESULT __stdcall ClientName (
       [in] BSTR argNo1
     );
     [id(259), propget]
     HRESULT __stdcall ClientName (
       [out retval] BSTR *value
     );
     [id(513)]
     HRESULT __stdcall EraseMedia (void);
   };
   [
     uuid(27354152-8F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Common Disc Format (writer) Operations"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscFormat2 : IDispatch
   {
     [id(2048)]
     HRESULT __stdcall IsRecorderSupported (
       [in] dispinterface IDiscRecorder2 *Recorder,
       [out retval] WINBOOL *value
     );
     HRESULT __stdcall IsCurrentMediaSupported (
       [in] dispinterface IDiscRecorder2 *Recorder,
       [out retval] WINBOOL *value
     );
     [id(1792), propget]
     HRESULT __stdcall MediaPhysicallyBlank (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall MediaHeuristicallyBlank (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall SupportedMediaTypes (
       [out retval] VARIANT value[]*
     );
   };
   [
     uuid(27354153-9F64-5B0F-8F00-5D77AFBE261E),
     helpstring("Data Writer"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscFormat2Data : IDiscFormat2
   {
     [id(256), propput]
     HRESULT __stdcall Recorder (
       [in] dispinterface IDiscRecorder2 *argNo1
     );
     [id(256), propget]
     HRESULT __stdcall Recorder (
       [out retval] dispinterface IDiscRecorder2 **value
     );
     [propput]
     HRESULT __stdcall BufferUnderrunFreeDisabled (
       [in] WINBOOL argNo1
     );
     [id(257), propget]
     HRESULT __stdcall BufferUnderrunFreeDisabled (
       [out retval] WINBOOL *value
     );
     [id(260), propput]
     HRESULT __stdcall PostgapAlreadyInImage (
       [in] WINBOOL argNo1
     );
     [id(260), propget]
     HRESULT __stdcall PostgapAlreadyInImage (
       [out retval] WINBOOL *value
     );
     [id(262), propget]
     HRESULT __stdcall CurrentMediaStatus (
       [out retval] IMAPI_FORMAT2_DATA_MEDIA_STATE *value
     );
     [propget]
     HRESULT __stdcall WriteProtectStatus (
       [out retval] IMAPI_MEDIA_WRITE_PROTECT_STATE *value
     );
     [propget]
     HRESULT __stdcall TotalSectorsOnMedia (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall FreeSectorsOnMedia (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall NextWritableAddress (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall StartAddressOfPreviousSession (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall LastWrittenAddressOfPreviousSession (
       [out retval] long *value
     );
     [propput]
     HRESULT __stdcall ForceMediaToBeClosed (
       [in] WINBOOL argNo1
     );
     [id(269), propget]
     HRESULT __stdcall ForceMediaToBeClosed (
       [out retval] WINBOOL *value
     );
     [propput]
     HRESULT __stdcall DisableConsumerDvdCompatibilityMode (
       [in] WINBOOL argNo1
     );
     [id(270), propget]
     HRESULT __stdcall DisableConsumerDvdCompatibilityMode (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall CurrentPhysicalMediaType (
       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
     );
     [propput]
     HRESULT __stdcall ClientName (
       [in] BSTR argNo1
     );
     [id(272), propget]
     HRESULT __stdcall ClientName (
       [out retval] BSTR *value
     );
     [propget]
     HRESULT __stdcall RequestedWriteSpeed (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall RequestedRotationTypeIsPureCAV (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall CurrentWriteSpeed (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall CurrentRotationTypeIsPureCAV (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall SupportedWriteSpeeds (
       [out retval] VARIANT supportedSpeeds[]*
     );
     [propget]
     HRESULT __stdcall SupportedWriteSpeedDescriptors (
       [out retval] VARIANT supportedSpeedDescriptors[]*
     );
     [propput]
     HRESULT __stdcall ForceOverwrite (
       [in] WINBOOL argNo1
     );
     [id(279), propget]
     HRESULT __stdcall ForceOverwrite (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall MultisessionInterfaces (
       [out retval] VARIANT value[]*
     );
     [id(512)]
     HRESULT __stdcall Write (
       [in] interface IStream *data
     );
     HRESULT __stdcall CancelWrite (void);
     HRESULT __stdcall SetWriteSpeed (
       [in] long RequestedSectorsPerSecond,
       [in] WINBOOL RotationTypeIsPureCAV
     );
   };
   [
     uuid(27354154-8F64-5B0F-8F00-5D77AFBE261E),
     helpstring("CD Track-at-Once Audio Writer"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscFormat2TrackAtOnce : IDiscFormat2
   {
     [id(512)]
     HRESULT __stdcall PrepareMedia (void);
     HRESULT __stdcall AddAudioTrack (
       [in] interface IStream *data
     );
     HRESULT __stdcall CancelAddTrack (void);
     HRESULT __stdcall ReleaseMedia (void);
     HRESULT __stdcall SetWriteSpeed (
       [in] long RequestedSectorsPerSecond,
       [in] WINBOOL RotationTypeIsPureCAV
     );
     [id(256), propput]
     HRESULT __stdcall Recorder (
       [in] dispinterface IDiscRecorder2 *argNo1
     );
     [id(256), propget]
     HRESULT __stdcall Recorder (
       [out retval] dispinterface IDiscRecorder2 **value
     );
     [id(258), propput]
     HRESULT __stdcall BufferUnderrunFreeDisabled (
       [in] WINBOOL argNo1
     );
     [id(258), propget]
     HRESULT __stdcall BufferUnderrunFreeDisabled (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall NumberOfExistingTracks (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall TotalSectorsOnMedia (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall FreeSectorsOnMedia (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall UsedSectorsOnMedia (
       [out retval] long *value
     );
     [propput]
     HRESULT __stdcall DoNotFinalizeMedia (
       [in] WINBOOL argNo1
     );
     [id(263), propget]
     HRESULT __stdcall DoNotFinalizeMedia (
       [out retval] WINBOOL *value
     );
     [id(266), propget]
     HRESULT __stdcall ExpectedTableOfContents (
       [out retval] VARIANT value[]*
     );
     [propget]
     HRESULT __stdcall CurrentPhysicalMediaType (
       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
     );
     [id(270), propput]
     HRESULT __stdcall ClientName (
       [in] BSTR argNo1
     );
     [id(270), propget]
     HRESULT __stdcall ClientName (
       [out retval] BSTR *value
     );
     [propget]
     HRESULT __stdcall RequestedWriteSpeed (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall RequestedRotationTypeIsPureCAV (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall CurrentWriteSpeed (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall CurrentRotationTypeIsPureCAV (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall SupportedWriteSpeeds (
       [out retval] VARIANT supportedSpeeds[]*
     );
     [propget]
     HRESULT __stdcall SupportedWriteSpeedDescriptors (
       [out retval] VARIANT supportedSpeedDescriptors[]*
     );
   };
   [
     uuid(27354155-8F64-5B0F-8F00-5D77AFBE261E),
     helpstring("CD Disc-At-Once RAW Writer"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDiscFormat2RawCD : IDiscFormat2
   {
     [id(512)]
     HRESULT __stdcall PrepareMedia (void);
     HRESULT __stdcall WriteMedia (
       [in] interface IStream *data
     );
     HRESULT __stdcall WriteMedia2 (
       [in] interface IStream *data,
       [in] long streamLeadInSectors
     );
     HRESULT __stdcall CancelWrite (void);
     HRESULT __stdcall ReleaseMedia (void);
     HRESULT __stdcall SetWriteSpeed (
       [in] long RequestedSectorsPerSecond,
       [in] WINBOOL RotationTypeIsPureCAV
     );
     [id(256), propput]
     HRESULT __stdcall Recorder (
       [in] dispinterface IDiscRecorder2 *argNo1
     );
     [id(256), propget]
     HRESULT __stdcall Recorder (
       [out retval] dispinterface IDiscRecorder2 **value
     );
     [id(258), propput]
     HRESULT __stdcall BufferUnderrunFreeDisabled (
       [in] WINBOOL argNo1
     );
     [id(258), propget]
     HRESULT __stdcall BufferUnderrunFreeDisabled (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall StartOfNextSession (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall LastPossibleStartOfLeadout (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall CurrentPhysicalMediaType (
       [out retval] IMAPI_MEDIA_PHYSICAL_TYPE *value
     );
     [id(264), propget]
     HRESULT __stdcall SupportedSectorTypes (
       [out retval] VARIANT value[]*
     );
     [propput]
     HRESULT __stdcall RequestedSectorType (
       [in] IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE argNo1
     );
     [id(265), propget]
     HRESULT __stdcall RequestedSectorType (
       [out retval] IMAPI_FORMAT2_RAW_CD_DATA_SECTOR_TYPE *value
     );
     [propput]
     HRESULT __stdcall ClientName (
       [in] BSTR argNo1
     );
     [id(266), propget]
     HRESULT __stdcall ClientName (
       [out retval] BSTR *value
     );
     [propget]
     HRESULT __stdcall RequestedWriteSpeed (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall RequestedRotationTypeIsPureCAV (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall CurrentWriteSpeed (
       [out retval] long *value
     );
     [propget]
     HRESULT __stdcall CurrentRotationTypeIsPureCAV (
       [out retval] WINBOOL *value
     );
     [propget]
     HRESULT __stdcall SupportedWriteSpeeds (
       [out retval] VARIANT supportedSpeeds[]*
     );
     [propget]
     HRESULT __stdcall SupportedWriteSpeedDescriptors (
       [out retval] VARIANT supportedSpeedDescriptors[]*
     );
   };

};

/* Interface declarations.  */
[
  uuid(27354131-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Provides notification of the arrival/removal of CD/DVD (optical) devices."),
  nonextensible,
  oleautomation,
  dispatchable
]
interface DDiscMaster2Events : IDispatch
{
  [id(256)]
  HRESULT __stdcall NotifyDeviceAdded (
    [in] IDispatch * object,
    [in] BSTR uniqueId
  );
  HRESULT __stdcall NotifyDeviceRemoved (
    [in] IDispatch * object,
    [in] BSTR uniqueId
  );
};
[
  uuid(27354137-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Provides notification of the progress of the WriteEngine2 writing."),
  nonextensible,
  oleautomation,
  dispatchable
]
interface DWriteEngine2Events : IDispatch
{
  [id(256)]
  HRESULT __stdcall Update (
    [in] IDispatch * object,
    [in] IDispatch * progress
  );
};
[
  uuid(2735413A-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Provides notification of media erase progress."),
  nonextensible,
  oleautomation,
  dispatchable
]
interface DDiscFormat2EraseEvents : IDispatch
{
  [id(512)]
  HRESULT __stdcall Update (
    [in] IDispatch * object,
    [in] long elapsedSeconds,
    [in] long estimatedTotalSeconds
  );
};
[
  uuid(2735413C-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Data Writer"),
  nonextensible,
  oleautomation,
  dispatchable
]
interface DDiscFormat2DataEvents : IDispatch
{
  [id(512)]
  HRESULT __stdcall Update (
    [in] IDispatch * object,
    [in] IDispatch * progress
  );
};
[
  uuid(2735413F-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("CD Track-at-Once Audio Writer Events"),
  nonextensible,
  oleautomation,
  dispatchable
]
interface DDiscFormat2TrackAtOnceEvents : IDispatch
{
  [id(512)]
  HRESULT __stdcall Update (
    [in] IDispatch * object,
    [in] IDispatch * progress
  );
};
[
  uuid(27354142-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("CD Disc-At-Once RAW Writer Events"),
  nonextensible,
  oleautomation,
  dispatchable
]
interface DDiscFormat2RawCDEvents : IDispatch
{
  [id(512)]
  HRESULT __stdcall Update (
    [in] IDispatch * object,
    [in] IDispatch * progress
  );
};
[
  uuid(0000000C-0000-0000-C000-000000000046)
]
interface IStream : ISequentialStream
{
  [id(1610743808)]
  HRESULT __stdcall RemoteSeek (
    [in] struct _LARGE_INTEGER dlibMove,
    [in] UINT dwOrigin,
    [out] struct _ULARGE_INTEGER *plibNewPosition
  );
  HRESULT __stdcall SetSize (
    [in] struct _ULARGE_INTEGER libNewSize
  );
  HRESULT __stdcall RemoteCopyTo (
    [in] interface IStream *pstm,
    [in] struct _ULARGE_INTEGER cb,
    [out] struct _ULARGE_INTEGER *pcbRead,
    [out] struct _ULARGE_INTEGER *pcbWritten
  );
  HRESULT __stdcall Commit (
    [in] UINT grfCommitFlags
  );
  HRESULT __stdcall Revert (void);
  HRESULT __stdcall LockRegion (
    [in] struct _ULARGE_INTEGER libOffset,
    [in] struct _ULARGE_INTEGER cb,
    [in] UINT dwLockType
  );
  HRESULT __stdcall UnlockRegion (
    [in] struct _ULARGE_INTEGER libOffset,
    [in] struct _ULARGE_INTEGER cb,
    [in] UINT dwLockType
  );
  HRESULT __stdcall Stat (
    [out] struct tagSTATSTG *pstatstg,
    [in] UINT grfStatFlag
  );
  HRESULT __stdcall Clone (
    [out] interface IStream **ppstm
  );
};
[
  uuid(0C733A30-2A1C-11CE-ADE5-00AA0044773D)
]
interface ISequentialStream : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall RemoteRead (
    [out] UCHAR *pv,
    [in] UINT cb,
    [out] UINT *pcbRead
  );
  HRESULT __stdcall RemoteWrite (
    [in] UCHAR *pv,
    [in] UINT cb,
    [out] UINT *pcbWritten
  );
};
[
  uuid(D2FFD834-958B-426D-8470-2A13879C6A91),
  helpstring("An interface to control burn verification for a burning object")
]
interface IBurnVerification : IUnknown
{
  [id(1024), propput]
  HRESULT __stdcall BurnVerificationLevel (
    [in] IMAPI_BURN_VERIFICATION_LEVEL argNo1
  );
  [id(1024), propget]
  HRESULT __stdcall BurnVerificationLevel (
    [out retval] IMAPI_BURN_VERIFICATION_LEVEL *value
  );
};
[
  uuid(B196B284-BAB4-101A-B69C-00AA00341D07)
]
interface IConnectionPointContainer : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall EnumConnectionPoints (
    [out] interface IEnumConnectionPoints **ppEnum
  );
  HRESULT __stdcall FindConnectionPoint (
    [in] struct GUID *riid,
    [out] interface IConnectionPoint **ppCP
  );
};
[
  uuid(B196B285-BAB4-101A-B69C-00AA00341D07)
]
interface IEnumConnectionPoints : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall RemoteNext (
    [in] UINT cConnections,
    [out] interface IConnectionPoint **ppCP,
    [out] UINT *pcFetched
  );
  HRESULT __stdcall Skip (
    [in] UINT cConnections
  );
  HRESULT __stdcall Reset (void);
  HRESULT __stdcall Clone (
    [out] interface IEnumConnectionPoints **ppEnum
  );
};
[
  uuid(B196B286-BAB4-101A-B69C-00AA00341D07)
]
interface IConnectionPoint : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall GetConnectionInterface (
    [out] struct GUID *pIID
  );
  HRESULT __stdcall GetConnectionPointContainer (
    [out] interface IConnectionPointContainer **ppCPC
  );
  HRESULT __stdcall Advise (
    [in] IUnknown * pUnkSink,
    [out] UINT *pdwCookie
  );
  HRESULT __stdcall Unadvise (
    [in] UINT dwCookie
  );
  HRESULT __stdcall EnumConnections (
    [out] interface IEnumConnections **ppEnum
  );
};
[
  uuid(B196B287-BAB4-101A-B69C-00AA00341D07)
]
interface IEnumConnections : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall RemoteNext (
    [in] UINT cConnections,
    [out] struct tagCONNECTDATA *rgcd,
    [out] UINT *pcFetched
  );
  HRESULT __stdcall Skip (
    [in] UINT cConnections
  );
  HRESULT __stdcall Reset (void);
  HRESULT __stdcall Clone (
    [out] interface IEnumConnections **ppEnum
  );
};
[
  uuid(27354132-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Represents a single CD/DVD type device, enabling additional commands requiring advanced marshalling code.")
]
interface IDiscRecorder2Ex : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall SendCommandNoData (
    [in] UCHAR *Cdb,
    [in] UINT CdbSize,
    [out] UCHAR SenseBuffer[18],
    [in] UINT Timeout
  );
  HRESULT __stdcall SendCommandSendDataToDevice (
    [in] UCHAR *Cdb,
    [in] UINT CdbSize,
    [out] UCHAR SenseBuffer[18],
    [in] UINT Timeout,
    [in] UCHAR *Buffer,
    [in] UINT BufferSize
  );
  HRESULT __stdcall SendCommandGetDataFromDevice (
    [in] UCHAR *Cdb,
    [in] UINT CdbSize,
    [out] UCHAR SenseBuffer[18],
    [in] UINT Timeout,
    [out] UCHAR *Buffer,
    [in] UINT BufferSize,
    [out] UINT *BufferFetched
  );
  HRESULT __stdcall ReadDvdStructure (
    [in] UINT format,
    [in] UINT address,
    [in] UINT layer,
    [in] UINT agid,
    [out] UCHAR *data,
    [out] UINT *Count
  );
  HRESULT __stdcall SendDvdStructure (
    [in] UINT format,
    [in] UCHAR *data,
    [in] UINT Count
  );
  HRESULT __stdcall GetAdapterDescriptor (
    [out] UCHAR *data,
    [out] UINT *byteSize
  );
  HRESULT __stdcall GetDeviceDescriptor (
    [out] UCHAR *data,
    [out] UINT *byteSize
  );
  HRESULT __stdcall GetDiscInformation (
    [out] UCHAR *discInformation,
    [out] UINT *byteSize
  );
  HRESULT __stdcall GetTrackInformation (
    [in] UINT address,
    [in] IMAPI_READ_TRACK_ADDRESS_TYPE addressType,
    [out] UCHAR *trackInformation,
    [out] UINT *byteSize
  );
  HRESULT __stdcall GetFeaturePage (
    [in] IMAPI_FEATURE_PAGE_TYPE requestedFeature,
    [in] CHAR currentFeatureOnly,
    [out] UCHAR *featureData,
    [out] UINT *byteSize
  );
  HRESULT __stdcall GetModePage (
    [in] IMAPI_MODE_PAGE_TYPE requestedModePage,
    [in] IMAPI_MODE_PAGE_REQUEST_TYPE requestType,
    [out] UCHAR *modePageData,
    [out] UINT *byteSize
  );
  HRESULT __stdcall SetModePage (
    [in] IMAPI_MODE_PAGE_REQUEST_TYPE requestType,
    [in] UCHAR *data,
    [in] UINT byteSize
  );
  HRESULT __stdcall GetSupportedFeaturePages (
    [in] CHAR currentFeatureOnly,
    [out] IMAPI_FEATURE_PAGE_TYPE **featureData,
    [out] UINT *byteSize
  );
  HRESULT __stdcall GetSupportedProfiles (
    [in] CHAR currentOnly,
    [out] IMAPI_PROFILE_TYPE **profileTypes,
    [out] UINT *validProfiles
  );
  HRESULT __stdcall GetSupportedModePages (
    [in] IMAPI_MODE_PAGE_REQUEST_TYPE requestType,
    [out] IMAPI_MODE_PAGE_TYPE **modePageTypes,
    [out] UINT *validPages
  );
  HRESULT __stdcall GetByteAlignmentMask (
    [out retval] UINT *value
  );
  HRESULT __stdcall GetMaximumNonPageAlignedTransferSize (
    [out retval] UINT *value
  );
  HRESULT __stdcall GetMaximumPageAlignedTransferSize (
    [out retval] UINT *value
  );
};
[
  uuid(27354145-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Pseudo-random based IStream data (implementation dependent)")
]
interface IStreamPseudoRandomBased : IStream
{
  [id(1610809344)]
  HRESULT __stdcall put_Seed (
    [in] UINT value
  );
  HRESULT __stdcall get_Seed (
    [out] UINT *value
  );
  HRESULT __stdcall put_ExtendedSeed (
    [in] UINT *values,
    [in] UINT eCount
  );
  HRESULT __stdcall get_ExtendedSeed (
    [out] UINT *values,
    [out] UINT *eCount
  );
};
[
  uuid(27354146-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Stream concatenation")
]
interface IStreamConcatenate : IStream
{
  [id(1610809344)]
  HRESULT __stdcall Initialize (
    [in] interface IStream *stream1,
    [in] interface IStream *stream2
  );
  HRESULT __stdcall Initialize2 (
    [in] interface IStream **streams,
    [in] UINT streamCount
  );
  HRESULT __stdcall Append (
    [in] interface IStream *stream
  );
  HRESULT __stdcall Append2 (
    [in] interface IStream **streams,
    [in] UINT streamCount
  );
};
[
  uuid(27354147-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Stream interleave: each stream gets interleaveSize bytes, then cycles to the next stream")
]
interface IStreamInterleave : IStream
{
  [id(1610809344)]
  HRESULT __stdcall Initialize (
    [in] interface IStream **streams,
    [in] UINT *interleaveSizes,
    [in] UINT streamCount
  );
};
[
  uuid(27354151-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Sequential multisession support interface."),
  dispatchable
]
interface IMultisessionSequential : IMultisession
{
  [id(512), propget]
  HRESULT __stdcall IsFirstDataSession (
    [out retval] WINBOOL *value
  );
  [propget]
  HRESULT __stdcall StartAddressOfPreviousSession (
    [out retval] long *value
  );
  [propget]
  HRESULT __stdcall LastWrittenAddressOfPreviousSession (
    [out retval] long *value
  );
  [propget]
  HRESULT __stdcall NextWritableAddress (
    [out retval] long *value
  );
  [propget]
  HRESULT __stdcall FreeSectorsOnMedia (
    [out retval] long *value
  );
};
[
  uuid(27354150-7F64-5B0F-8F00-5D77AFBE261E),
  helpstring("Generic multisession support interface."),
  dispatchable
]
interface IMultisession : IDispatch
{
  [id(256), propget]
  HRESULT __stdcall IsSupportedOnCurrentMediaState (
    [out retval] WINBOOL *value
  );
  [propput]
  HRESULT __stdcall InUse (
    [in] WINBOOL argNo1
  );
  [id(257), propget]
  HRESULT __stdcall InUse (
    [out retval] WINBOOL *value
  );
  [propget]
  HRESULT __stdcall ImportRecorder (
    [out retval] dispinterface IDiscRecorder2 **value
  );
};

