Я пытаюсь программно создать VHD/VHDX и выполнить те же «шаги», которые показаны в следующем фрагменте vbscript, используя C++, WINAPI и без< /strong> на основе diskpart:
diskpartScriptPath = fso.GetSpecialFolder(2) & "\diskpart.txt"
Set file = fso.CreateTextFile(diskpartScriptPath, True)
file.WriteLine "select disk=0"
file.WriteLine "clean"
file.WriteLine "convert gpt"
file.WriteLine "create partition efi size=100"
file.WriteLine "format quick fs=fat32 label=""System""" ' EFI partition drive letter
file.WriteLine "create partition msr size=16"
file.WriteLine "create partition primary"
file.WriteLine "format quick fs=ntfs label=""Windows"""
file.WriteLine "assign letter C"
Мне удалось создать диск, подключить его, отформатировать, но когда я пытаюсь присвоить ему букву с помощью SetVolumeMountPointW, возникает ошибка:
0x57 Неверный параметр.
Создание диска с использованием CREATE_VIRTUAL_DISK_PARAMETERS Version1 работает, но когда я пробую версию 2, я всегда получаю:
ошибка: 0x00000057: параметр неверен.:
CREATE_VIRTUAL_DISK_PARAMETERS createParams = {};
createParams.Version = CREATE_VIRTUAL_DISK_VERSION_2;
createParams.Version2.UniqueId = GUID_NULL;
createParams.Version2.MaximumSize = sizeInBytes;
createParams.Version2.BlockSizeInBytes = 0; // Default block size
createParams.Version2.SectorSizeInBytes = 512; // Standard sector size
createParams.Version2.ParentPath = NULL;
createParams.Version2.SourcePath = NULL;
createParams.Version2.PhysicalSectorSizeInBytes = 4096;
createParams.Version2.OpenFlags = OPEN_VIRTUAL_DISK_FLAG_NONE;
createParams.Version2.ParentVirtualStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
createParams.Version2.ParentVirtualStorageType.VendorId = GUID_NULL;
createParams.Version2.SourceVirtualStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
createParams.Version2.SourceVirtualStorageType.VendorId = GUID_NULL;
createParams.Version2.ResiliencyGuid = GUID_NULL;
HANDLE diskHandle = INVALID_HANDLE_VALUE;
VIRTUAL_STORAGE_TYPE storageType =
{
VIRTUAL_STORAGE_TYPE_DEVICE_VHDX,
VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT
};
HRESULT hr = CreateVirtualDisk(
&storageType,
filePath.c_str(),
VIRTUAL_DISK_ACCESS_CREATE,
NULL,
CREATE_VIRTUAL_DISK_FLAG_NONE,
0,
&createParams,
NULL,
&diskHandle
);
Я хотел бы понять, почему он не работает в версии 2.
Код находится в стадии разработки, я полностью потерялся в разбиении на разделы часть, я имею в виду, как правильно создать все разделы, аналогичные предыдущему упомянутому коду, с помощью diskpart.
Диск будет использоваться для развертывания настроенный образ Windows с помощью dism /apply-image перед применением его к виртуальная машина.
Следите за моей текущей реализацией с помощью этого вопроса.
#include
#include
#include
#include
#include
#pragma comment(lib, "virtdisk.lib")
#pragma comment(lib, "Ole32.lib")
#define GUID_NULL {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
class VHDXCreator
{
public:
static bool CreateVHDX(const std::wstring& filePath, ULONGLONG sizeInBytes)
{
CREATE_VIRTUAL_DISK_PARAMETERS createParams = {};
createParams.Version = CREATE_VIRTUAL_DISK_VERSION_2;
createParams.Version2.UniqueId = GUID_NULL;
createParams.Version2.MaximumSize = sizeInBytes;
createParams.Version2.BlockSizeInBytes = 0; // Default block size
createParams.Version2.SectorSizeInBytes = 512; // Standard sector size
createParams.Version2.ParentPath = NULL;
createParams.Version2.SourcePath = NULL;
createParams.Version2.PhysicalSectorSizeInBytes = 4096;
createParams.Version2.OpenFlags = OPEN_VIRTUAL_DISK_FLAG_NONE;
createParams.Version2.ParentVirtualStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
createParams.Version2.ParentVirtualStorageType.VendorId = GUID_NULL;
createParams.Version2.SourceVirtualStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
createParams.Version2.SourceVirtualStorageType.VendorId = GUID_NULL;
createParams.Version2.ResiliencyGuid = GUID_NULL;
// ----- Create the VHDX ----------
HANDLE diskHandle = INVALID_HANDLE_VALUE;
VIRTUAL_STORAGE_TYPE storageType =
{
VIRTUAL_STORAGE_TYPE_DEVICE_VHDX,
VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT
};
HRESULT hr = CreateVirtualDisk(
&storageType,
filePath.c_str(),
VIRTUAL_DISK_ACCESS_CREATE,
NULL,
CREATE_VIRTUAL_DISK_FLAG_NONE,
0,
&createParams,
NULL,
&diskHandle
);
CloseHandle(diskHandle);
if (hr != S_OK)
{
std::wcerr
Подробнее здесь: https://stackoverflow.com/questions/792 ... ive-letter
Как создать, разбить на разделы, отформатировать диск VHDX и назначить ему букву диска? ⇐ C++
Программы на C++. Форум разработчиков
1734045755
Anonymous
Я пытаюсь программно создать VHD/VHDX и выполнить те же «шаги», которые показаны в следующем фрагменте vbscript, используя C++, WINAPI и [b]без< /strong> на основе diskpart:
diskpartScriptPath = fso.GetSpecialFolder(2) & "\diskpart.txt"
Set file = fso.CreateTextFile(diskpartScriptPath, True)
file.WriteLine "select disk=0"
file.WriteLine "clean"
file.WriteLine "convert gpt"
file.WriteLine "create partition efi size=100"
file.WriteLine "format quick fs=fat32 label=""System""" ' EFI partition drive letter
file.WriteLine "create partition msr size=16"
file.WriteLine "create partition primary"
file.WriteLine "format quick fs=ntfs label=""Windows"""
file.WriteLine "assign letter C"
Мне удалось создать диск, подключить его, отформатировать, но когда я пытаюсь присвоить ему букву с помощью SetVolumeMountPointW, возникает ошибка:
0x57 Неверный параметр.
Создание диска с использованием CREATE_VIRTUAL_DISK_PARAMETERS Version1 работает, но когда я пробую версию 2, я всегда получаю:
ошибка: 0x00000057: параметр неверен.:
CREATE_VIRTUAL_DISK_PARAMETERS createParams = {};
createParams.Version = CREATE_VIRTUAL_DISK_VERSION_2;
createParams.Version2.UniqueId = GUID_NULL;
createParams.Version2.MaximumSize = sizeInBytes;
createParams.Version2.BlockSizeInBytes = 0; // Default block size
createParams.Version2.SectorSizeInBytes = 512; // Standard sector size
createParams.Version2.ParentPath = NULL;
createParams.Version2.SourcePath = NULL;
createParams.Version2.PhysicalSectorSizeInBytes = 4096;
createParams.Version2.OpenFlags = OPEN_VIRTUAL_DISK_FLAG_NONE;
createParams.Version2.ParentVirtualStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
createParams.Version2.ParentVirtualStorageType.VendorId = GUID_NULL;
createParams.Version2.SourceVirtualStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
createParams.Version2.SourceVirtualStorageType.VendorId = GUID_NULL;
createParams.Version2.ResiliencyGuid = GUID_NULL;
HANDLE diskHandle = INVALID_HANDLE_VALUE;
VIRTUAL_STORAGE_TYPE storageType =
{
VIRTUAL_STORAGE_TYPE_DEVICE_VHDX,
VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT
};
HRESULT hr = CreateVirtualDisk(
&storageType,
filePath.c_str(),
VIRTUAL_DISK_ACCESS_CREATE,
NULL,
CREATE_VIRTUAL_DISK_FLAG_NONE,
0,
&createParams,
NULL,
&diskHandle
);
Я хотел бы понять, почему он не работает в версии 2.
Код находится в стадии разработки, я полностью потерялся в разбиении на разделы часть, я имею в виду, как правильно создать все разделы[/b], аналогичные предыдущему упомянутому коду, с помощью diskpart.
Диск будет использоваться для развертывания настроенный образ Windows с помощью dism /apply-image перед применением его к виртуальная машина.
Следите за моей текущей реализацией с помощью этого вопроса.
#include
#include
#include
#include
#include
#pragma comment(lib, "virtdisk.lib")
#pragma comment(lib, "Ole32.lib")
#define GUID_NULL {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
class VHDXCreator
{
public:
static bool CreateVHDX(const std::wstring& filePath, ULONGLONG sizeInBytes)
{
CREATE_VIRTUAL_DISK_PARAMETERS createParams = {};
createParams.Version = CREATE_VIRTUAL_DISK_VERSION_2;
createParams.Version2.UniqueId = GUID_NULL;
createParams.Version2.MaximumSize = sizeInBytes;
createParams.Version2.BlockSizeInBytes = 0; // Default block size
createParams.Version2.SectorSizeInBytes = 512; // Standard sector size
createParams.Version2.ParentPath = NULL;
createParams.Version2.SourcePath = NULL;
createParams.Version2.PhysicalSectorSizeInBytes = 4096;
createParams.Version2.OpenFlags = OPEN_VIRTUAL_DISK_FLAG_NONE;
createParams.Version2.ParentVirtualStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
createParams.Version2.ParentVirtualStorageType.VendorId = GUID_NULL;
createParams.Version2.SourceVirtualStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
createParams.Version2.SourceVirtualStorageType.VendorId = GUID_NULL;
createParams.Version2.ResiliencyGuid = GUID_NULL;
// ----- Create the VHDX ----------
HANDLE diskHandle = INVALID_HANDLE_VALUE;
VIRTUAL_STORAGE_TYPE storageType =
{
VIRTUAL_STORAGE_TYPE_DEVICE_VHDX,
VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT
};
HRESULT hr = CreateVirtualDisk(
&storageType,
filePath.c_str(),
VIRTUAL_DISK_ACCESS_CREATE,
NULL,
CREATE_VIRTUAL_DISK_FLAG_NONE,
0,
&createParams,
NULL,
&diskHandle
);
CloseHandle(diskHandle);
if (hr != S_OK)
{
std::wcerr
Подробнее здесь: [url]https://stackoverflow.com/questions/79276846/how-can-you-create-partition-format-a-vhdx-disk-and-assign-it-a-drive-letter[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия