LnkView — LNK-file Viewer

Анонсы новых плагинов. Обсуждение плагинов ведется ниже.
Post Reply
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LnkView — LNK-file Viewer

Post by stasf »

Этот плагин предназначен для просмотра
содержимого файлов с расширением .lnk (Windows Shortcut Files).

Плагин запускается автоматически при нажатии <Enter> на файле соответствующего формата
из панели FAR-а. Формат файла распознается по внутренней сигнатуре (а не по расширению имени файла).

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

Разбор LNK-файла производится в строгом соответствии с [MS-SHLLINK]...
но немножко глубже, чем это предусмотрено официальной документацией.

В частности, благодаря проекту WINE (из которого был позаимствован заголовочный файл pidl.h), а также собственным исследованиям,
данный плагин разбирает внутреннюю структуру большинства форматов ShellItemIDList'а.

Кроме того, благодаря замечательной работе Harry Parsonage "The meaning of LIFE"
стало возможным расшифровать хранящуюся в LNK-файлах информацию подсистемы File Tracker.

PlugRing
Обсуждение
Last edited by HaRT on Mon 01 Aug, 2022 11:19, edited 8 times in total.
Reason: Добавлена ссылка на обсуждение
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LNK-file viewer

Post by stasf »

Версия 1.0.1:

- теперь работает в Win XP (из-за старого advapi32.dll пришлось поменять RegGetValue на более тяжеловесный ReqQueryValueEx);
- поддержан еще один внутренний формат PIDL 0x74
- сделана сборка для x86-64
Last edited by stasf on Thu 26 Mar, 2015 22:15, edited 1 time in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LNK-file viewer

Post by stasf »

Версия 1.1.0:

- реализован диалог настройки плагина: есть возможность настраивать способ запуска (в том числе - из меню плагинов)
и начальный режим просмотра;
- реализована обработка префикса "lnk:" в командной строке для открытия плагина;
- реализована команда "lnk:cat <lnk-file> <text file>", экспортирующая данные из заданного lnk-файла в текст(UTF-8);
- убрано подтверждение выхода из режима просмотра lnk-файла.
Last edited by stasf on Thu 26 Mar, 2015 22:16, edited 1 time in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LNK-file viewer

Post by stasf »

Версия 1.2.0: реализован вызов из макросов

Для вызова плагина из макроса (LUA-программы) используется следующий синтаксис:

Code: Select all

local LnkFileFlags{,Field} = Plugin.SyncCall (LnkViewGuid, FileName{, FieldName[qualifier]})

Где:
    LnkViewGuid - GUID плагина: "53415453-E31E-4D4C-8FE5-D6B0C6853E7C";
    FileName    - абсолютный или относительный путь к LNK-файлу;
    FieldName   - ноль или более запросов на извлечение полей данных в формате виртуального пути
                  (например: "/LinkInfo/Lnk_LocalPath");
    qualifier   - ноль или один спецификатор запроса, который может принимать значения 
                  "@NAMES" или "@VALUES" (значение по умолчанию);
    LnkFileFlags- первое возвращаемое значение: равно 0 если FileName не найден 
                  или имеет неверный формат, в противном случае - равно значению поля флагов
                  из заголовка LNK-файла;
    Field       - ноль или более переменных макроязыка, в которые записываются возвращаемые плагином 
                  значения запрошенных данных из LNK-файла.
Таким образом, за один вызов плагина можно получить информацию из произвольного количества полей LNK-файла.

В случае, когда FieldName задает имя конечного элемента данных, тип значения, возвращаемого в
соответствующую переменную макроязыка, соответствует типу этого элемента данных (STRING или INTEGER).

В случае, когда FieldName задает имя виртуальной директории, возвращается значение типа TABLE, которое
может индексироваться целочисленным индексом обычными средствами языка LUA и содержит значения (если спецификатор запроса
был не задан или был задан "@VALUES"), либо имена (если был задан спецификатор запроса "@NAMES")
всех элементов данных, находящихся в данной виртуальной директории. При этом, имена поддиректорий всегда
заканчиваются символом "/", чтобы отличить их от имен простых элементов данных.

Например:

Code: Select all

guid = "53415453-E31E-4D4C-8FE5-D6B0C6853E7C"
local flags,names,values = Plugin.SyncCall (guid, "Far2.lnk", "/Header/@names", "/Header/@values")

if type(names) == "table" then for i,v in ipairs(names) do
    local c = string.format("%d %s=%s", i,v,tostring(values[i]));
    far.Message (c);
    end
else
    local c = string.format("%s=%s", names,tostring(values));
    far.Message (c)
end
Для доступа к имени таргет-файла и его рабочей директории существуют два специальных запроса: "@Target" и "@WorkDir".
Эти запросы осуществляют интеллектуальный поиск соответствующей информации в LNK-файле.

Пример:

Code: Select all

guid = "53415453-E31E-4D4C-8FE5-D6B0C6853E7C"
local Flg,Target,WorkDir = Plugin.SyncCall (guid, "Far Manager 3.lnk", "@target", "@workdir")

if Flg then do
    local c = string.format ("Target : %s\nWorkDir: %s",Target,WorkDir)
    far.Message (c)
    end
end
Last edited by stasf on Thu 26 Mar, 2015 22:22, edited 3 times in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LNK-file viewer

Post by stasf »

Версия 2.0.0:

1. Появилась возможность просматривать Custom Jump Lists (файлы с расширением .customDestinations-ms).
Кроме того, можно просматривать Automatic Jump Lists - см. help плагина.

2. Существенно доработан парсинг внутренней структуры ItemIDList'а: извлекается больше информации,
информация правильно структурирована (в том числе, явно отображаются блоки расширения PIDL'ов).

3. В плагин закачана "база" имен System properties и они теперь показываются при отображении Property Store.
Кроме того, в качестве имени при отображении Property Storage теперь показывается соответствующий GUID,
что дает возможность из макропрограммы обращаться к конкретным properties по GUID и номеру property.

4. Усилен алгоритм извлечения пути к таргет-файлу (по запросу @target макропрограммы).
При работе с Custom Jump List запрос @target требует указывать конкретный элемент Jump List'а, к которому он относится.
Например: "/ShortCut 3/@target".
Last edited by stasf on Sat 28 Mar, 2015 08:51, edited 1 time in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LNK-file viewer

Post by stasf »

Версия 2.1.0:

1. Появилась возможность экспорта содержимого хранящейся в системном реестре истории открывавшихся пользователем папок (BagMRU) в набор LNK-файлов, которые, разумеется, могут быть просмотрены с помощью данного плагина (см. раздел "команды" хелпа плагина).

2. При парсинге внутренней структуры ItemIDList'а поддержан парсинг properties для WPD (Windows Portable Devices).
Также, поддержан парсинг еще нескольких форматов расширений PIDL'ов.

3. Поправлены мелкие ошибки. В том числе, при работе с Custom Jump List'ом все смещения теперь показываются относительно начала файла, а не относительно текущего Shortcut'а.

PS: Большая просьба ко всем пользователям плагина: если Вам встретится LNK-файл, в котором плагин не сможет пропарсить какие-либо элементы ItemIDList'а (покажет что-то типа "Unknown data block" или вообще не даст раскликать PIDL), пришлите мне, пожалуйста, такой LNK-файл для изучения (на e-mail указанный в хелпе плагина).
Last edited by stasf on Sat 28 Mar, 2015 08:51, edited 1 time in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LNK-file viewer

Post by stasf »

Версия 3.0.0
---------------

1. Появилась команда lnk:follow, которая позволяет найти и отобразить на
ПАССИВНОЙ панели целевой объект заданного LNK-файла.
Если эту команду назначить на клавишу, скажем, Ctrl-PgDn (в диалоге конфигурации),
то при нажатии этой клавиши на LNK-файле можно "переходить по ссылке" в один клик.

2. Появилась команда lnk:create, которая позволяет создавать LNK-файлы.
В том числе, позволяет создавать ссылки на выбранные файлы активной панели.
По умолчанию LNK-файлы создаются в текущей директории пассивной панели.
Если назначить эту команду на вызов из меню плагинов, можно "оптом" создавать
ссылки на выбранные файлы за пару кликов.

ВНИМАНИЕ:
Данная команда позволяет создавать LNK-файлы, ссылающиеся на другие LNK-файлы
(что невозможно сделать обычными средствами через интерфейс MS Shell).
Когда такая цепочка косвенных ссылок обрабатывается Shell-ом, открывается
целевой объект конечного LNK-файла.
Будьте осторожны - НЕ СОЗДАВАЙТЕ ЦИКЛИЧЕСКИХ ЦЕПОЧЕК LNK-ФАЙЛОВ.

3. Появилась возможность вызова плагина из меню дисков.
При этом открывается директория "любимых ссылок" (путь к которой, разумеется,
задается в диалоге конфигурации плагина).
Эту же директорию можно открыть командой lnk:fav.
Наличие такой директории в сочетании с lnk:follow, назначенной на Ctrl-PgDn,
позволяет быстро перескакивать на нужные места в файловой системе.
С этой директорией можно работать обычными средствами FAR без ограничений
(в том числе, удалять, переименовывать ссылки, создавать поддиректории и
вообще использовать ее не только для хранения ссылок ;-)

Создавать "любимые ссылки" можно с помощью lnk:create, когда директория
"любимых ссылок" открыта на ПАССИВНОЙ панели, но удобнее это делать без
переключения панелей командой lnk:addfav, которая, как и lnk:create,
может быть назначена на вызов из меню плагинов.

4. Команда lnk:bagmru теперь может экспортировать данные из отдельного hive-файла реестра.
При этом файл реестра открывается "только на чтение" и обрабатывается вручную.
Административных привиллегий для такой операции не требуется.

5. Для поддержки новых возможностей переработан диалог конфигурации плагина.

Подробное описание всех перечисленных команд см. в хелпе плагина

PS: Последняя стабильная сборка FAR-а (build 4242) содержит ошибку при трансформации относительных путей в абсолютные.
Поэтому, при использовании команд плагина с этой сборкой ВСЕГДА используйте абсолютные пути!
Предыдущая стабильная сборка (build 4040), а также последние ночные сборки этой ошибки не содержат.
Last edited by stasf on Sat 28 Mar, 2015 08:52, edited 1 time in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LNK-file viewer

Post by stasf »

Версия 3.1.0
---------------

1. Команда lnk:cat теперь может принимать "*" в качестве первого параметра.
Это позволяет экспортировать данные сразу из множества LNK-файлов, выбранных на АКТИВНОЙ панели,
в файл csv-формата, пригодный для загрузки в MS Excel или любой иной SpreadSheet для последующей обработки.

2. Благодаря http://www.symantec.com/connect/article ... escriptors плагин теперь разбирает
Darwin Descriptors в соответствующей секции XtraData, а также в PIDL extension 0xbeef000b.

3. Появилась новая команда lnk:pcache, позволяющая экспортировать в набор LNK-файлов содержимое ключа реестра
HKCU\SoftWare\Microsoft\Windows\CurrentVersion\Explorer\StartPage\ProgramsCache
(см. хелп плагина)



PS: Последняя стабильная сборка FAR-а (build 4242) содержит ошибку при трансформации относительных путей в абсолютные.
Поэтому, при использовании команд плагина с этой сборкой ВСЕГДА используйте абсолютные пути!
Предыдущая стабильная сборка (build 4040), а также последние ночные сборки этой ошибки не содержат.
Last edited by stasf on Sat 28 Mar, 2015 08:53, edited 1 time in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LNK-file viewer

Post by stasf »

Версия 3.1.1
---------------

1. Исправлена ошибка в команде lnk:create (лишний слэш в имени таргет-файла), когда команда
вызывалась из меню плагинов или с "*" в качестве первого аргумента, а текущая директория
АКТИВНОЙ панели являлась корневой директорией устройства.
Last edited by stasf on Mon 30 Mar, 2015 23:35, edited 1 time in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LnkView — LNK-file Viewer

Post by stasf »

Версия 3.2.0
------------

1. В команде lnk:cat теперь можно не задавать имя выходного файла.
В этом случае команда экспортирует данные во временный файл и открывает его во внутреннем Viewer-е FAR'а.
Если не задан и первый параметр (имя LNK-файла), команда экспортирует данные из текущего
элемента АКТИВНОЙ панели во временный файл и открывает его во внутреннем Viewer-е FAR'а.

2. Все поля, содержащие время, теперь показываются с максимальной точностью (до 100 наносекунд).

3. В меню плагинов (по кнопке F11) теперь показывается команда плагина, которая будет выполнена
при вызове плагина из меню плагинов.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LnkView — LNK-file Viewer

Post by stasf »

Версия 3.3.0
---------------

1. Команда lnk:create, введенная без указания параметра <folder name> теперь пытается
создать LNK-файл в АКТИВНОЙ панели, если ПАССИВНАЯ панель закрыта или не является обычной файловой панелью.

2. Команда lnk:create теперь отписывает в создаваемый LNK-файл параметры командной строки
для запуска целевого файла (см. хелп плагина).

3. Теперь команда lnk:follow отображает целевой файл на АКТИВНОЙ панели, если ПАССИВНАЯ панель закрыта.

4. Путь по умолчанию к директории "Избранных ссылок" в диалоге конфигурации изменен на %FARLOCALPROFILE%\..\FavLinks.

5. В диалог конфигурации добавлена опция "Включать путь в имя создаваемого LNK-файла".
Если опция отключена, команда lnk:create при создании LNK-файлов не включает в имя создаваемого файла
полный путь до таргет-объекта.
Last edited by stasf on Tue 09 Jun, 2015 00:05, edited 1 time in total.
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LnkView — LNK-file Viewer

Post by stasf »

Версия 3.4.0
---------------

1. НАКОНЕЦ-ТО ДОШЛИ РУКИ!
Реализован просмотр элементов LNK-файла в HEX-формате при нажатии клавиши F3 на виртуальном
файле или директории в панели плагина (за основу HEX-viewer'а взят движок из плагина Hexitor).
В окне HEX-viewer'а клавиша F6 влючает/отключает показ форматированных данных под курсором.
При смене кодовых страниц (по клавише F8) кодовая страница 1200 (unicode) показывается дважды -
один раз с четным смещением начала символов, другой - с нечетным.

2. Расширена внутренняя база данных по GUID-ам за счет включения информации из PortableDevice.h
Соответственно, при просмотре ItemIDList-ов, относящихся к WPD (Windows Portable Device), для
абсолютного большинства Property Keys теперь показываются их мнемонические имена.



PS: Последняя стабильная сборка FAR-а (build 4242) содержит ошибку при трансформации относительных путей в абсолютные.
Поэтому, при использовании команд плагина с этой сборкой ВСЕГДА используйте абсолютные пути!
Предыдущая стабильная сборка (build 4040), а также последние ночные сборки этой ошибки не содержат.


Скачать плагин

Обсуждение
stasf
Posts: 111
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 2 times
Been thanked: 1 time

LnkView — LNK-file Viewer

Post by stasf »

Ну вот, не прошло и 2-х лет, как вызрела версия 4.0 - плод исследований дизассемблированного кода системных dll-лек ;-)



Скачать плагин

Обсуждение
Post Reply

Return to “Анонсы новых плагинов”