brennen mit vista ...
Verfasst: 05.07.2007 16:32
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

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

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