#include #include #include void create_iso( std::wstring_view src, std::wstring_view iso_path ) { HRESULT hr; IFileSystemImage* fsimg; IFsiDirectoryItem* fsdir; IFileSystemImageResult* fsresult; IStream* img; IStream* filestream; hr = CoCreateInstance( __uuidof( MsftFileSystemImage ), NULL, CLSCTX_INPROC_SERVER, __uuidof( IFileSystemImage ), ( LPVOID* ) &fsimg ); if ( SUCCEEDED( hr ) ) { fsimg->get_Root( &fsdir ); fsdir->AddTree( CComBSTR( src.data() ), VARIANT_TRUE ); hr = fsimg->CreateResultImage( &fsresult ); if ( SUCCEEDED( hr ) ) { fsresult->get_ImageStream( &img ); if ( SUCCEEDED( hr ) ) { STATSTG statstg; ULARGE_INTEGER rd; ULARGE_INTEGER wr; SHCreateStreamOnFileEx( iso_path.data(), STGM_READWRITE, FILE_ATTRIBUTE_NORMAL, TRUE, NULL, &filestream ); img->Stat( &statstg, STATFLAG_DEFAULT ); img->CopyTo( filestream, statstg.cbSize, &rd, &wr ); filestream->Release(); img->Release(); } fsresult->Release(); } fsimg->Release(); } } CoInitializeEx(0); create_iso(R("d:\in\testdir"), R("d:\out\test.iso")); // // OR... // create_iso(R("d:\in\testfile.ext"), R("d:\out\test.iso")); CoUninitialize();