资源简介

利用Windows API 实现虚拟磁盘的创建,VHD function 实现实例.

资源截图

代码片段和文件信息

// THIS CODE AND INFORMATION IS PROVIDED “AS IS“ WITHOUT WARRANTY OF
// ANY KIND EITHER EXPRESSED OR IMPLIED INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved

#include 
#include 
#include 
#include 
#include 

#include “Storage.h“

//
// This sample demonstrates how to use the AddVirtualDiskParent API to build a diff chain by 
// explicitly setting the parent after opening the child.
//

DWORD
SampleAddVirtualDiskParent(
    _In_    LPCWSTR     VirtualDiskPath
    _In_    LPCWSTR     ParentPath)
{
    OPEN_VIRTUAL_DISK_PARAMETERS openParameters;
    VIRTUAL_STORAGE_TYPE storageType;

    HANDLE vhdHandle = INVALID_HANDLE_VALUE;
    DWORD opStatus;

    //
    // Specify UNKNOWN for both device and vendor so the system will use the
    // file extension to determine the correct VHD format.
    //
    
    storageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN;
    storageType.VendorId = VIRTUAL_STORAGE_TYPE_VENDOR_UNKNOWN;
    
    //
    // Open the VHD.
    //
    // The AddVirtualDiskParent requires a V2 handle open. 
    //
    // The child must be opened read-only prior to calling AddVirtualDiskParent.
    //
    // VIRTUAL_DISK_ACCESS_NONE is the only acceptable access mask for V2 handle opens.
    // OPEN_VIRTUAL_DISK_FLAG_CUSTOM_DIFF_CHAIN must be specified when calling AddVirtualDiskParent.
    //

    memset(&openParameters 0 sizeof(openParameters));
    openParameters.Version = OPEN_VIRTUAL_DISK_VERSION_2;
    openParameters.Version2.ReadOnly = TRUE;

    opStatus = OpenVirtualDisk(
        &storageType
        VirtualDiskPath
        VIRTUAL_DISK_ACCESS_NONE
        OPEN_VIRTUAL_DISK_FLAG_CUSTOM_DIFF_CHAIN
        &openParameters
        &vhdHandle);
    
    if (opStatus != ERROR_SUCCESS)
    {
        goto Cleanup;
    }

    opStatus = AddVirtualDiskParent(vhdHandle ParentPath);
    if (opStatus != ERROR_SUCCESS)
    {
        goto Cleanup;
    }    

Cleanup:

    if (opStatus == ERROR_SUCCESS)
    {
        wprintf(L“success\n“);
    }
    else
    {
        wprintf(L“error = %u\n“ opStatus);
    }
    
    if (vhdHandle != INVALID_HANDLE_VALUE)
    {
        CloseHandle(vhdHandle);
    }

    return opStatus;
 }

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2460  2013-06-18 05:21  AddVirtualDiskParent.cpp
     文件        4017  2013-06-18 05:21  AttachVirtualDisk.cpp
     文件        2927  2013-06-18 05:21  compactVirtualDisk.cpp
     文件        3872  2013-06-18 05:21  CreateVirtualDisk.cpp
     文件        2817  2013-06-18 05:21  DeleteUsermetaData.cpp
     文件        2894  2013-06-18 05:21  DetachVirtualDisk.cpp
     文件        3589  2013-06-18 05:21  EnumerateUsermetaData.cpp
     文件        3068  2013-06-18 05:21  GetAllAttachedVirtualDiskPhysicalPaths.cpp
     文件        4489  2013-06-18 05:21  GetStorageDependencyInformation.cpp
     文件        3632  2013-06-18 05:21  GetUsermetaData.cpp
     文件       10491  2013-06-18 05:21  GetVirtualDiskInformation.cpp
     文件        3005  2013-06-18 05:21  MergeVirtualDisk.cpp
     文件        5461  2013-06-18 05:21  MirrorVirtualDisk.cpp
     文件       10215  2013-06-18 05:21  Program.cpp
     文件        6916  2013-06-18 05:21  RawIO.cpp
     文件        3059  2013-06-18 05:21  ResizeVirtualDisk.cpp
     文件        3289  2013-06-18 05:21  SetUsermetaData.cpp
     文件        5869  2013-06-18 05:21  SetVirtualDiskInformation.cpp
     文件        2244  2013-06-18 05:21  Storage.h
     文件         967  2013-08-01 11:17  Storage.sln
     文件        5650  2013-08-01 11:17  Storage.vcxproj

评论

共有 条评论