Является ли поиск всех файлов с определенным альтернативным потоком данных эффективным способом хранения пользовательских тегов?

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

В идеале я хотел бы, чтобы эти ярлыки поддерживали следующие сценарии:

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

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

Для правильного отслеживания ярлыков, в том числе перемещений и копий, и мне интересно, является ли приемлемым вариант размещения альтернативного потока данных NTFS "FoobarInstaller.Shortcut" в каждом из этих ярлыков, который просто содержит UUID. Затем в идеале я хотел бы отсканировать все дерево каталогов пользователя (или, возможно, просто типичные места, такие как "Рабочий стол", "Пуск" и "Быстрый запуск") на наличие файлов с потоком, и посмотреть, нужно ли применять к ним обновления.

Чего я не знаю, так ли это эффективно. Имеет ли NTFS/Win32 API для эффективного поиска всех файлов с определенным ADS по имени?

1 ответ

NTFS имеет способ уникальной идентификации файлов: идентификаторы объектов. Они не меняются при переименовании, и вы можете искать файлы по id. Вы можете хранить базу данных идентификаторов объектов в хорошо известном месте (например, в каталоге данных приложения пользователя). Затем вы можете найти все существующие ярлыки в постоянное время.

Я полагаю, что некоторые функции Windows "перемещены ярлыки восстановления" использует это

Другие вопросы по тегам