Шаманства с "ярлыками" в Windows

Jun 26, 2012 14:11

Иногда бывает необходимость "прибить гвоздями" ярлык на рабочем столе пользователя. Не в смысле позиции, а в смысле невозможности удаления оного пользователем (чтобы не было глупых вопросов в стиле "ой, а у меня интернет/почта/архиполезная внутрикорпоративная программа пропала"). Вариантов решения много, у каждого свои достоинства и недостатки. Самый простой и немудрёный - закинуть ярлык в All Users, куда простой юзер не имеет прав писать. Недостатки очевидны - ярлык будет у всех пользователей компьютера, что не всегда приемлемо. К тому же юзер с повышенными правами (моветон, но всякое ж бывает) может случайно прострелить себе ногу удалить такой ярлык и насолить всем. Наткнулся тут на достаточно мудрёный, но рабочий способ создать не совсем ярлык, но его почти полноценный заменитель со свойством "неудаляемости".
Выглядит он вот так:


Ничего кроме как открыть и создать на него ярлык сделать с ним средствами контекстного меню проводника нельзя. На кнопку del на клавиатуре так же ничего не происходит, в списке файлов на рабочем столе, полученом через dir в cmd.exe его тоже нет, ибо это в отличие от ярлыка вообще не файл, а Shell Command Object.

Создаётся этот объект такими телодвижениями с реестром:
REGEDIT4

[HKEY_CLASSES_ROOT\CLSID\{77708248-f839-436b-8919-527c410f48b9}]
@="Редактор реестра"
"InfoTip"="Открывает редактор системного реестра"
"System.ControlPanel.Category"="5"

[HKEY_CLASSES_ROOT\CLSID\{77708248-f839-436b-8919-527c410f48b9}\DefaultIcon]
@="%SYSTEMROOT%\\regedit.exe"

[HKEY_CLASSES_ROOT\CLSID\{77708248-f839-436b-8919-527c410f48b9}\Shell]

[HKEY_CLASSES_ROOT\CLSID\{77708248-f839-436b-8919-527c410f48b9}\Shell\Open]

[HKEY_CLASSES_ROOT\CLSID\{77708248-f839-436b-8919-527c410f48b9}\Shell\Open\Command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,72,00,65,00,67,00,65,00,64,00,69,00,74,00,2e,00,65,00,78,00,65,00,\
00,00

[HKEY_CLASSES_ROOT\CLSID\{77708248-f839-436b-8919-527c410f48b9}\ShellFolder]
"Attributes"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{77708248-f839-436b-8919-527c410f48b9}]
@="Добавляет редактора системного реестра на рабочий стол"

"Волшебные" свойства неудаляемости такому объекту придает параметр Attributes (можно блокировать различные действия, не только удаление/переименование/etc), ну а описание/иконку/путь к программе можно поменять в других параметрах, назначение которых интуитивно понятно (путь к программе правда придется кодировать в hex, но что ж поделать). Разумеется, GUID можно и нужно генерировать свой, ну и такой "ярлык" можно добавить не только на рабочий стол, но и на панель управления, в "мой компьютер", в сетевое окружение, планировщик задач, etc. Подробности легко гуглятся.

registry, secret, fun, windows

Previous post Next post
Up