Создание точки монтирования виртуального диска - PullRequest
0 голосов
/ 15 августа 2011

Я использовал библиотеку ImDisk с оболочкой .NET для создания виртуального диска в моем приложении C #. Однако после того, как я создаю устройство, мне, очевидно, нужно создать точку монтирования, чтобы устройство фактически отображало букву диска. Я не совсем понимаю, что должно быть предоставлено для создания точки монтирования, но я считаю, что это больше относится к виртуальным устройствам, чем к библиотеке.

Моя функция:

public bool CreateRAMDisk()
{
    // Create Empty RAM Disk
    char driveLetter = ImDiskAPI.FindFreeDriveLetter();

    ImDiskAPI.CreateDevice(52428800, 0, 0, 0, 0, ImDiskFlags.DeviceTypeHD | ImDiskFlags.TypeVM, null, false, driveLetter.ToString(), ref deviceID, IntPtr.Zero);

    string mountPoint = driveLetter + @":\Device\ImDisk0";
    ImDiskAPI.CreateMountPoint(mountPoint, deviceID);

    // Format the Drive for NTFS
    if (FormatDrive(driveLetter.ToString(), "NTFS", true, 4096, "", false))
    {

Определение CreateMountPoint:

        public static void CreateMountPoint(string Directory, uint DeviceNumber);
        //
        // Summary:
        //     Creates a mount point for an ImDisk virtual disk on an empty subdirectory
        //     on an NTFS volume.
        //
        // Parameters:
        //   Directory:
        //     Path to an empty subdirectory on an NTFS volume
        //
        //   DeviceNumber:
        //     Device number of an existing ImDisk virtual disk

UPDATE

Функция FormatDrive:

public static bool FormatDrive(string driveLetter, string fileSystem, bool quickFormat, int clusterSize, string label, bool enableCompression)
{
    driveLetter = driveLetter + ":";

    if (driveLetter.Length != 2 || driveLetter[1] != ':'|| !char.IsLetter(driveLetter[0]))
    {
        return false;
    }

    //query and format given drive         
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"select * from Win32_Volume WHERE DriveLetter = '" + driveLetter + "'");

    foreach (ManagementObject vi in searcher.Get())
    {
        vi.InvokeMethod( "Format", new object[] {fileSystem, quickFormat, clusterSize, label, enableCompression} );
    }

    return true;
}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вы должны добавить «:» в конце параметра driveLetter

0 голосов
/ 15 августа 2011

Оказалось, что были некоторые проблемы с параметрами, передаваемыми в CreateDevice (), который позволял ему не генерировать ошибки, но не полностью завершал процесс установки.

Спасибо за помощь!

...