2010-03-08 32 views
11

Tìm kiếm một API đĩa RAM (hoặc bộ phần mềm tương đương để triển khai) để lưu trữ tệp tạm thời cho các hoạt động đọc/ghi bên ngoài môi trường đĩa cứng vật lý.API bộ nhớ RAM lập trình cho .NET?

cập nhật Tệp exe sẽ được ghi vào đĩa RAM và được thi hành.

+0

xóa "nhanh" khỏi câu hỏi - Tôi nghĩ rằng người dẫn đầu lạc lối - rõ ràng hơn bây giờ là –

Trả lời

7

"Đĩa RAM" là cấu trúc mức hệ điều hành, vì nó phải triển khai hệ thống tệp và trình điều khiển thiết bị để mô phỏng đĩa. Bạn không thể làm điều này ở cấp thư viện.

Nếu bạn muốn theo đuổi cấp độ hệ điều hành, Windows đi kèm với trình điều khiển ramdisk.sys tích hợp sẵn.

Nếu không, việc đọc các tệp vào cấu trúc dữ liệu trong ứng dụng của bạn sẽ có cùng đặc điểm hiệu suất như sử dụng đĩa RAM. Thông thường, một đĩa RAM được sử dụng khi ứng dụng không biết thực tế là nó đang chạy ra khỏi các tập tin lưu trữ RAM. Nếu ứng dụng của bạn nhận thức được thực tế là nó muốn làm điều này, chỉ cần đọc trực tiếp dữ liệu vào ứng dụng của bạn.

+0

Đó là một tệp thực thi cần được khởi chạy chứ không phải dữ liệu chuẩn. Trình điều khiển ramdisk.sys nghe có vẻ thú vị ... –

+0

Điều này dường như là cách tốt nhất mặc dù bạn chính xác nó không đơn giản như tôi mong muốn. –

3

ramdisk.sys là một trình điều khiển mà bạn có thể nhận được từ Microsoft như một bản trình diễn trình điều khiển nhưng nó dường như không được đảm bảo để làm việc trên Windows 7, vì vậy chúc may mắn với điều đó. Bạn có thể tìm thấy các triển khai ramdisk khác, nhưng sau đó bạn phải cài đặt chúng có nghĩa là sửa đổi ổ đĩa của bạn (ví dụ, Bước 1: cài đặt trình điều khiển sơ sài).

Vì vậy, điều này đặt ra câu hỏi về những gì bạn đang cố gắng làm, thực sự. Nếu mục tiêu của bạn là tạo một hộp cát cho một số tệp thi hành để chúng không thể ghi vào (các) ổ đĩa cục bộ, thì điều này nghe có vẻ không đúng cách. Nếu mục đích là làm cho một bộ thực thi nhỏ sẵn sàng để chúng chạy nhanh, một lần nữa, điều này dường như không đúng cách - Windows lưu trữ các tệp thi hành BẤT CỨ, vì vậy chúng khởi chạy thứ hai nhanh hơn. Nếu mục tiêu là tạo một vùng nhỏ, dễ làm sạch cho các tệp thực thi để chạy, thư mục tạm thời của cửa sổ được cho là nơi dành cho điều đó. Nếu bạn đang cố gắng tạo một hệ thống như các tiện ích norton hay ghost cung cấp truy cập không bị hỏng vào ổ đĩa cứng mà không để lại dấu vết, tôi đặt câu hỏi liệu .NET có đúng cách để thực hiện điều đó không. HD của bạn cứng và nặng anyway. Nếu mục tiêu của bạn là tạo ra một loại virus hoặc một con ngựa trojan ẩn tải trọng của nó trong một ổ đĩa ram, tôi đặt câu hỏi về động cơ của bạn.

Bạn đang thực sự cố gắng làm gì?

Tùy chọn khác thay vì đĩa RAM là Dokan, là trình điều khiển hệ thống tệp chế độ người dùng. Tôi đã làm một ứng dụng .NET nhanh chóng làm cho máy quét TWAIN xuất hiện dưới dạng ổ đĩa như một bản demo, nhưng tôi thấy rằng dokan, tại thời điểm tôi đang sử dụng nó, làm cho máy của tôi mong manh: bất kỳ sai lầm trong khi tôi đang làm việc với nó có nghĩa là một chuyến đi để khởi động lại đất. Và một lần nữa, nó đòi hỏi việc cài đặt một trình điều khiển. Hy vọng rằng điều này đã trở nên tốt hơn.

+1

Động cơ của tôi là sự tò mò thuần túy dựa trên câu hỏi này - http://stackoverflow.com/questions/2383400/net-embed-an-exe-file-into-my-project và nếu nó hoàn toàn khả thi, tôi có thể thử nó để thực hiện lợi ích. –

3

ImDisk là ứng dụng đĩa RAM tạo ổ đĩa ảo từ một bộ nhớ và có API có thể được gọi từ .NET.

class RamDisk 
{ 
    public const string MountPoint = "X:"; 

    public void createRamDisk() 
    { 

     try 
     { 
      string initializeDisk = "imdisk -a "; 
      string imdiskSize  = "-s 1024M "; 
      string mountPoint  = "-m "+ MountPoint + " "; 


      ProcessStartInfo procStartInfo = new ProcessStartInfo(); 
      procStartInfo.UseShellExecute = false; 
      procStartInfo.CreateNoWindow = true; 
      procStartInfo.FileName   = "cmd"; 
      procStartInfo.Arguments   = "/C " + initializeDisk + imdiskSize + mountPoint; 
      Process.Start(procStartInfo); 

      formatRAMDisk(); 

     } 
     catch (Exception objException) 
     { 
      Console.WriteLine("There was an Error, while trying to create a ramdisk! Do you have imdisk installed?"); 
      Console.WriteLine(objException); 
     } 

    } 

    /** 
    * since the format option with imdisk doesn't seem to work 
    * use the fomat X: command via cmd 
    * 
    * as I would say in german: 
    * "Von hinten durch die Brust ins Auge" 
    * **/ 
    private void formatRAMDisk(){ 

     string cmdFormatHDD = "format " + MountPoint + "/Q /FS:NTFS"; 

     SecureString password = new SecureString(); 
     password.AppendChar('0'); 
     password.AppendChar('8'); 
     password.AppendChar('1'); 
     password.AppendChar('5'); 

     ProcessStartInfo formatRAMDiskProcess = new ProcessStartInfo(); 
     formatRAMDiskProcess.UseShellExecute = false; 
     formatRAMDiskProcess.CreateNoWindow  = true; 
     formatRAMDiskProcess.RedirectStandardInput  = true; 
     formatRAMDiskProcess.FileName   = "cmd"; 
     formatRAMDiskProcess.Verb    = "runas"; 
     formatRAMDiskProcess.UserName   = "Administrator"; 
     formatRAMDiskProcess.Password   = password; 
     formatRAMDiskProcess.Arguments   = "/C " + cmdFormatHDD; 
     Process process       = Process.Start(formatRAMDiskProcess); 

     sendCMDInput(process); 
    } 

    private void sendCMDInput(Process process) 
    { 
     StreamWriter inputWriter = process.StandardInput; 
     inputWriter.WriteLine("J"); 
     inputWriter.Flush(); 
     inputWriter.WriteLine("RAMDisk for valueable data"); 
     inputWriter.Flush(); 
    } 

    public string getMountPoint() 
    { 
     return MountPoint; 
    } 
} 
Các vấn đề liên quan