Windows эквивалентна пространствам имен Linux (монтирует файловую систему на процесс)? - PullRequest
5 голосов
/ 24 августа 2010

В Linux есть функция, называемая пространства имен , которая позволяет вам по-разному "просматривать" файловую систему для разных процессов.В терминах Windows это было бы полезно, например, если у вас была устаревшая программа "floyd", которая всегда загружала свою конфигурацию из C:\floyd\floyd.ini.Если бы в Windows были пространства имен, вы могли бы написать скрипт-обертку, который бы создавал пространство имен для запуска floyd, поэтому, когда Алиса запускала скрипт, floyd запускался в среде, где C:\floyd существовал, но фактически указывал на C:\Users\Alice\Floyd.

Теперь вы можете подумать: «Хорошо, просто используйте мягкие или жесткие ссылки и сделайте C:\floyd псевдонимом для C:\Users\Alice».Но с пространствами имен Боб также может запустить сценарий запуска, но его экземпляр floyd (на том же компьютере, запущенный в то же время) увидит C:\floyd с содержимым, скажем, C:\Users\Bob\Program Settings\Floyd Config (или любым другим путем, который мыкак).

Вы можете сделать это в Linux с пространствами имен.Есть ли что-то похожее или аналогичное в Windows?Хорошо, если для этого требуется написать программу на C, и все в порядке, если она работает только в последних версиях Windows.

Ответы [ 9 ]

3 голосов
/ 24 августа 2010

NTFS жесткие ссылки - это на самом деле простой случай точек повторной обработки .Точки повторной обработки набираются и могут включать более сложное поведение.Например, они также используются для «автономного хранилища» (прозрачная миграция файлов в и из вторичного хранилища).Поэтому вы также можете использовать точки повторной обработки для реализации символических ссылок для каждого пользователя, создав новый тип повторной обработки.

Тип точки повторной обработки даже имеет явный бит «Имя суррогатного имени», который (если установлен) указывает, что повторная обработкаточки этих типов являются своего рода символической связью.

Вы можете даже иметь несколько точек повторного анализа на пути.Поэтому файлы внутри вашего символического пространства имен все еще можно перенести во вторичное хранилище - у вас просто будет две точки повторного анализа в пути.

1 голос
/ 24 августа 2010

Я думаю, что Virtual Store делает это автоматически для устаревших программ, которые пытаются писать в нестандартные каталоги.Таким образом, устаревшая программа записывает в каталог пользователя и программы вместо C:\floyd.

0 голосов
/ 24 августа 2010

Для этого не хватает хороших решений. Для простоты я не могу улучшить использование программных ссылок (переходов) NTFS для этого - как вы правильно заметили, это создает проблемы, если вам нужна индивидуальная конфигурация. Как правильно говорит MSalters, все мягкие и жесткие ссылки NTFS - это просто особые случаи точек повторной обработки, поэтому вы можете сделать что-то более общее, реализовав новый тип повторной обработки, если не возражаете против некоторой работы, копающейся в NTFS.

(Junction - довольно полезный инструмент для экспериментов с программными ссылками NTFS: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx)

Вы могли бы просто принять прямой подход - дать каждому пользователю (или инициализации вашей программы, если вы заботитесь только об одной части программного обеспечения) сценарий входа в систему, который устанавливает соответствующий переход в их пользовательский каталог (и убедитесь, что вы его очищаете). впоследствии). Но это неуклюжий .

В целом, правильный подход Windows состоит в том, чтобы поместить вещи в папки, на которые указывают системные переменные% localappdata% (начиная с Vista) и, в более общем смысле,% userprofile%. Виртуализация файловой системы Win предназначена для обеспечения этого в тех случаях, когда это применимо.

0 голосов
/ 24 августа 2010

Есть несколько вещей, которые приходят мне на ум.

Прежде всего вы можете создать драйвер фильтра файловой системы (или использовать готовый драйвер, такой как наш продукт CallbackFilter), который перенаправил бы все вызовы файловой системы, поступающие из приложения, в другое место. Это похоже на виртуализацию, о которой вы упоминали, но это не изменит список букв дисков. Такой подход является мощным и нетривиальным, поэтому прежде всего рассмотрим другой вариант.

И другой вариант: Существует несколько продуктов (Thinstall, Molebox, если память служит), которые «оборачивают» приложение, перенаправляя его файловый ввод / вывод в другое место. Был также какой-то SDK, чтобы сделать то же самое, но я не помню его название вообще.

0 голосов
/ 24 августа 2010

например. http://www.msigeek.com/4819/file-re-direction-using-correctfilepaths-shim-to-fix-broken-applications

Но я думаю, что это не настраивается для каждого пользователя, хотя цель может варьироваться для каждого пользователя в зависимости от подстановки переменных среды.

Однако большинство программ хранят конфигурацию в реестре, и в этом случае RegOverridePredefKey справится с задачей.

0 голосов
/ 24 августа 2010

В качестве ужасного клуджа (и здесь я записываю свой переход в ад программирования), не могли бы вы использовать NamedPipe для C: \ Floyd, который отображал операции ввода-вывода в файл, специфичный для текущего пользователя процесса?

Iзнаю, что это не красиво, и я не знаю достаточно о NamedPipes (FIFO на других диалектах) в Windows, чтобы знать, насколько это возможно.

Дан

0 голосов
/ 24 августа 2010

Это звучит как виртуализация файловой системы Windows Vista . Например, он может молча перенаправить c:\Program Files\Floyd на c:\Users\<username>\AppData\Local\VirtualStore\Program Files\Floyd. Однако виртуализация файловой системы не так настраиваема, как пространства имен Linux. Из того, что я могу судить по чтению, виртуализация файловой системы должна применяться каждый раз, когда открывается 32-разрядный интерактивный процесс для записи файла, папки или раздела реестра, доступного для записи только администраторам. (Таким образом, вы обычно получаете файлы только для чтения в c:\Program Files и некоторые файлы, доступные для записи для каждого пользователя в c:\Users\<username>\AppData\Local\VirtalStore.)

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

0 голосов
/ 24 августа 2010

Наиболее важной вещью, вероятно, являются специальные папки среды, такие как% temp%,% appdata%,% localappdata%.Не то чтобы они эквивалентны, но они выполняют ту же цель.

Вы можете определить свои собственные переменные среды, а затем использовать "% myspecialplace% \ myfile.txt" для доступа к ним.

0 голосов
/ 24 августа 2010

Вы можете использовать жесткие ссылки для этого, но только с NTFS. http://en.wikipedia.org/wiki/Hard_link

Я думаю, что в Windows нет виртуального представления FS для каждого процесса.

...