Программируемый RAM Disk API для .NET? - PullRequest
11 голосов
/ 08 марта 2010

Требуется API-интерфейс RAM-диска (или эквивалентный набор программного обеспечения для реализации) для временного хранения файлов / файлов для операций чтения / записи вне среды физического жесткого диска.

update Exe-файлы будут записаны на RAM-диск и выполнены.

Ответы [ 3 ]

7 голосов
/ 08 марта 2010

«Диск RAM» является структурой уровня операционной системы, поскольку он должен реализовывать файловую систему и драйвер устройства для эмуляции диска. Вы не можете сделать это на уровне библиотеки.

Если вы хотите повысить уровень ОС, Windows поставляется со встроенным драйвером ramdisk.sys.

В противном случае чтение файлов в структуру данных в вашем приложении будет иметь те же характеристики производительности, что и использование RAM-диска. Как правило, RAM-диск используется, когда приложение не знает о том факте, что оно работает из кэшированных файлов RAM. Если ваше приложение знает о том, что оно хочет это сделать, просто прочитайте данные в ваше приложение напрямую.

4 голосов
/ 06 февраля 2013

ImDisk - это приложение на диске RAM, которое создает виртуальный диск из сектора памяти и имеет API, который можно вызывать из .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;
    }
}
3 голосов
/ 09 марта 2010

ramdisk.sys - это драйвер, который вы можете получить от Microsoft в качестве демонстрационной версии драйвера, но он явно не гарантированно работает на Windows 7, так что удачи вам в этом. Вы можете найти другие реализации ramdisk, но затем вам нужно установить их, что означает модификацию вашего диска (т. Е. Шаг 1: установить драйвер отрывочника).

Так что возникает вопрос о том, что вы пытаетесь сделать, на самом деле. Если ваша цель - создать «песочницу» для некоторых исполняемых файлов, чтобы они не могли записывать на локальные диски, это не похоже на правильный подход. Если цель состоит в том, чтобы сделать небольшой набор исполняемых файлов легкодоступным, чтобы они работали быстро, опять же, это не похоже на правильный подход - Windows кэширует исполняемые файлы ВСЕГДА, поэтому их второй запуск происходит быстрее. Если цель состоит в том, чтобы создать небольшую, легко очищаемую область для запуска исполняемых файлов, то для этого и должен быть временный каталог windows. Если вы пытаетесь создать систему, подобную утилитам Norton или Ghost, которая предоставляет беспрепятственный доступ к жесткому диску, не оставляя следов, я задаюсь вопросом, является ли .NET правильным путем для этого, так как .NET собирается ударить ваш HD жесткий и тяжелый в любом случае. Если вашей целью является создание вируса или троянского коня, который скрывает свою полезную нагрузку в оперативной памяти, я ставлю под сомнение ваши мотивы.

Что вы действительно пытаетесь сделать?

Другой вариант вместо виртуального диска - Dokan , который является драйвером файловой системы пользовательского режима. Сделать накопитель в памяти прямо сейчас - я сделал быстрое приложение .NET, которое сделало так, чтобы TWAIN-сканеры выглядели как накопители в качестве демонстрации, но я обнаружил, что докан во время его использования делал мою машину хрупкой: любая Ошибка, когда я работал с ним, означала поездку, чтобы перезагрузить землю. И опять же, требуется установка драйвера. Надеюсь, это стало лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...