Crate vhdrs

Source
Expand description

A lightweight library that provides an ergonomic interface for managing Virtual Hard Disks (VHD/VHDX) on Windows systems. It leverages the Windows API to facilitate operations such as opening, attaching, detaching, and retrieving information from VHD files.

§Features

  • Open VHD/VHDX Files: Supports opening VHD/VHDX files in both ReadOnly and ReadWrite modes.
  • Mounting and Unmounting: Attach and detach virtual disks to and from the system with options for persistent and temporary mounts.
  • Disk Information Retrieval: Obtain detailed information about the virtual disk, including its size and unique identifier.
  • Automatic Resource Management: Handles cleanup operations, ensuring that resources like file handles are correctly released.

§Usage

§Opening a VHD/VHDX File

You can open a VHD/VHDX file by specifying the file path and the desired access mode. The file type is inferred from the extension unless explicitly specified.

let vhd = vhdrs::Vhd::new("file.vhd", vhdrs::OpenMode::ReadOnly, None).unwrap();

§Attaching a VHD

To mount a VHD to a system drive, use the attach method. You can choose to make the mount persistent across system reboots.

let mut vhd = vhdrs::Vhd::new("file.vhd", vhdrs::OpenMode::ReadOnly, None).unwrap();
let drive_letter = vhd.attach(false).unwrap();
println!("VHD mounted at drive: {}", drive_letter);

§Detaching a VHD

To manually unmount a VHD, use the detach method. Manual detachment is only necessary for persistent mounts; temporary mounts are automatically detached when the VHD instance is dropped.

vhdrs::Vhd::detach("file.vhd").unwrap();

§Retrieving Disk Information

You can retrieve detailed information about the VHD, including its virtual size, physical size, block size, and sector size.

let mut vhd = vhdrs::Vhd::new("file.vhd", vhdrs::OpenMode::ReadOnly, None).unwrap();
let disk_info = vhd.get_size().unwrap();
println!("Disk Info: {:?}", disk_info);

§Getting the VHD Identifier

This function retrieves a unique identifier for the attached virtual disk, useful for tracking and managing multiple VHDs.

let mut vhd = vhdrs::Vhd::new("file.vhd", vhdrs::OpenMode::ReadOnly, None).unwrap();
let identifier = vhd.get_identifier().unwrap();
println!("VHD Identifier: {}", identifier);

Structs§

DiskInfo
Vhd
VhdIdentifier

Enums§

Error
OpenMode
VhdType

Type Aliases§

Result