2011-08-15 8 views
0

.NET 래퍼와 함께 ImDisk 라이브러리를 사용하여 C# 응용 프로그램에서 가상 디스크를 만들었습니다. 그러나 장치를 만든 후에는 실제로 장치를 드라이브 문자로 표시 할 탑재 지점을 만들 필요가 있습니다. Mount Point를 만들기 위해 무엇이 제공되어야하는지 완전히 이해하지는 못했지만, 이것이 라이브러리보다는 Virtual devices에 더 많은 영향을 미친다고 생각합니다.가상 디스크 탑재 지점 만들기

내 기능 :

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; 
} 
+0

FormatDrive는 정확히 무엇을 수행합니까? 그것은 창조 된 장치에 그것을 연결하는 것을 아무것도 가지지 않는 것처럼 보이는가? CreateMountPoint를 사용해야한다면 CreateMountPoint ("C : \ mount", deviceID);'C : \ mount는 기존 파일 시스템에있는 빈 디렉토리이다. – thelsdj

+0

FormatDrive() 함수로 초기 게시물을 업데이트했습니다. 장치를 만든 후에 드라이브를 포맷해야합니다. 내 장치가 아직 드라이브 문자에 연결되지 않아서 작동하지 않습니다. –

+0

흠, 마운트 포인트에서 작동하는 것처럼 보였지만 장치가 여전히 내 컴퓨터의 편지에 붙어 있지 않은 것 같습니다. 내가 누락 된 가상 디스크 생성과 관련된 다른 것이 있습니까? –

답변

0

CreateDevice()에서 전달되는 매개 변수와 관련하여 몇 가지 문제가 있었지만 오류는 생성하지 않지만 설정 프로세스를 완전히 완료하지는 못했습니다.

도움 주셔서 감사합니다.