Seite 1 von 1

brennen mit vista ...

Verfasst: 05.07.2007 16:32
von bingo
hier mal ein erstes muster :) , um die brenn"interfaces" in vista zu nutzen .
im prinzip wird ein mit winimage erstelltes bootimage (dos diskettenimage z.bsp. freedos) in die exe eingebunden und dann als boot-stream auf ein leeres medium (cd/dvd) gebrannt . somit ist das medium dann bootfähig !

natürlich lässt das interface noch vieles mehr zu ... siehe http://msdn2.microsoft.com/en-us/library/aa366224.aspx
aber mit interfaces zu arbeiten ist nicht gerade angenehm 8)

Code: Alles auswählen

Interface IBootOptions ; Boot options 
  QueryInterface(riid.l,ppvObj.l) 
  AddRef() 
  Release() 
  GetTypeInfoCount(pctinfo.l) 
  GetTypeInfo(itinfo.l,lcid.l,pptinfo.l) 
  GetIDsOfNames(riid.l,rgszNames.l,cNames.l,lcid.l,rgdispid.l) 
  Invoke(dispidMember.l,riid.l,lcid.l,wFlags.l,pdispparams.l,pvarResult.l,pexcepinfo.l,puArgErr.l) 
  get_BootImage(dispidMember.l) 
  get_Manufacturer(dispidMember.l) 
  put_Manufacturer(dispidMember.p-bstr) 
  get_PlatformId(dispidMember.l) 
  put_PlatformId(dispidMember.l) 
  get_Emulation(dispidMember.l) 
  put_Emulation(dispidMember.l) 
  get_ImageSize(dispidMember.l) 
  AssignBootImage(newVal.l) 
EndInterface 

Interface IDiscMaster2 Extends IDispatch 
  get__NewEnum(a) 
  get_Item(a,b) 
  get_Count(a) 
  get_IsSupportedEnvironment(a) 
EndInterface 

Interface IDiscRecorder2 Extends IDispatch 
  EjectMedia() 
  CloseTray() 
  AcquireExclusiveAccess(a,b) 
  ReleaseExclusiveAccess() 
  DisableMcn() 
  EnableMcn() 
  InitializeDiscRecorder(a) 
  get_ActiveDiscRecorder(a) 
  get_VendorId(a) 
  get_ProductId(a) 
  get_ProductRevision(a) 
  get_VolumeName(a) 
  get_VolumePathNames(a) 
  get_DeviceCanLoadMedia(a) 
  get_LegacyDeviceNumber(a) 
  get_SupportedFeaturePages(a) 
  get_CurrentFeaturePages(a) 
  get_SupportedProfiles(a) 
  get_CurrentProfiles(a) 
  get_SupportedModePages(a) 
  get_ExclusiveAccessOwner(a) 
EndInterface 

Interface IFileSystemImage ; File system image 
  QueryInterface(riid.l,ppvObj.l) 
  AddRef() 
  Release() 
  GetTypeInfoCount(pctinfo.l) 
  GetTypeInfo(itinfo.l,lcid.l,pptinfo.l) 
  GetIDsOfNames(riid.l,rgszNames.l,cNames.l,lcid.l,rgdispid.l) 
  Invoke(dispidMember.l,riid.l,lcid.l,wFlags.l,pdispparams.l,pvarResult.l,pexcepinfo.l,puArgErr.l) 
  get_Root(dispidMember.l) 
  get_SessionStartBlock(dispidMember.l) 
  put_SessionStartBlock(dispidMember.l) 
  get_FreeMediaBlocks(dispidMember.l) 
  put_FreeMediaBlocks(dispidMember.l) 
  SetMaxMediaBlocksFromDevice(discRecorder.l) 
  get_UsedBlocks(discRecorder.l) 
  get_VolumeName(discRecorder.l) 
  put_VolumeName(discRecorder.p-bstr) 
  get_ImportedVolumeName(discRecorder.l) 
  get_BootImageOptions(discRecorder.l) 
  put_BootImageOptions(discRecorder.l) 
  get_FileCount(discRecorder.l) 
  get_DirectoryCount(discRecorder.l) 
  get_WorkingDirectory(discRecorder.l) 
  put_WorkingDirectory(discRecorder.p-bstr) 
  get_ChangePoint(discRecorder.l) 
  get_StrictFileSystemCompliance(discRecorder.l) 
  put_StrictFileSystemCompliance(discRecorder.w) 
  get_UseRestrictedCharacterSet(discRecorder.l) 
  put_UseRestrictedCharacterSet(discRecorder.w) 
  get_FileSystemsToCreate(discRecorder.l) 
  put_FileSystemsToCreate(discRecorder.l) 
  get_FileSystemsSupported(discRecorder.l) 
  put_UDFRevision(discRecorder.l) 
  get_UDFRevision(discRecorder.l) 
  get_UDFRevisionsSupported(discRecorder.l) 
  ChooseImageDefaults(discRecorder.l) 
  ChooseImageDefaultsForMediaType(value.l) 
  put_ISO9660InterchangeLevel(value.l) 
  get_ISO9660InterchangeLevel(value.l) 
  get_ISO9660InterchangeLevelsSupported(value.l) 
  CreateResultImage(a.l) 
  Exists(FullPath.p-bstr) 
  CalculateDiscIdentifier() 
  IdentifyFileSystemsOnDisc(discRecorder.l) 
  GetDefaultFileSystemForImport(fileSystems.l) 
  ImportFileSystem() 
  ImportSpecificFileSystem(fileSystemToUse.l) 
  RollbackToChangePoint(ChangePoint.l) 
  LockInChangePoint() 
  CreateDirectoryItem(Name.p-bstr) 
  CreateFileItem(Name.p-bstr) 
  get_VolumeNameUDF(Name.l) 
  get_VolumeNameJoliet(Name.l) 
  get_VolumeNameISO9660(Name.l) 
  get_StageFiles(Name.l) 
  put_StageFiles(Name.w) 
  get_MultisessionInterfaces(Name.l) 
  put_MultisessionInterfaces(Name.l) 
EndInterface 

Interface IFileSystemImageResult ; FileSystemImage result stream 
  QueryInterface(riid.l,ppvObj.l) 
  AddRef() 
  Release() 
  GetTypeInfoCount(pctinfo.l) 
  GetTypeInfo(itinfo.l,lcid.l,pptinfo.l) 
  GetIDsOfNames(riid.l,rgszNames.l,cNames.l,lcid.l,rgdispid.l) 
  Invoke(dispidMember.l,riid.l,lcid.l,wFlags.l,pdispparams.l,pvarResult.l,pexcepinfo.l,puArgErr.l) 
  get_ImageStream(dispidMember.l) 
  get_ProgressItems(dispidMember.l) 
  get_TotalBlocks(dispidMember.l) 
  get_BlockSize(dispidMember.l) 
  get_DiscId(dispidMember.l) 
EndInterface 

Interface IDiscFormat2Data ; Data Writer 
  QueryInterface(riid.l,ppvObj.l) 
  AddRef() 
  Release() 
  GetTypeInfoCount(pctinfo.l) 
  GetTypeInfo(itinfo.l,lcid.l,pptinfo.l) 
  GetIDsOfNames(riid.l,rgszNames.l,cNames.l,lcid.l,rgdispid.l) 
  Invoke(dispidMember.l,riid.l,lcid.l,wFlags.l,pdispparams.l,pvarResult.l,pexcepinfo.l,puArgErr.l) 
  IsRecorderSupported(Recorder.l) 
  IsCurrentMediaSupported(Recorder.l) 
  get_MediaPhysicallyBlank(Recorder.l) 
  get_MediaHeuristicallyBlank(Recorder.l) 
  get_SupportedMediaTypes(Recorder.l) 
  put_Recorder(Recorder.l) 
  get_Recorder(Recorder.l) 
  put_BufferUnderrunFreeDisabled(Recorder.w) 
  get_BufferUnderrunFreeDisabled(Recorder.l) 
  put_PostgapAlreadyInImage(Recorder.w) 
  get_PostgapAlreadyInImage(Recorder.l) 
  get_CurrentMediaStatus(Recorder.l) 
  get_WriteProtectStatus(Recorder.l) 
  get_TotalSectorsOnMedia(Recorder.l) 
  get_FreeSectorsOnMedia(Recorder.l) 
  get_NextWritableAddress(Recorder.l) 
  get_StartAddressOfPreviousSession(Recorder.l) 
  get_LastWrittenAddressOfPreviousSession(Recorder.l) 
  put_ForceMediaToBeClosed(Recorder.w) 
  get_ForceMediaToBeClosed(Recorder.l) 
  put_DisableConsumerDvdCompatibilityMode(Recorder.w) 
  get_DisableConsumerDvdCompatibilityMode(Recorder.l) 
  get_CurrentPhysicalMediaType(Recorder.l) 
  put_ClientName(Recorder.p-bstr) 
  get_ClientName(Recorder.l) 
  get_RequestedWriteSpeed(Recorder.l) 
  get_RequestedRotationTypeIsPureCAV(Recorder.l) 
  get_CurrentWriteSpeed(Recorder.l) 
  get_CurrentRotationTypeIsPureCAV(Recorder.l) 
  get_SupportedWriteSpeeds(Recorder.l) 
  get_SupportedWriteSpeedDescriptors(Recorder.l) 
  put_ForceOverwrite(Recorder.w) 
  get_ForceOverwrite(Recorder.l) 
  get_MultisessionInterfaces(Recorder.l) 
  Write(Data_.l) 
  CancelWrite() 
  SetWriteSpeed(RequestedSectorsPerSecond.l,RotationTypeIsPureCAV.w) 
EndInterface 

pp.variant 
pp\vt = #VT_BSTR 

CreateStreamOnHGlobal_(0,#True,@stream.IStream) 
stream\write(?test1a,?test1e-?test1a, @dwWritten.l) 

CoInitialize_(0) 
If CoCreateInstance_(?CLSID_BootOptions,0,1,?IID_IBootOptions,@object_boot.IBootOptions) = 0 
object_boot\put_Manufacturer("Microsoft") 
object_boot\put_PlatformId(0) ;x86 family processor 
object_boot\put_Emulation(0)  ;EmulationType.EmulationNone 
object_boot\AssignBootImage(Stream.IStream) 

If CoCreateInstance_(?CLSID_MsftDiscMaster2,0,1,?IID_IDiscMaster2,@object_disc.IDiscMaster2) = 0 
object_disc\get_Item(0,@pp\bstrval) ; 1. burner 

If CoCreateInstance_(?CLSID_MsftDiscRecorder2,0,1,?IID_IDiscRecorder2,@object_record.IDiscRecorder2) = 0 
object_record\InitializeDiscRecorder(pp\bstrval) 

If CoCreateInstance_(?CLSID_FileSystemImage,0,1,?IID_IFileSystemImage,@object_fsimage.IFileSystemImage) = 0 

object_fsimage\put_FreeMediaBlocks(0) ;Enables larger-than-CD image 
object_fsimage\put_FileSystemsToCreate(1) ;FsiFileSystemISO9660 
object_fsimage\put_BootImageOptions(object_boot.IBootOptions) 

object_fsimage\CreateResultImage(@result.IFileSystemImageResult) 

result\get_ImageStream(@iistream.l) 

If CoCreateInstance_(?CLSID_DiscFormat2Data,0,1,?IID_IDiscFormat2Data,@object_format.IDiscFormat2Data) = 0 

object_format\put_Recorder(object_record) 
object_format\put_ClientName("burn test") 
object_format\write(iistream) 

object_format\release() 
EndIf 

object_fsimage\release() 
EndIf 

object_record\release() 
EndIf 

object_disc\release() 
EndIf 

object_boot\Release() 
EndIf 

CoUninitialize_() 

stream\Release() 
End 


DataSection 

test1a: 
IncludeBinary "c:\burn\freedos.ima" 
test1e: 

CLSID_DiscFormat2Data: 
Data.l $2735412A 
Data.w $7F64,$5B0F 
Data.b $8F,$00,$5D,$77,$AF,$BE,$26,$1E 

IID_IDiscFormat2Data: 
Data.l $27354153 
Data.w $9F64,$5B0F 
Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E 

CLSID_FileSystemImage: 
Data.l $2C941FC5 
Data.w $975B,$59BE 
Data.b $A9,$60,$9A,$2A,$26,$28,$53,$A5 

IID_IFileSystemImage: 
Data.l $2C941FE1 
Data.w $975B,$59BE 
Data.b $A9,$60,$9A,$2A,$26,$28,$53,$A5 

CLSID_MsftDiscRecorder2: 
Data.l $2735412D 
Data.w $7F64,$5B0F 
Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E 

IID_IDiscRecorder2: 
Data.l $27354133 
Data.w $7F64,$5B0F 
Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E 

CLSID_MsftDiscMaster2: 
Data.l $2735412E 
Data.w $7F64,$5B0F 
Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E 

IID_IDiscMaster2: 
Data.l $27354130 
Data.w $7F64,$5B0F 
Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E 
    
CLSID_BootOptions: 
Data.l $2C941FCE 
Data.w $975B,$59BE 
Data.b $A9,$60,$9A,$2A,$26,$28,$53,$A5 

IID_IBootOptions: 
Data.l $2C941FD4 
Data.w $975B,$59BE 
Data.b $A9,$60,$9A,$2A,$26,$28,$53,$A5 


EndDataSection