Как создать виртуальный файл? - PullRequest
14 голосов
/ 17 января 2010

Я хотел бы смоделировать файл, не записывая его на диск.У меня есть файл в конце моего исполняемого файла, и я хотел бы указать его путь к DLL.Конечно, поскольку у него нет реального пути, я должен его подделать.

Сначала я попытался использовать именованные каналы в Windows для этого.Это позволило бы указать путь, такой как \\. \ Pipe \ mymemoryfile, но я не могу заставить его работать, и я не уверен, что dll будет поддерживать путь, подобный этому.GetMappedFileName.Могут ли они быть использованы для имитации файла в фрагменте другого?Я не уверен, что это то, что делает этот API.

То, что я пытаюсь сделать, похоже на boxedapp.Есть идеи о том, как они это делают?Я предполагаю, что это что-то вроде перехвата API (например, Detour), но это было бы много работы.Есть ли другой способ сделать это?

Почему?Я заинтересован в этом конкретном решении, потому что я хотел бы скрыть данные и в интересах распространения только одного файла, а также по вызывающим причинам заставить его работать таким образом;) Я согласен, что копирование данных во временный файл будет работатьи будет гораздо более простым решением.

Ответы [ 12 ]

0 голосов
/ 19 января 2010

Что ж, если вам нужно выделить виртуальный файл в вашем exe-файле, вам нужно создать массив векторов, потоков или символов, достаточно большой, чтобы вместить все виртуальные данные, которые вы хотите записать.

- это единственное решение, которое я могу придумать, не выполняя ввод-вывод на диск (даже если вы не записываете в файл).

Если вам нужно сохранить файл, похожий на синтаксис пути, просто напишите класс, имитирующий это поведение, и вместо записи в файл запишите в буфер памяти.Это так просто, как только может.Помни ПОЦЕЛУЙ.

Приветствия

0 голосов
/ 19 января 2010

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

...