| 1591 | #if _MSC_VER >1500 |
| 1592 | |
| 1593 | HRESULT IsoCreateFileByPath(LPCWSTR pIsoPath, LPCWSTR SrcDir, LPCWSTR VolumeName, BaseCallBack callBack, LPVOID pUserData) |
| 1594 | { |
| 1595 | ComInitializeWrapper ComWrapper; |
| 1596 | |
| 1597 | CString pSrcDir= SrcDir; |
| 1598 | if (pSrcDir[pSrcDir.GetLength() - 1] != L'\\') |
| 1599 | pSrcDir += L'\\'; |
| 1600 | |
| 1601 | #define BOOT_FILE_NAME_LEGACY _T("boot\\etfsboot.com") //CSM boot |
| 1602 | #define BOOT_FILE_NAME_UEFI _T("efi\\microsoft\\boot\\efisys.bin") //UEFI boot |
| 1603 | |
| 1604 | |
| 1605 | CComPtr<IFileSystemImage2> pSystemImage; |
| 1606 | |
| 1607 | auto hr = CoCreateInstance(__uuidof(MsftFileSystemImage), |
| 1608 | NULL, |
| 1609 | CLSCTX_INPROC_SERVER, |
| 1610 | __uuidof(IFileSystemImage2), |
| 1611 | (LPVOID*)&pSystemImage); |
| 1612 | |
| 1613 | if (FAILED(hr)) |
| 1614 | { |
| 1615 | return hr; |
| 1616 | } |
| 1617 | |
| 1618 | |
| 1619 | hr = pSystemImage->put_VolumeName(CComBSTR(VolumeName ? VolumeName : L"ESD-ISO")); |
| 1620 | if (FAILED(hr)) |
| 1621 | { |
| 1622 | return hr; |
| 1623 | } |
| 1624 | |
| 1625 | struct MediaInfo |
| 1626 | { |
| 1627 | IMAPI_MEDIA_PHYSICAL_TYPE Type; |
| 1628 | LONG FreeMediaBlocks; |
| 1629 | }; |
| 1630 | |
| 1631 | const MediaInfo MediaTypes[]= |
| 1632 | { |
| 1633 | { IMAPI_MEDIA_TYPE_DVDPLUSR, 2295104 }, |
| 1634 | { IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER, 4173824 }, |
| 1635 | { IMAPI_MEDIA_TYPE_HDDVDROM, 62500864 }, |
| 1636 | }; |
| 1637 | |
| 1638 | std::vector<IBootOptions*> vBootOptions; |
| 1639 | |
| 1640 | { |
| 1641 | CComPtr<IStream> pBootStream; |
| 1642 | SHCreateStreamOnFileW(pSrcDir + BOOT_FILE_NAME_LEGACY, STGM_READ | STGM_SHARE_DENY_WRITE, &pBootStream); |
| 1643 | if (pBootStream) |
| 1644 | { |
| 1645 | CComPtr<IBootOptions> BootOption; |
| 1646 | |
| 1647 | hr = CoCreateInstance(__uuidof(BootOptions), NULL, CLSCTX_INPROC_SERVER, __uuidof(IBootOptions), (void**)&BootOption); |
| 1648 | if (SUCCEEDED(hr)) |
| 1649 | { |
| 1650 | BootOption->put_Manufacturer(CComBSTR(L"MBR")); |