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

/* Interface forward declarations.  */
interface DFileSystemImageEvents;
interface DFileSystemImageImportEvents;
interface IStream;
interface ISequentialStream;
interface IEnumProgressItems;
interface IEnumFsiItems;
interface IConnectionPointContainer;
interface IEnumConnectionPoints;
interface IConnectionPoint;
interface IEnumConnections;
interface IIsoImageManager;

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

/* Union record forward declarations.  */
dispinterface IBootOptions;
dispinterface IFileSystemImageResult;
dispinterface IProgressItems;
dispinterface IProgressItem;
dispinterface IFsiDirectoryItem2;
dispinterface IFsiDirectoryItem;
dispinterface IFsiItem;
dispinterface IFsiFileItem2;
dispinterface IFsiFileItem;
dispinterface IFsiNamedStreams;
dispinterface IFileSystemImage3;
dispinterface IFileSystemImage2;
dispinterface IFileSystemImage;
dispinterface IDiscRecorder2;

/* Union record forward declarations.  */
coclass BootOptions;
coclass FsiStream;
coclass FileSystemImageResult;
coclass ProgressItem;
coclass EnumProgressItems;
coclass ProgressItems;
coclass FsiDirectoryItem;
coclass FsiFileItem;
coclass EnumFsiItems;
coclass FsiNamedStreams;
coclass MsftFileSystemImage;
coclass MsftIsoImageManager;

/* Enumeration declarations.  */
[
  helpstring("Type of file system")
]
enum FsiFileSystems
{
  FsiFileSystemNone = (int) 201326592,
  FsiFileSystemISO9660 = (int) 201326593,
  FsiFileSystemJoliet = (int) 201326594,
  FsiFileSystemUDF = (int) 201326596,
  FsiFileSystemUnknown = (int) 1073741824
};
[
  helpstring("Boot platform type")
]
enum PlatformId
{
  PlatformX86 = (int) 201326592,
  PlatformPowerPC = (int) 201326593,
  PlatformMac = (int) 201326594,
  PlatformEFI = (int) 201326831
};
[
  helpstring("Boot emulation type")
]
enum EmulationType
{
  EmulationNone = (int) 201326592,
  Emulation12MFloppy = (int) 201326593,
  Emulation144MFloppy = (int) 201326594,
  Emulation288MFloppy = (int) 201326595,
  EmulationHardDisk = (int) 201326596
};
[
  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("File system item type")
]
enum FsiItemType
{
  FsiItemNotFound = (int) 201326592,
  FsiItemDirectory = (int) 201326593,
  FsiItemFile = (int) 201326594
};

/* 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("Physical type of the optical media")
]
typedef enum _IMAPI_MEDIA_PHYSICAL_TYPE IMAPI_MEDIA_PHYSICAL_TYPE;

[
  uuid(2C941FD0-975B-59BE-A960-9A2A262853A5),
  version(1.0),
  helpstring("Microsoft IMAPI2 File System Image Creator")
]
library imapi2fs
{
  importlib("stdole2.tlb");

   /* CoClass declarations.  */
   [
     uuid(2C941FCE-975B-59BE-A960-9A2A262853A5),
     helpstring("Boot options"),
     cancreate
   ]
   coclass BootOptions
   {
     dispinterface IBootOptions;
   };
   [
     uuid(2C941FCD-975B-59BE-A960-9A2A262853A5),
     helpstring("Stream")
   ]
   coclass FsiStream
   {
     interface IStream;
   };
   [
     uuid(2C941FCC-975B-59BE-A960-9A2A262853A5),
     helpstring("FileSystemImage result stream")
   ]
   coclass FileSystemImageResult
   {
     dispinterface IFileSystemImageResult;
   };
   [
     uuid(2C941FCB-975B-59BE-A960-9A2A262853A5),
     helpstring("Progress item block mapping")
   ]
   coclass ProgressItem
   {
     dispinterface IProgressItem;
   };
   [
     uuid(2C941FCA-975B-59BE-A960-9A2A262853A5),
     helpstring("Progress item block mapping enumerator")
   ]
   coclass EnumProgressItems
   {
     interface IEnumProgressItems;
   };
   [
     uuid(2C941FC9-975B-59BE-A960-9A2A262853A5),
     helpstring("Progress item block mapping collection")
   ]
   coclass ProgressItems
   {
     dispinterface IProgressItems;
   };
   [
     uuid(2C941FC8-975B-59BE-A960-9A2A262853A5),
     helpstring("Directory item")
   ]
   coclass FsiDirectoryItem
   {
     dispinterface IFsiDirectoryItem2;
     dispinterface IFsiDirectoryItem;
     dispinterface IFsiItem;
   };
   [
     uuid(2C941FC7-975B-59BE-A960-9A2A262853A5),
     helpstring("File item")
   ]
   coclass FsiFileItem
   {
     dispinterface IFsiFileItem2;
     dispinterface IFsiFileItem;
     dispinterface IFsiItem;
   };
   [
     uuid(2C941FC6-975B-59BE-A960-9A2A262853A5),
     helpstring("FileSystemImage item enumerator")
   ]
   coclass EnumFsiItems
   {
     interface IEnumFsiItems;
   };
   [
     uuid(C6B6F8ED-6D19-44B4-B539-B159B793A32D),
     helpstring("Named stream collection")
   ]
   coclass FsiNamedStreams
   {
     dispinterface IFsiNamedStreams;
   };
   [
     uuid(2C941FC5-975B-59BE-A960-9A2A262853A5),
     helpstring("File system image"),
     cancreate
   ]
   coclass MsftFileSystemImage
   {
     dispinterface IFileSystemImage3;
     dispinterface IFileSystemImage2;
     interface DFileSystemImageEvents;
     interface DFileSystemImageImportEvents;
     interface IConnectionPointContainer;
     dispinterface IFileSystemImage;
   };
   [
     uuid(CEEE3B62-8F56-4056-869B-EF16917E3EFC),
     helpstring("Microsoft IMAPIv2 Iso Image Manager"),
     cancreate
   ]
   coclass MsftIsoImageManager
   {
     interface IIsoImageManager;
   };

   /* Dispatch interface declarations.  */
   [
     uuid(2C941FD4-975B-59BE-A960-9A2A262853A5),
     helpstring("Boot options"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IBootOptions : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall BootImage (
       [out retval] interface IStream **pVal
     );
     [propget]
     HRESULT __stdcall Manufacturer (
       [out retval] BSTR *pVal
     );
     [id(2), propput]
     HRESULT __stdcall Manufacturer (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall PlatformId (
       [out retval] enum PlatformId *pVal
     );
     [id(3), propput]
     HRESULT __stdcall PlatformId (
       [in] enum PlatformId argNo1
     );
     [propget]
     HRESULT __stdcall Emulation (
       [out retval] enum EmulationType *pVal
     );
     [id(4), propput]
     HRESULT __stdcall Emulation (
       [in] enum EmulationType argNo1
     );
     [propget]
     HRESULT __stdcall ImageSize (
       [out retval] UINT *pVal
     );
     [id(20)]
     HRESULT __stdcall AssignBootImage (
       [in] interface IStream *newVal
     );
   };
   [
     uuid(2C941FD8-975B-59BE-A960-9A2A262853A5),
     helpstring("FileSystemImage result stream"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFileSystemImageResult : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall ImageStream (
       [out retval] interface IStream **pVal
     );
     [propget]
     HRESULT __stdcall ProgressItems (
       [out retval] dispinterface IProgressItems **pVal
     );
     [propget]
     HRESULT __stdcall TotalBlocks (
       [out retval] long *pVal
     );
     [propget]
     HRESULT __stdcall BlockSize (
       [out retval] long *pVal
     );
     [propget]
     HRESULT __stdcall DiscId (
       [out retval] BSTR *pVal
     );
   };
   [
     uuid(2C941FD7-975B-59BE-A960-9A2A262853A5),
     helpstring("Progress item block mapping collection"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IProgressItems : IDispatch
   {
     [id(-4), propget, restricted, hidden]
     HRESULT __stdcall _NewEnum (
       [out retval] interface IEnumVARIANT **NewEnum
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] long Index,
       [out retval] dispinterface IProgressItem **Item
     );
     [propget]
     HRESULT __stdcall Count (
       [out retval] long *Count
     );
     HRESULT __stdcall ProgressItemFromBlock (
       [in] UINT block,
       [out retval] dispinterface IProgressItem **Item
     );
     HRESULT __stdcall ProgressItemFromDescription (
       [in] BSTR Description,
       [out retval] dispinterface IProgressItem **Item
     );
     [propget, restricted, hidden]
     HRESULT __stdcall EnumProgressItems (
       [out retval] interface IEnumProgressItems **NewEnum
     );
   };
   [
     uuid(2C941FD5-975B-59BE-A960-9A2A262853A5),
     helpstring("FileSystemImageResult progress item"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IProgressItem : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Description (
       [out retval] BSTR *desc
     );
     [propget]
     HRESULT __stdcall FirstBlock (
       [out retval] UINT *block
     );
     [propget]
     HRESULT __stdcall LastBlock (
       [out retval] UINT *block
     );
     [propget]
     HRESULT __stdcall BlockCount (
       [out retval] UINT *blocks
     );
   };
   [
     uuid(F7FB4B9B-6D96-4D7B-9115-201B144811EF),
     helpstring("FileSystemImage directory item (rev.2)"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFsiDirectoryItem2 : IFsiDirectoryItem
   {
     [id(36)]
     HRESULT __stdcall AddTreeWithNamedStreams (
       [in] BSTR sourceDirectory,
       [in] WINBOOL includeBaseDirectory
     );
   };
   [
     uuid(2C941FDC-975B-59BE-A960-9A2A262853A5),
     helpstring("FileSystemImage directory item"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFsiDirectoryItem : IFsiItem
   {
     [id(-4), propget, restricted, hidden]
     HRESULT __stdcall _NewEnum (
       [out retval] interface IEnumVARIANT **NewEnum
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] BSTR path,
       [out retval] dispinterface IFsiItem **Item
     );
     [propget]
     HRESULT __stdcall Count (
       [out retval] long *Count
     );
     [propget, restricted, hidden]
     HRESULT __stdcall EnumFsiItems (
       [out retval] interface IEnumFsiItems **NewEnum
     );
     [id(30)]
     HRESULT __stdcall AddDirectory (
       [in] BSTR path
     );
     HRESULT __stdcall AddFile (
       [in] BSTR path,
       [in] interface IStream *fileData
     );
     HRESULT __stdcall AddTree (
       [in] BSTR sourceDirectory,
       [in] WINBOOL includeBaseDirectory
     );
     HRESULT __stdcall Add (
       [in] dispinterface IFsiItem *Item
     );
     HRESULT __stdcall Remove (
       [in] BSTR path
     );
     HRESULT __stdcall RemoveTree (
       [in] BSTR path
     );
   };
   [
     uuid(2C941FD9-975B-59BE-A960-9A2A262853A5),
     helpstring("FileSystemImage item"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFsiItem : IDispatch
   {
     [id(11), propget]
     HRESULT __stdcall Name (
       [out retval] BSTR *pVal
     );
     [propget]
     HRESULT __stdcall FullPath (
       [out retval] BSTR *pVal
     );
     [propget]
     HRESULT __stdcall CreationTime (
       [out retval] DATE *pVal
     );
     [id(13), propput]
     HRESULT __stdcall CreationTime (
       [in] DATE argNo1
     );
     [propget]
     HRESULT __stdcall LastAccessedTime (
       [out retval] DATE *pVal
     );
     [id(14), propput]
     HRESULT __stdcall LastAccessedTime (
       [in] DATE argNo1
     );
     [propget]
     HRESULT __stdcall LastModifiedTime (
       [out retval] DATE *pVal
     );
     [id(15), propput]
     HRESULT __stdcall LastModifiedTime (
       [in] DATE argNo1
     );
     [propget]
     HRESULT __stdcall IsHidden (
       [out retval] WINBOOL *pVal
     );
     [id(16), propput]
     HRESULT __stdcall IsHidden (
       [in] WINBOOL argNo1
     );
     HRESULT __stdcall FileSystemName (
       [in] enum FsiFileSystems fileSystem,
       [out retval] BSTR *pVal
     );
     HRESULT __stdcall FileSystemPath (
       [in] enum FsiFileSystems fileSystem,
       [out retval] BSTR *pVal
     );
   };
   [
     uuid(199D0C19-11E1-40EB-8EC2-C8C822A07792),
     helpstring("FileSystemImage file item (rev.2)"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFsiFileItem2 : IFsiFileItem
   {
     [id(45), propget, restricted, hidden]
     HRESULT __stdcall FsiNamedStreams (
       [out retval] dispinterface IFsiNamedStreams **streams
     );
     [propget]
     HRESULT __stdcall IsNamedStream (
       [out retval] WINBOOL *pVal
     );
     HRESULT __stdcall AddStream (
       [in] BSTR Name,
       [in] interface IStream *streamData
     );
     HRESULT __stdcall RemoveStream (
       [in] BSTR Name
     );
     [propget]
     HRESULT __stdcall IsRealTime (
       [out retval] WINBOOL *pVal
     );
     [id(49), propput]
     HRESULT __stdcall IsRealTime (
       [in] WINBOOL argNo1
     );
   };
   [
     uuid(2C941FDB-975B-59BE-A960-9A2A262853A5),
     helpstring("FileSystemImage file item"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFsiFileItem : IFsiItem
   {
     [id(41), propget]
     HRESULT __stdcall DataSize (
       [out retval] LONGLONG *pVal
     );
     [propget]
     HRESULT __stdcall DataSize32BitLow (
       [out retval] long *pVal
     );
     [propget]
     HRESULT __stdcall DataSize32BitHigh (
       [out retval] long *pVal
     );
     [propget]
     HRESULT __stdcall Data (
       [out retval] interface IStream **pVal
     );
     [id(44), propput]
     HRESULT __stdcall Data (
       [in] interface IStream *argNo1
     );
   };
   [
     uuid(ED79BA56-5294-4250-8D46-F9AECEE23459),
     helpstring("Named stream collection"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFsiNamedStreams : IDispatch
   {
     [id(-4), propget, restricted, hidden]
     HRESULT __stdcall _NewEnum (
       [out retval] interface IEnumVARIANT **NewEnum
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] long Index,
       [out retval] dispinterface IFsiFileItem2 **Item
     );
     [id(81), propget]
     HRESULT __stdcall Count (
       [out retval] long *Count
     );
     [propget, restricted, hidden]
     HRESULT __stdcall EnumNamedStreams (
       [out retval] interface IEnumFsiItems **NewEnum
     );
   };
   [
     uuid(7CFF842C-7E97-4807-8304-910DD8F7C051),
     helpstring("File system image (rev.3)"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFileSystemImage3 : IFileSystemImage2
   {
     [id(61), propget]
     HRESULT __stdcall CreateRedundantUdfMetadataFiles (
       [out retval] WINBOOL *pVal
     );
     [id(61), propput]
     HRESULT __stdcall CreateRedundantUdfMetadataFiles (
       [in] WINBOOL argNo1
     );
     [id(70)]
     HRESULT __stdcall ProbeSpecificFileSystem (
       [in] enum FsiFileSystems fileSystemToProbe,
       [out retval] WINBOOL *isAppendable
     );
   };
   [
     uuid(D7644B2C-1537-4767-B62F-F1387B02DDFD),
     helpstring("File system image (rev.2)"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFileSystemImage2 : IFileSystemImage
   {
     [id(60), propget]
     HRESULT __stdcall BootImageOptionsArray (
       [out retval] VARIANT pVal[]*
     );
     [id(60), propput]
     HRESULT __stdcall BootImageOptionsArray (
       [in] VARIANT argNo1[]
     );
   };
   [
     uuid(2C941FE1-975B-59BE-A960-9A2A262853A5),
     helpstring("File system image"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IFileSystemImage : IDispatch
   {
     [id(0), propget]
     HRESULT __stdcall Root (
       [out retval] dispinterface IFsiDirectoryItem **pVal
     );
     [propget]
     HRESULT __stdcall SessionStartBlock (
       [out retval] long *pVal
     );
     [id(1), propput]
     HRESULT __stdcall SessionStartBlock (
       [in] long argNo1
     );
     [propget]
     HRESULT __stdcall FreeMediaBlocks (
       [out retval] long *pVal
     );
     [id(2), propput]
     HRESULT __stdcall FreeMediaBlocks (
       [in] long argNo1
     );
     [id(36)]
     HRESULT __stdcall SetMaxMediaBlocksFromDevice (
       [in] dispinterface IDiscRecorder2 *discRecorder
     );
     [id(3), propget]
     HRESULT __stdcall UsedBlocks (
       [out retval] long *pVal
     );
     [propget]
     HRESULT __stdcall VolumeName (
       [out retval] BSTR *pVal
     );
     [id(4), propput]
     HRESULT __stdcall VolumeName (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall ImportedVolumeName (
       [out retval] BSTR *pVal
     );
     [propget]
     HRESULT __stdcall BootImageOptions (
       [out retval] dispinterface IBootOptions **pVal
     );
     [id(6), propput]
     HRESULT __stdcall BootImageOptions (
       [in] dispinterface IBootOptions *argNo1
     );
     [propget]
     HRESULT __stdcall FileCount (
       [out retval] long *pVal
     );
     [propget]
     HRESULT __stdcall DirectoryCount (
       [out retval] long *pVal
     );
     [propget]
     HRESULT __stdcall WorkingDirectory (
       [out retval] BSTR *pVal
     );
     [id(9), propput]
     HRESULT __stdcall WorkingDirectory (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall ChangePoint (
       [out retval] long *pVal
     );
     [propget]
     HRESULT __stdcall StrictFileSystemCompliance (
       [out retval] WINBOOL *pVal
     );
     [id(11), propput]
     HRESULT __stdcall StrictFileSystemCompliance (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall UseRestrictedCharacterSet (
       [out retval] WINBOOL *pVal
     );
     [id(12), propput]
     HRESULT __stdcall UseRestrictedCharacterSet (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall FileSystemsToCreate (
       [out retval] enum FsiFileSystems *pVal
     );
     [id(13), propput]
     HRESULT __stdcall FileSystemsToCreate (
       [in] enum FsiFileSystems argNo1
     );
     [propget]
     HRESULT __stdcall FileSystemsSupported (
       [out retval] enum FsiFileSystems *pVal
     );
     [id(37), propput]
     HRESULT __stdcall UDFRevision (
       [in] long argNo1
     );
     [id(37), propget]
     HRESULT __stdcall UDFRevision (
       [out retval] long *pVal
     );
     [id(31), propget]
     HRESULT __stdcall UDFRevisionsSupported (
       [out retval] VARIANT pVal[]*
     );
     HRESULT __stdcall ChooseImageDefaults (
       [in] dispinterface IDiscRecorder2 *discRecorder
     );
     HRESULT __stdcall ChooseImageDefaultsForMediaType (
       [in] IMAPI_MEDIA_PHYSICAL_TYPE value
     );
     [propput]
     HRESULT __stdcall ISO9660InterchangeLevel (
       [in] long argNo1
     );
     [id(34), propget]
     HRESULT __stdcall ISO9660InterchangeLevel (
       [out retval] long *pVal
     );
     [id(38), propget]
     HRESULT __stdcall ISO9660InterchangeLevelsSupported (
       [out retval] VARIANT pVal[]*
     );
     [id(15)]
     HRESULT __stdcall CreateResultImage (
       [out retval] dispinterface IFileSystemImageResult **resultStream
     );
     HRESULT __stdcall Exists (
       [in] BSTR FullPath,
       [out retval] enum FsiItemType *itemType
     );
     [id(18)]
     HRESULT __stdcall CalculateDiscIdentifier (
       [out retval] BSTR *discIdentifier
     );
     HRESULT __stdcall IdentifyFileSystemsOnDisc (
       [in] dispinterface IDiscRecorder2 *discRecorder,
       [out retval] enum FsiFileSystems *fileSystems
     );
     HRESULT __stdcall GetDefaultFileSystemForImport (
       [in] enum FsiFileSystems fileSystems,
       [out retval] enum FsiFileSystems *importDefault
     );
     HRESULT __stdcall ImportFileSystem (
       [out retval] enum FsiFileSystems *importedFileSystem
     );
     HRESULT __stdcall ImportSpecificFileSystem (
       [in] enum FsiFileSystems fileSystemToUse
     );
     HRESULT __stdcall RollbackToChangePoint (
       [in] long ChangePoint
     );
     HRESULT __stdcall LockInChangePoint (void);
     HRESULT __stdcall CreateDirectoryItem (
       [in] BSTR Name,
       [out retval] dispinterface IFsiDirectoryItem **newItem
     );
     HRESULT __stdcall CreateFileItem (
       [in] BSTR Name,
       [out retval] dispinterface IFsiFileItem **newItem
     );
     [propget]
     HRESULT __stdcall VolumeNameUDF (
       [out retval] BSTR *pVal
     );
     [propget]
     HRESULT __stdcall VolumeNameJoliet (
       [out retval] BSTR *pVal
     );
     [propget]
     HRESULT __stdcall VolumeNameISO9660 (
       [out retval] BSTR *pVal
     );
     [propget]
     HRESULT __stdcall StageFiles (
       [out retval] WINBOOL *pVal
     );
     [id(30), propput]
     HRESULT __stdcall StageFiles (
       [in] WINBOOL argNo1
     );
     [id(40), propget]
     HRESULT __stdcall MultisessionInterfaces (
       [out retval] VARIANT pVal[]*
     );
     [id(40), propput]
     HRESULT __stdcall MultisessionInterfaces (
       [in] VARIANT argNo1[]
     );
   };
   [
     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
     );
   };

};

/* Interface declarations.  */
[
  uuid(2C941FDF-975B-59BE-A960-9A2A262853A5),
  helpstring("Provides notification of file system creation progress"),
  nonextensible,
  oleautomation,
  dispatchable
]
interface DFileSystemImageEvents : IDispatch
{
  [id(256)]
  HRESULT __stdcall Update (
    [in] IDispatch * object,
    [in] BSTR currentFile,
    [in] long copiedSectors,
    [in] long totalSectors
  );
};
[
  uuid(D25C30F9-4087-4366-9E24-E55BE286424B),
  helpstring("Provides notification of file system import progress"),
  nonextensible,
  oleautomation,
  dispatchable
]
interface DFileSystemImageImportEvents : IDispatch
{
  [id(257)]
  HRESULT __stdcall UpdateImport (
    [in] IDispatch * object,
    [in] enum FsiFileSystems fileSystem,
    [in] BSTR currentItem,
    [in] long importedDirectoryItems,
    [in] long totalDirectoryItems,
    [in] long importedFileItems,
    [in] long totalFileItems
  );
};
[
  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(2C941FD6-975B-59BE-A960-9A2A262853A5),
  helpstring("FileSystemImageResult progress item enumerator")
]
interface IEnumProgressItems : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall RemoteNext (
    [in] UINT celt,
    [out] dispinterface IProgressItem **rgelt,
    [out] UINT *pceltFetched
  );
  HRESULT __stdcall Skip (
    [in] UINT celt
  );
  HRESULT __stdcall Reset (void);
  HRESULT __stdcall Clone (
    [out] interface IEnumProgressItems **ppEnum
  );
};
[
  uuid(2C941FDA-975B-59BE-A960-9A2A262853A5),
  helpstring("FileSystemImage item enumerator")
]
interface IEnumFsiItems : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall RemoteNext (
    [in] UINT celt,
    [out] dispinterface IFsiItem **rgelt,
    [out] UINT *pceltFetched
  );
  HRESULT __stdcall Skip (
    [in] UINT celt
  );
  HRESULT __stdcall Reset (void);
  HRESULT __stdcall Clone (
    [out] interface IEnumFsiItems **ppEnum
  );
};
[
  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(6CA38BE5-FBBB-4800-95A1-A438865EB0D4),
  helpstring("ISO Image Manager: Helper object for ISO image file manipulation"),
  dispatchable
]
interface IIsoImageManager : IDispatch
{
  [id(256), propget]
  HRESULT __stdcall path (
    [out retval] BSTR *pVal
  );
  [propget]
  HRESULT __stdcall Stream (
    [out retval] interface IStream **Data
  );
  [id(512)]
  HRESULT __stdcall SetPath (
    [in] BSTR Val
  );
  HRESULT __stdcall SetStream (
    [in] interface IStream *Data
  );
  HRESULT __stdcall Validate (void);
};

