Net disk:用于.NET的可编程RAM磁盘 API

寻找 RAM 磁盘 API(或要实现的等效软件集)来临时存储文件,以便在物理硬盘环境之外进行读 / 写操作。

update将 exe 文件写入 RAM 磁盘并执行。

8

“RAM 磁盘”是一个操作系统级别的结构,因为它必须实现一个文件系统和设备驱动程序来模拟磁盘。

如果你想追求操作系统级别,Windows 附带了一个内置的 ramdisk.sys 驱动程序。

否则,将文件读入应用程序中的数据结构将具有与使用 RAM 磁盘相同的性能特征。通常,当应用程序不知道它正在使用 RAM 缓存文件时,将使用 RAM 磁盘。如果您的应用程序知道它想要这样做,只需将数据直接读入您的应用程序。

7

ImDisk是一个 RAM 磁盘应用程序,它从一个内存扇区创建一个虚拟驱动器,并具有可以从.NET 调用的 API。

cl 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 pword = new SecureString();
        pword.AppendChar('0');
        pword.AppendChar('8');
        pword.AppendChar('1');
        pword.AppendChar('5');
        ProcessStartInfo formatRAMDiskProcess   = new ProcessStartInfo();
        formatRAMDiskProcess.UseShellExecute    = false;
        formatRAMDiskProcess.CreateNoWindow     = true;
        formatRAMDiskProcess.RedirectStandardInput     = true;
        formatRAMDiskProcess.FileName           = "cmd";
        formatRAMDiskProcess.Verb               = "runas";
        formatRAMDiskProcess.UserName           = "";
        formatRAMDiskProcess.Pword           = pword;
        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;
    }
}
3

ramdisk.sys 是一个驱动程序,你可以从微软作为驱动程序演示,但它显然不能保证在 Windows 7 上工作,所以祝你好运。你可以找到其他 ramdisk 实现,但你必须安装它们,这意味着修改你的驱动器(即,步骤 1:安装粗略的驱动程序)。

所以这就引出了你想做什么的问题,真的。如果你的目标是为一些可执行文件创建一个沙箱,以便它们不能写入本地驱动器,那么这听起来不像是正确的方法。如果目标是让一小套可执行文件随时可用,以便它们快速运行,那么这似乎不是正确的方法-Windows 缓存可执行文件无论如何都会更快地启动。

你到底想做什么?

代替 ramdisk 的另一个选项是Dokan,这是一个用户模式文件系统驱动程序。从那里制作内存驱动器是直截了当的-我做了一个快速的.NET 应用程序,该应用程序使 TWAIN 扫描仪显示为驱动器作为演示,但是我发现 dokan 在使用它时使我的机器变得脆弱:在使用它时的任何失误都意味着重新启动土地。再次,它需要安装。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(828)
C语言最大公约数算法:C# 求最大公约数(common factor finder)
下一篇

相关推荐

  • 低代码发展前景:Greasemonkey提示前景

    关于低代码发展前景的问题,在grease monkey ballard中经常遇到,我有一个新的脚本,我正在为我的办公室建立一个 greasemonkey 按钮,除了提示输入特定的错误号还需要打开 Outlook,并将消息发送到某个地址,主题行中的错误号...…

    2022-11-23 08:49:38
    0 16 18
  • C语言最大公约数算法:C# 求最大公约数(common factor finder)

    关于C语言最大公约数算法的问题,在common factor finder中经常遇到,“两个整数的最大公约数是将两个数字中的每一个均分的最大整数。编写返回两个整数的最大公约数的方法 Gcd。将该方法合并到从用户读取两个值并显示结果的应用程序中。”…

    2022-11-23 08:48:51
    0 85 86

发表评论

登录 后才能评论

评论列表(64条)