windows 8 启动自动加载VHD存储池
来源:互联网 发布:ios app 耗电量优化 编辑:程序博客网 时间:2024/06/06 04:36
当对多个磁盘做了存储池后,使用diskpart命令批量加载非常缓慢,可以使用下面代码非常高效,在c盘根目录创建vhdlist.txt用来保存多个vhd文件的路径:
using System;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace VhdAttachSample {
static class Program {
[STAThread]
static void Main()
{
string[] temp = System.IO.File.ReadAllLines("c:\\vhdList.txt", System.Text.Encoding.UTF8);
foreach (string path in temp)
{
string fileName = @path;
IntPtr handle = IntPtr.Zero;
// open disk handle
var openParameters = new OPEN_VIRTUAL_DISK_PARAMETERS();
openParameters.Version = OPEN_VIRTUAL_DISK_VERSION.OPEN_VIRTUAL_DISK_VERSION_1;
openParameters.Version1.RWDepth = OPEN_VIRTUAL_DISK_RW_DEPTH_DEFAULT;
var openStorageType = new VIRTUAL_STORAGE_TYPE();
openStorageType.DeviceId = VIRTUAL_STORAGE_TYPE_DEVICE_VHD;
openStorageType.VendorId = VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT;
int openResult = OpenVirtualDisk(ref openStorageType, fileName, VIRTUAL_DISK_ACCESS_MASK.VIRTUAL_DISK_ACCESS_ALL, OPEN_VIRTUAL_DISK_FLAG.OPEN_VIRTUAL_DISK_FLAG_NONE, ref openParameters, ref handle);
if (openResult != ERROR_SUCCESS)
{
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Native error {0}.", openResult));
}
// attach disk - permanently
var attachParameters = new ATTACH_VIRTUAL_DISK_PARAMETERS();
attachParameters.Version = ATTACH_VIRTUAL_DISK_VERSION.ATTACH_VIRTUAL_DISK_VERSION_1;
int attachResult = AttachVirtualDisk(handle, IntPtr.Zero, ATTACH_VIRTUAL_DISK_FLAG.ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME, 0, ref attachParameters, IntPtr.Zero);
// if (attachResult != ERROR_SUCCESS) {
// throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Native error {0}.", attachResult));
// }
// close handle to disk
CloseHandle(handle);
// System.Windows.Forms.MessageBox.Show("Disk is attached.");
}
}
public const Int32 ERROR_SUCCESS = 0;
public const int OPEN_VIRTUAL_DISK_RW_DEPTH_DEFAULT = 1;
public const int VIRTUAL_STORAGE_TYPE_DEVICE_VHD = 2;
public static readonly Guid VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT = new Guid("EC984AEC-A0F9-47e9-901F-71415A66345B");
public enum ATTACH_VIRTUAL_DISK_FLAG : int {
ATTACH_VIRTUAL_DISK_FLAG_NONE = 0x00000000,
ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY = 0x00000001,
ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER = 0x00000002,
ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME = 0x00000004,
ATTACH_VIRTUAL_DISK_FLAG_NO_LOCAL_HOST = 0x00000008
}
public enum ATTACH_VIRTUAL_DISK_VERSION : int {
ATTACH_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
ATTACH_VIRTUAL_DISK_VERSION_1 = 1
}
public enum OPEN_VIRTUAL_DISK_FLAG : int {
OPEN_VIRTUAL_DISK_FLAG_NONE = 0x00000000,
OPEN_VIRTUAL_DISK_FLAG_NO_PARENTS = 0x00000001,
OPEN_VIRTUAL_DISK_FLAG_BLANK_FILE = 0x00000002,
OPEN_VIRTUAL_DISK_FLAG_BOOT_DRIVE = 0x00000004
}
public enum OPEN_VIRTUAL_DISK_VERSION : int {
OPEN_VIRTUAL_DISK_VERSION_1 = 1
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ATTACH_VIRTUAL_DISK_PARAMETERS {
public ATTACH_VIRTUAL_DISK_VERSION Version;
public ATTACH_VIRTUAL_DISK_PARAMETERS_Version1 Version1;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ATTACH_VIRTUAL_DISK_PARAMETERS_Version1 {
public Int32 Reserved;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OPEN_VIRTUAL_DISK_PARAMETERS {
public OPEN_VIRTUAL_DISK_VERSION Version;
public OPEN_VIRTUAL_DISK_PARAMETERS_Version1 Version1;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OPEN_VIRTUAL_DISK_PARAMETERS_Version1 {
public Int32 RWDepth;
}
public enum VIRTUAL_DISK_ACCESS_MASK : int {
VIRTUAL_DISK_ACCESS_ATTACH_RO = 0x00010000,
VIRTUAL_DISK_ACCESS_ATTACH_RW = 0x00020000,
VIRTUAL_DISK_ACCESS_DETACH = 0x00040000,
VIRTUAL_DISK_ACCESS_GET_INFO = 0x00080000,
VIRTUAL_DISK_ACCESS_CREATE = 0x00100000,
VIRTUAL_DISK_ACCESS_METAOPS = 0x00200000,
VIRTUAL_DISK_ACCESS_READ = 0x000d0000,
VIRTUAL_DISK_ACCESS_ALL = 0x003f0000,
VIRTUAL_DISK_ACCESS_WRITABLE = 0x00320000
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VIRTUAL_STORAGE_TYPE {
public Int32 DeviceId;
public Guid VendorId;
}
[DllImport("virtdisk.dll", CharSet = CharSet.Unicode)]
public static extern Int32 AttachVirtualDisk(IntPtr VirtualDiskHandle, IntPtr SecurityDescriptor, ATTACH_VIRTUAL_DISK_FLAG Flags, Int32 ProviderSpecificFlags, ref ATTACH_VIRTUAL_DISK_PARAMETERS Parameters, IntPtr Overlapped);
[DllImportAttribute("kernel32.dll", SetLastError = true)]
[return: MarshalAsAttribute(UnmanagedType.Bool)]
public static extern Boolean CloseHandle(IntPtr hObject);
[DllImport("virtdisk.dll", CharSet = CharSet.Unicode)]
public static extern Int32 OpenVirtualDisk(ref VIRTUAL_STORAGE_TYPE VirtualStorageType, String Path, VIRTUAL_DISK_ACCESS_MASK VirtualDiskAccessMask, OPEN_VIRTUAL_DISK_FLAG Flags, ref OPEN_VIRTUAL_DISK_PARAMETERS Parameters, ref IntPtr Handle);
}
}
- windows 8 启动自动加载VHD存储池
- 教你把Windows 8安装到VHD里,并且从VHD启动
- windows自动挂载VHD虚拟硬盘
- 使用 Windows 7 VHD启动计算机
- 在Win7下如何自动加载虚拟磁盘VHD文件
- 在Win7下如何自动加载虚拟磁盘VHD文件
- Windows 10 VHD安装
- Windows 8 to Support Native ISO and VHD Mounting
- Bcdedit 创建VHD启动项
- 体验Windows 7新特性之基于VHD虚拟磁盘文件启动计算机
- Windows启动时 自动启动
- Windows Tomcat自动启动
- windows 服务自动启动
- VHD
- tomcat启动时,自动加载
- Win7/R2 原生VHD 启动 详解
- Win7/R2 原生VHD 启动 详解
- 从已有VHD文件启动Win7
- asp.net C#如何上传指定路径的图片,不用FileUpload控件[转]
- 安全高性能网站搭建(六)
- 【转载】获取系统时间(精确到微秒),驱动中KeQueryPerformanceCounter,Win32程序QueryPerformanceCounter
- 导入非编译后代码、path是导入xwork文件。
- linux 网页快照(命令行将某url汇成图片) CutyCapt
- windows 8 启动自动加载VHD存储池
- [转]HTML5新功能演示
- Android SQLite总结(一)
- 枚举 转换
- 【重新上本科】排序【调试环境】
- UVa 10258 - Contest Scoreboard
- struts2常用标签
- QueryPerformanceCounter/QueryPerformance
- Android通过共享用户ID来实现多Activity进程共享