Программируемый API-интерфейс RAM для .NET?
Ищете API-интерфейс RAM-диска (или эквивалентный набор программного обеспечения для реализации) для временного хранения файлов/файлов для операций чтения/записи за пределами физической среды жесткого диска.
обновление Exe файлы будут записаны на RAM-диск и выполнены.
Ответы
Ответ 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;
}
}