Perhaps it is best if you inspect the source code of NeroCMD. Generally, you should build a file/folder hierarchy using NERO_ISO_ITEM structures (created by NeroCreateIsoItem) and then call NeroCreateIsoTrackEx to build the actual ISO track. Once you have everything set, you should call NeroBurn using an image recorder's device handle. Your user dialog callback will eventually receive DLG_FILESEL_IMAGE event. There you have a chance to supply NeroAPI with a destination file name.