isofile.s = "c:\tmp\mein.iso"
foldertoiso.s = "c:\temp\"
Code: Select all
Import "shlwapi.lib"
SHCreateStreamOnFileEx(pszFile.p-unicode,grfMode.l,dwAttributes.l,fCreate.b,pstmTemplate.l,ppstm.l);
EndImport
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 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 IFsiDirectoryItem ; FileSystemImage directory item
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_Name(dispidMember.l)
get_FullPath(dispidMember.l)
get_CreationTime(dispidMember.l)
put_CreationTime(dispidMember.d)
get_LastAccessedTime(dispidMember.l)
put_LastAccessedTime(dispidMember.d)
get_LastModifiedTime(dispidMember.l)
put_LastModifiedTime(dispidMember.d)
get_IsHidden(dispidMember.l)
put_IsHidden(dispidMember.w)
FileSystemName(fileSystem.l)
FileSystemPath(fileSystem.l)
get__NewEnum(fileSystem.l)
get_Item(path.p-bstr)
get_Count(path.l)
get_EnumFsiItems(path.l)
AddDirectory(path.p-bstr)
AddFile(path.p-bstr,fileData.l)
AddTree(sourceDirectory.p-bstr,includeBaseDirectory.w)
Add(Item.l)
Remove(path.p-bstr)
RemoveTree(path.p-bstr)
EndInterface
Structure STATSTG
pwcsName.l
type.l
cbSize.q
mtime.FILETIME
ctime.FILETIME
atime.FILETIME
grfMode.f
grfLocksSupported.l
clsid.GUID
grfStateBits.l
reserved.l
EndStructure
Procedure.l Ansi2Uni(ansi.s)
SHStrDup_(@ansi,@memziel)
ProcedureReturn memziel
EndProcedure
#STGM_WRITE = 1
#STGM_CREATE = $1000
#STATFLAG_NONAME = 0
#FsiFileSystemNone = 0
#FsiFileSystemISO9660 = 1
#FsiFileSystemJoliet = 2
#FsiFileSystemUDF = 4
#FsiFileSystemUnknown = 1073741824
isostream.IStream
datastream.IStream
isofile.s = "c:\tmp\mein.iso"
foldertoiso.s = "c:\temp\"
CreateStreamOnHGlobal_(0,#True,@datastream)
SHCreateStreamOnFileEx(isofile ,#STGM_WRITE|#STGM_CREATE,0,0,0,@isoStream)
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
;...
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(#FsiFileSystemJoliet)
object_fsimage\put_VolumeName("my iso")
object_fsimage\put_BootImageOptions(object_boot.IBootOptions)
object_fsimage\get_root(@object_fsidir.IFsiDirectoryItem)
Debug object_fsidir\AddTree(foldertoiso,#VARIANT_TRUE)
Debug object_fsidir\get_count(@dirinroot.l)
Debug dirinroot ;1
object_fsimage\CreateResultImage(@result.IFileSystemImageResult)
result\get_ImageStream(@datastream)
dataStream\Stat(st.STATSTG,#STATFLAG_NONAME)
Debug "size: " + Str(st\cbSize) + " bytes"
ret1.q
ret2.q
datastream\copyto(isostream,st\cbSize,@ret1,@ret2)
Debug ret1
Debug ret2
object_fsimage\release()
EndIf
object_boot\Release()
EndIf
object_fsidir\release()
isostream\release()
datastream\release()
CoUninitialize_()
End
DataSection
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_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