栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++调用windows vhd接口挂在vhd虚拟盘

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++调用windows vhd接口挂在vhd虚拟盘

得在管理员权限下执行


#include "pch.h"

#define WINVER _WIN32_WINNT_WIN7
#include
#include
#include

#pragma comment(lib, "Virtdisk.Lib")

#include

#include

#include
using namespace std;


int main()
{

    GUID VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT = { 0xec984aec, 0xa0f9, 0x47e9, 0x90, 0x1f, 0x71, 0x41, 0x5a, 0x66, 0x34, 0x5b };
    
    OPEN_VIRTUAL_DISK_PARAMETERS openParameters;
    openParameters.Version = OPEN_VIRTUAL_DISK_VERSION_1;
    openParameters.Version1.RWDepth = OPEN_VIRTUAL_DISK_RW_DEPTH_DEFAULT;

    VIRTUAL_STORAGE_TYPE openStorageType;
    openStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_VHD;
    openStorageType.VendorId = VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT;

    ATTACH_VIRTUAL_DISK_PARAMETERS attachParameters;
    attachParameters.Version = ATTACH_VIRTUAL_DISK_VERSION_1;

    void * vhdHandle;

    const char* szStr = "D:\temp\test.vhd";
    WCHAR vhdPath[256];    
    MultiByteToWideChar(CP_ACP, 0, szStr, strlen(szStr) + 1, vhdPath,
        sizeof(vhdPath) / sizeof(vhdPath[0]));

    if (OpenVirtualDisk(&openStorageType, vhdPath,
        VIRTUAL_DISK_ACCESS_ALL, OPEN_VIRTUAL_DISK_FLAG_NONE,
        &openParameters, &vhdHandle) != ERROR_SUCCESS) {
        // If return value of OpenVirtualDisk isn't ERROR_SUCCESS, there was a problem opening the VHD
    }

    // Warning: AttachVirtualDisk requires elevation
    if (AttachVirtualDisk(vhdHandle, 0, ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME,
        0, &attachParameters, 0) != ERROR_SUCCESS) {
        // If return value of AttachVirtualDisk isn't ERROR_SUCCESS, there was a problem attach the disk
    }


    std::cout << "Hello World!n"; 
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018232.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号