brennen mit vista ...

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

brennen mit vista ...

Beitrag 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
1:0>1