Jump to content

Looking for a .ISO UDF


Go to solution Solved by Danyfirex,

Recommended Posts

Posted

Hello, I think there is not an UDF for such thing. But You could probably write your own one using IMAPI.

 

Saludos

Posted

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted (edited)

Here is a sample I converted from internet. It's a good start.

Removed

Edited. I removed the code. It's not working. I'll update with a new code later I think.

Correct Code here.

 

Saludos

Edited by Danyfirex
Posted (edited)

I removed the code in my previous comment.  It does not work. I tested a C++ code I don't know why I posted that sorry. I'm a little crazy  😨 these days. 

I'll try to convert the C++ code I tested.

 

Saludos

Edited by Danyfirex
  • Solution
Posted

Hello again. Here is the correct example:

;~ #AutoIt3Wrapper_UseX64=y

_CreateISO()

Func _CreateISO()
    Local $sSourceDirectory = @ScriptDir & "\Test"
    Local $sOutFileIso = @ScriptDir & "\MyFile.iso"
    Local $oFS = ObjCreate("IMAPI2FS.MsftFileSystemImage")
    $oFS .FreeMediaBlocks = 0
    $oFS.VolumeName = "MyISOName"
    $oFS.Root.AddTree($sSourceDirectory, False)
    Local $oRImage = $oFS.CreateResultImage()
    Local $oImgStream = ObjCreateInterface($oRImage.ImageStream(), '{0000000c-0000-0000-C000-000000000046}', _
            "D1 hresult();D2 hresult();D3 hresult();D4 hresult();CopyTo hresult(ptr;UINT64;UINT64*;UINT64*);" & _
            "D8 hresult();D9 hresult();D10 hresult();D11 hresult();Stat hresult(struct*;dword);")

    Local $tSTATSTG = DllStructCreate("byte[" & (@AutoItX64 ? 80 : 72) & "]")
    $oImgStream.Stat($tSTATSTG, 0x1)
    Local $icbSize = (DllStructCreate("UINT64 cbSize", DllStructGetPtr($tSTATSTG) + (@AutoItX64 ? 16 : 8))).cbSize
    Local $pFileStream = __MD_SHCreateStreamOnFile($sOutFileIso)
    Local $iRead, $iWritten
    $oImgStream.CopyTo($pFileStream,  $icbSize, $iRead, $iWritten)
EndFunc   ;==>_CreateIso

;Create File Stream
Func __MD_SHCreateStreamOnFile($sFilePath, $igrfMode = 0x00001001)
    Local $aCall = DllCall("shlwapi.dll", "long", "SHCreateStreamOnFileW", "wstr", $sFilePath, "dword", $igrfMode, "ptr*", 0)
    If $aCall[0] = 0 Then
        Return $aCall[3]
    EndIf
    Return 0
EndFunc   ;==>__MD_SHCreateStreamOnFile

 

I'm not so mad today. 🤭

 

Saludos

Posted

@argumentum I'm not sure what you mean. If you could point to an example made in other programming language I could convert it.

 

Saludos

Posted (edited)
  On 8/18/2022 at 12:51 PM, Danyfirex said:

If you could point to an example

Expand  

oh, no. I just tested what you posted and I'm like, hmm, makes a CD. Could it make a DVD, to put more than 600 megs.
But that was the question. I thought maybe a "$oFS.MediaType = DVD_for_argumentum" and that was as simple as that.  :)

Edit: ...randomly clicking..., found me answer:

Local $oFS = ObjCreate("IMAPI2FS.MsftFileSystemImage")
    $oFS.ChooseImageDefaultsForMediaType(0x12) ; 2=CDR, 6=DVDPLUSR, 0x12=BR ( https://www.autoitscript.com/forum/topic/73782-cddvd-burning-udf/ )
    $oFS.FreeMediaBlocks = 0

Have not tested anything as far as burning the ISO or even creating an ISO to test sizes but, the definition it's there. :gathering:

Edited by argumentum
found it

Follow the link to my code contribution ( and other things too ).
FAQ - Please Read Before Posting.
autoit_scripter_blue_userbar.png

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...