Подтвердить что ты не робот

Программируемый API-интерфейс RAM для .NET?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Итак, на самом деле возникает вопрос о том, что вы пытаетесь сделать. Если ваша цель - создать песочницу для некоторых исполняемых файлов, чтобы они не могли записываться на локальный диск (ы), это не похоже на правильный подход. Если цель состоит в том, чтобы сделать небольшой набор исполняемых файлов легкодоступными, чтобы они работали быстро, опять же, это не похоже на правильный подход - Windows кэширует исполняемые файлы ANYWAY, поэтому их второй запуск выполняется быстрее. Если цель состоит в том, чтобы создать небольшую, легко очищаемую область для исполняемых файлов для запуска, то для этого должен быть каталог временных файлов Windows. Если вы пытаетесь создать такую ​​систему, как утилиты или призрак norton, которые предоставляют неограниченный доступ к жесткому диску, не оставляя след, я сомневаюсь, будет ли .NET правильным путем для этого, поскольку .NET будет бить ваш HD жесткий и тяжелый в любом случае. Если ваша цель - создать вирус или троянскую лошадь, которая скрывает свою полезную нагрузку в приводе ram, я сомневаюсь в ваших мотивах.

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

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

Ответ 3

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