1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ipvb-iBurnMgr

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 3.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 07:48 c2b1fee

USB Device Boot Burn Manager

iBurnMgr — это менеджер записи загрузочного раздела на USB-накопители в современном стиле.

iBurnMgr разработан с использованием C++, работает в Windows, на рабочем USB-диске установки Windows 10. В iBurnMgr используется фреймворк WTL, применяются функции Direct2D для отрисовки кнопок Push Button, Close и Minimize, а также фонов и функциональных областей. Текст выводится с помощью DirectWrite, MessageBox заменён на TaskDialog.

Форматирование USB-флеш-накопителя происходит с помощью инструментов format.com, которые полагаются на Windows. Распаковка образа ISO выполняется с помощью 7z, восстановление USB-флешки — с помощью bootsect.exe из ADK для Windows. Во втором или третьем издании iBurnMgr будет устранена зависимость от сторонних инструментов.

В настоящее время iBurnMgr поддерживает многоязычность.

Сейчас iBurnMgr не может быть собран под Win32!

Внутреннее устройство

  1. Форматирование:
BOOL WINAPI  IVdsVolumeFormat(
	LPCWSTR    latter,
	LPWSTR    pwszLabel,
	FormatFailedCallback fcall,
	void *data)
{
	if (!VAILED_LATTER(latter[0]) || latter[1] != ':') return FALSE;
	HRESULT hr, AsyncHr;
	IVdsAsync      *pAsync = NULL;
	VDS_ASYNC_OUTPUT AsyncOut;

	hr = CoInitializeSecurity(
		NULL,
		-1,
		NULL,
		NULL,
		RPC_C_AUTHN_LEVEL_CONNECT,
		RPC_C_IMP_LEVEL_IMPERSONATE,
		NULL,
		0,
		NULL
	);
	IVdsServiceLoader *pLoader;
	IUnknown *pUnk;
	ULONG ulFetched = 0;
	hr = CoCreateInstance(CLSID_VdsLoader,
		NULL,
		CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
		IID_IVdsServiceLoader,
		(void **)&pLoader
	);
	if (hr != S_OK) return false;
	IVdsService *pService;
	hr = pLoader->LoadService(NULL, &pService);
	pLoader->Release();
	pLoader = NULL;
	if (hr != S_OK){
		if (fcall){
			fcall(ErrorCodesMessage(hr), data);
		}
		return FALSE;
	}
	VDS_DRIVE_LETTER_PROP mDriveLetterPropArray[1];
	hr = pService->QueryDriveLetters(latter[0], 1, mDriveLetterPropArray);
	if (hr != S_OK){
		goto _bailout;
	}
	hr = pService->GetObjectW(mDriveLetterPropArray->volumeId, VDS_OT_VOLUME, &pUnk);
	if (hr != S_OK){
		goto _bailout;
	}
	IVdsVolume *pVolume;
	hr = pUnk->QueryInterface(IID_IVdsVolume, (void **)&pVolume);
	if (hr != S_OK){
		SAFE_RELEASE(pUnk);
		goto _bailout;
	}
	IVdsVolumeMF3 *pVolumeMF3;
	hr = pVolume->QueryInterface(IID_IVdsVolumeMF3, (void **)&pVolumeMF3);

	hr = pVolumeMF3->FormatEx2(L"NTFS", 1, 0, pwszLabel, VDS_FSOF_QUICK, &pAsync);
	hr = pAsync->Wait(&AsyncHr, &AsyncOut);
	if (FAILED(hr)){
		if (fcall){
			fcall(ErrorCodesMessage(hr), data);
		}
	}
	else if (FAILED(AsyncHr)){
		if (fcall){
			fcall(ErrorCodesMessage(hr), data);
		}
	}
	else{
		if (fcall){
			fcall(L"Format volume Success done. ", data);
		}
	}
	SAFE_RELEASE(pVolume);
	SAFE_ORELASE(pVolumeMF3);
_bailout:
	SAFE_RELEASE(pService);
	CoUninitialize();
	return hr==S_OK;
}
  1. Распаковка ISO:

7z x file.iso -aoa -y -o X:\

  1. Загрузка:

bootsect /NT60 X:

Сборка

Запустите WDExpress [VisualStudio 2012(2013) для рабочего стола] или введите команду:

msbuild iBurnMgr.sln /t:Rebuild /p:Configuration=Release

Запуск

Дважды щёлкните по iBurnMgr.exe или запустите программу с правами администратора.

Удачи!

Скриншот

Новый интерфейс: NewUI

Китайский интерфейс: ChineseUI

1
https://api.gitlife.ru/oschina-mirror/ipvb-iBurnMgr.git
git@api.gitlife.ru:oschina-mirror/ipvb-iBurnMgr.git
oschina-mirror
ipvb-iBurnMgr
ipvb-iBurnMgr
master