Статья Способы запуска приложений с использованием CLSID

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
7,814
Реакции
6,592
Давайте дополним статью: https://safezone.cc/threads/nemnogo-o-clsid.20444/
и немного здесь: https://safezone.cc/threads/izuchaem-skrytye-vozmozhnosti-windows-7.5422/
и здесь https://safezone.cc/threads/sekrety-windows-7-kak-rabotaet-rasshirennaja-panel-upravlenija.11460/

Информации очень мало.
Мои дополнения:
(честно говоря сильно не вдавался в чтение). Только пощупал реестр и справочники и Google.

Способы использования CLSID (GUID)

1) создание новой папки с именем Любое Имя.{GUID}
2) через ПУСК -> Выполнить (или комбинацией клавиш Win + R)
затем так:
CMD/BATCH:
explorer Shell:::{GUID}
так:
CMD/BATCH:
explorer ::{GUID}
или так:
CMD/BATCH:
::{GUID}
где GUID - идентификатор одной из Special Folder (см. под спойлером).
В MSDN часть виртуальных папок и псевдонимов можно найти среди KnownFolderID.
Не все они будут работать с рассматриваемым синтаксисом. Это зависит от способа их регистрации в системе (при чём это может различаться от версии к версии).

3) через ПУСК -> набрать в строке поиска:
Код:
shell:::{GUID}
(обратите внимание на разное кол-во знаков : )
3.1.) используя псевдоним:
Код:
shell:псевдоним
или
Код:
explorer "shell:псевдоним"
Псевдонимы можно взять из имен параметров в разделах:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

4) Используя AppUserModelID.
Код:
explorer.exe shell:Путь\[App.UserModel.ID]
например:
Код:
explorer.exe shell:AppsFolder\Microsoft.Windows.Spartan_cw5n1h2txyewy!Microsoft.Spartan.Spartan
App.UserModel.ID можно узнать*, введя:
Код:
shell:AppsFolder
Выбрать вид папки -> Таблица.
Нажать левый ALT, View (вид) -> Choose details... (Выбрать столбцы...) -> отметить галкой "AppUserModelID"

Подробнее в этой статье:
Exclusive: How to start a Modern app from desktop without going to the Metro Start Screen

*Update: в новых билдах Windows 10, Microsoft спрятала эту опцию. Альтернативно, получить AppId можно, нажав правой кнопкой мыши по интересующему приложению из папки shell:AppsFolder => Выбрать создать ярлык => Согласиться на создание ярлыка на рабочем столе.
Затем разобрать ярлык с помощью программы-парсера, например, lnk_parser_cmd.exe (см. в аттаче). Вас должно интересовать значение параметра типа 0x001f (VT_LPWSTR) с ID 15, которое необходимо будет подставить в explorer.exe shell:AppsFolder\<значение>

Список псевдонимов, CLSID (GUID)
Синим отмечены папки, которые появились в Windows 8.

Объект (псевдоним) |Ключ CLSID (GUID)
Action Center |{BB64F8A7-BEE7-4E1A-AB8D-7D8273F7FDB6}
Add Features |{BE122A0E-4503-11DA-8BDE-F66BAD1E3F3A}
Add Network Location |{D4480A50-BA28-11d1-8E75-00C04FA31A86}
Administrative Tools |{D20EA4E1-3957-11d2-A40B-0C5020524153}
Advanced User Accounts (netplwiz) |{7A9D77BD-5403-11d2-8785-2E0420524153}
Applications |{4234d49b-0245-4df3-b780-3893943456e1}
AutoPlay |{9C60DE1E-E5FC-40f4-A487-460851A8D915}
Biometric Devices |{0142e4d0-fb7a-11dc-ba4a-000ffe7ab428}
BitLocker Drive Encryption |{D9EF8727-CAC2-4e60-809E-86F80A666C91}
Bluetooth Devices |{28803F59-3A75-4058-995F-4EE5503B023C}
Briefcase |{85BBD920-42AO-1069-A2E4-08002B30309D}
Color Management |{B2C761C6-29BC-4f19-9251-E6195265BAF1}
Command Folder |{437ff9c0-a07f-4fa0-af80-84b6c6440a16}
Common Places FS Folder |{d34a6ca6-62c2-4c34-8a7c-14709c1ad938}
Computer (This PC) |{20d04fe0-3aea-1069-a2d8-08002b30309d}
Connect To |{38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B}
Control Panel |{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}
Control Panel (All Settings) |{F90C627B-7280-45DB-BC26-CCE7BDD620A4}
Control Panel (All Tasks) |{ED7BA470-8E54-465E-825C-99712043E01C}
Control Panel (Category view) |{26EE0668-A00A-44D7-9371-BEB064C98683}
Control Panel (Icons view) |{21EC2020-3AEA-1069-A2DD-08002B30309D}
Credential Manager |{1206F5F1-0569-412C-8FEC-3204630DFB70}
Date and Time |{E2E7934B-DCE5-43C4-9576-7FE4F75E7480}
Default Programs |{17cd9488-1228-4b2f-88ce-4298e93e0966} or
|{E44E5D18-0652-4508-A4E2-8A090067BCB0}
delegate folder that appears in Computer |{b155bdf8-02f0-451e-9a26-ae317cfd7779}
Desktop folder |{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}
Device Manager |{74246bfc-4c96-11d0-abef-0020af6b0b7a}
Devices and Printers |{A8A91A66-3A7D-4424-8D24-04E180695C7A}
Display |{C555438B-3C23-4769-A71F-B6D3D9B6053A}
Documents folder |{A8CDFF1C-4878-43be-B5FD-F8091C1C60D0}
Ease of Access Center |{D555645E-D4F8-4c29-A827-D93C859C4F2A}
E-mail (default program) |{2559a1f5-21d7-11d4-bdaf-00c04f60b9f0}
Family Safety |{96AE8D84-A250-4520-95A5-A47A7E3C548B}
Favorites |{323CA680-C24D-4099-B94D-446DD2D7249E}
File History |{F6B6E965-E9B2-444B-9286-10C9152EDBC5}
Folder Options |{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}
Font Settings |{93412589-74D4-4E4E-AD0E-E0CB621440FD}
Fonts |{BD84B380-8CA2-1069-AB1D-08000948534}
Games Explorer |{ED228FDF-9EA8-4870-83b1-96b02CFE0D52}
Get Programs |{15eae92e-f17a-4431-9f28-805e482dafd4}
Help and Support |{2559a1f1-21d7-11d4-bdaf-00c04f60b9f0}
HomeGroup |{6785BFAC-9D2D-4be5-B7E2-59937E8FB80A} or
|{67CA7650-96E6-4FDD-BB43-A8E774F73A57} or
|{B4FB3F98-C1EA-428d-A78A-D1F5659CBA93}
Hyper-V Remote File Browsing |{0907616E-F5E6-48D8-9D61-A91C3D28106D}
Indexing Options |{87D66A43-7B11-4A28-9811-C86EE395ACF7}
Infared |{A0275511-0E86-4ECA-97C2-ECD8F1221D08}
Installed Updates |{d450a8a1-9568-45c7-9c0e-b4f9fb4537bd}
Internet Explorer (default browser) |{871C5380-42A0-1069-A2EA-08002B30309D}
Internet Options |{A3DD4F92-658A-410F-84FD-6FBBBEF2FFFE}
Keyboard Properties |{725BE8F7-668E-4C7B-8F90-46BDB0936430}
Language Settings |{BF782CC9-5A52-4A17-806C-2A894FFEEAC5}
Libraries |{031E4825-7B94-4dc3-B131-E946B44C8DD5}
Location Sensors |{E9950154-C418-419e-A90A-20C5287AE24B}
Media Servers |{289AF617-1CC3-42A6-926C-E6A863F0E3BA}
Mobility Center |{5ea4f148-308c-46d7-98a9-49041b1dd468}
Mouse Properties |{6C8EEC18-8D75-41B2-A177-8831D59D2D50}
Music folder |{1CF1260C-4DD0-4ebb-811F-33C572699FDE}
Network |{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}
Network and Sharing Center |8E908FC9-BECC-40f6-915B-F4CA0E70D03D}
Network Connections |{7007ACC7-3202-11D1-AAD2-00805FC1270E} or
|{992CFFA0-F557-101A-88EC-00DD010CCC48}
Networks Flyout (Connect To) |{38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B}
Network (WorkGroup) |{208D2C60-3AEA-1069-A2D7-08002B30309D}
Notification Area Icons |{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}
NVIDIA Control Panel (if installed) |{0bbca823-e77d-419e-9a44-5adec2c8eeb0}
Offline Files Folder |{AFDB1F70-2A4C-11d2-9039-00C04F8EEB3E}
Pen and Touch |{F82DF8F7-8B9F-442E-A48C-818EA735FF9B}
Performance Information and Tools (WEI) |{78F3955E-3B90-4184-BD14-5397C15F1EFC}
Personalization |{ED834ED6-4B5A-4bfe-8F11-A626DCB6A921}
Phone & Modem "Location Information" |{40419485-C444-4567-851A-2DD7BFA1684D}
Pictures folder |{3ADD1653-EB32-4cb0-BBD7-DFA0ABB5ACCA}
Portable Devices |{35786D3C-B075-49b9-88DD-029876E11C01}
Power Options |{025A5937-A6BE-4686-A844-36FE4BEC8B6D}
Previous Versions Results Folder |{f8c2ab3b-17bc-41da-9758-339d7dbf2d88}
printhood delegate folder |{ed50fc29-b964-48a9-afb3-15ebb9b97f36}
Printers |{2227A280-3AEA-1069-A2DE-08002B30309D} or
|{863aa9fd-42df-457b-8e4d-0de1b8015c60}
Programs and Features |{7b81be6a-ce2b-4676-a29e-eb907a5126c5}
Programs Folder |{7be9d83c-a729-4d97-b5a7-1b7313c39e0a}
Programs Folder and Fast Items |{865e5e76-ad83-4dca-a109-50dc2113ce9a}
Public Folder |{4336a54d-038b-4685-ab02-99bb52d3fb8b}
Recent Places |{22877a6d-37a1-461a-91b0-dbda5aaebc99}
Recovery |{9FE63AFD-59CF-4419-9775-ABCC3849F861}
Recycle Bin |{645FF040-5081-101B-9F08-00AA002F954E}
Region and Language |{62d8ed13-c9d0-4ce8-a914-47dd628fb1b0}
RemoteApp and Desktop Connections |{241D7C96-F8BF-4F85-B01F-E2B043341A4B}
Removable Storage Devices |{a6482830-08eb-41e2-84c1-73920c2badb9}
Results Folder |{2965e715-eb66-4719-b53f-1672673bbefa}
Run |{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
Search Apps |{2559a1f8-21d7-11d4-bdaf-00c04f60b9f0}
Search Files |{2559a1f0-21d7-11d4-bdaf-00c04f60b9f0}
Search Results |{9343812e-1c37-4a49-a12e-4b2d810d956b}
Set Program Access and Defaults |{2559a1f7-21d7-11d4-bdaf-00c04f60b9f0}
Show Desktop |{3080F90D-D7AD-11D9-BD98-0000947B0257}
SkyDrive folder ( Windows 8.1 ) |{8E74D236-7F35-4720-B138-1FED0B85EA75}
Sound |{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D}
Speech Recognition |{58E3C745-D971-4081-9034-86E34B30836A}
Storage Spaces |{F942C606-0914-47AB-BE56-1321B8035096}
Switch Between Windows |{3080F90E-D7AD-11D9-BD98-0000947B0257}
Sync Center |{9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF}
Sync Setup Folder |{2E9E59C0-B437-4981-A647-9C34B9B90891}
System |{BB06C0E4-D293-4f75-8A90-CB05B6477EEE}
System Icons |{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}
Tablet PC Settings |{80F3F1D5-FECA-45F3-BC32-752C152E456E}
Taskbar Properties |{0DF44EAA-FF21-4412-828E-260A8728E7F1}
Text to Speech |{D17D1D6D-CC3F-4815-8FE3-607E7D5D10B3}
This PC (Computer) |{20d04fe0-3aea-1069-a2d8-08002b30309d}
Troubleshooting |{C58C4893-3BE0-4B45-ABB5-A63E4B8C8651}
User Accounts |{60632754-c523-4b62-b45c-4172da012619}
User Folder |{59031a47-3f72-44a7-89c5-5595fe6b30ee}
User Pinned |{1f3427c8-5c10-4210-aa03-2ee45287d668}
Videos folder |{A0953C92-50DC-43bf-BE83-3742FED03C9C}
Window Switcher (Flip-2D) |{3080F90E-D7AD-11D9-BD98-0000947B0257}
Windows Defender |{D8559EB9-20C0-410E-BEDA-7ED416AECC2A}
Windows Features |{67718415-c450-4f3c-bf8a-b487642dc39b}
Windows 7 File Recovery |{B98A2BEA-7D42-4558-8BD1-832F41BAC6FD}
Windows Firewall |{4026492F-2F69-46B8-B9BF-5654FC07E423}
Windows Mobility Center |{5ea4f148-308c-46d7-98a9-49041b1dd468}
Windows SideShow |{E95A4861-D57A-4be1-AD0F-35267E261739}
Windows To Go |{8E0C279D-0BD1-43C3-9EBD-31C3DC5B8A77}
Windows Update |{36eef7db-88ad-4e81-ad49-0e313f0c35f8}
Work Folders ( Windows 8.1 ) |{ECDB0924-4208-451E-8EE0-373C0956DE16}

Также см.:
Shell commands in Windows 8
Complete List of Windows 10 CLSID Key (GUID) Shortcuts

Дополнительные ключи для explorer.exe:
Проводник
explorer.exe [/n][/e] [(,)/root,<folder>] [/select,<object>]

/n - открытие нового окна, если уже открыто окно, то оно дублируется (для ОС >= Vista неактуально).
/e - с отображением дерева папок принудительно.
/idlist,:handle: process specifies object as ITEMIDLIST in shared memory block with given handle in context of given process. Подробности здесь.
/root - <folder> в качестве корня вместо "Рабочего стола".
/root,/idlist,:handle: process (без пробела)
/root,clsid
/root,clsid,path
/root,path
/select - <object> выделить объект.
/separate - запуск Проводника в отдельном процессе.

Примеры (Windows 7, вероятно и др.):
CMD/BATCH:
:: Открыть Мой компьютер
explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
:: или просто
explorer ,
:: Открыть текущий каталог (актуально, когда находишься в консоли CMD)
explorer .
:: Открыть Корзину
explorer ::{645FF040-5081-101B-9F08-00AA002F954E}
:: Открыть Рабочий стол
explorer Shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}
:: Открыть Рабочий стол в отедльном процессе
explorer /separate,/root,Shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}
:: Открыть Рабочий стол в новой папке, используя псевдоним
explorer shell:Desktop

Ссылки по теме:
Ed Bott - 94 more secret Windows shortcuts
The Windows Explorer Command Line
MSDN - KNOWNFOLDERID
MSDN - CSIDL
MSDN - Canonical Names of Control Panel Items
Описание ключей и параметров CLSID / AppID
_____________________________________________________________________

Теперь мои вопросы и я не жду, что получу на них ответы (постепенно и сам буду искать их):

Возьмем для примера:
CLSID: {7be9d83c-a729-4d97-b5a7-1b7313c39e0a}
Физ. расположение: C:\ProgramData\Microsoft\Windows\Start Menu\Programs

1) О дополнительніх параметрах HKCR\CLSID:

В статье от Koza Nozdri говориться про:
а) HKCR\CLSID\{GUID}\InprocServer32
Под этим разделом еще есть подразделы:
б) MergedFolder с параметром Location, значение, к примеру, @shell32.dll,-4177
rundll32.exe говорит, что это не точка входа функции, значит ресурс.
Ага вот... Windows 8 DLL File Information - shell32.dll
говорит, что это якобы строка "Current User". Подразумевается от какого имени пользователя будет запущена?
в) ShellFolder с параметром Attributes, значение, к примеру, 0x28100000 (672137216)
О чем нам говорит этот атрибут?

2) CLSID и GUID - каково соотношение этих понятий?
Где-то и читал, но забыл. Своими словами можно...

3) Почему некоторые GUID, можно подставлять только в shell:::{GUID}, но не в explorer ::{GUID} ?

4) Как связан GIUD с его псевдонимом и физическим расположением каталога на диске?
По-другому: откуда система знает какие файлы/физ+вирт.папки (объекты) должны находится в этой виртуальной папке?

5) Можно ли зарегистрировать свой собственный псевдоним с GUID?
 

Вложения

  • lnk_parser.zip
    79.6 KB · Просмотры: 6
Последнее редактирование:
Частично ответ на № 4) касаемо Canonical Name

Xenophane написал(а):
Just wrote a little Powershell script to cycle through CLSID and get all the GUIDS that contains a "ShellFolder" and a key called "LocalizedString"
So if anyone can't sleep tonight, you could sit down and figure out what is hidden behind these GUID's
Источник

Вот что я первое нашел вручную:
HKCR\CLSID\{0142e4d0-fb7a-11dc-ba4a-000ffe7ab428}
LocalizedString = @%SystemRoot%\System32\biocpl.dll,-1
System.ApplicationName = Microsoft.BiometricDevices

->> shell:::{0142e4d0-fb7a-11dc-ba4a-000ffe7ab428}
Только вот не пойму biocpl.dll,-1
- это вроде иконка, а не строка. Продолжаю выяснять.Забавно (win + tab):
Shell:::{3080F90E-D7AD-11D9-BD98-0000947B0257} :D
 
Последнее редактирование:
Процитирую некоторые ответы от Казакевича Олега.

1) По поводу HKCR\CLSID\{...}\ShellFolder - Attributes

Не уверен, что поможет, но кое-что есть здесь:
Implementing the Basic Folder Object Interfaces
Плотно с этой темой я не работал, так что прокомментировать не могу.

2) GUID (или UUID, что одно и то же) - это обобщенное название для любого
идентификатора, вне зависимости от того, где и как он используется.
CLSID - это тот же GUID, только название другое. CLSID используется в COM,
отсюда и название (CLaSs IDentifier - идентификатор класса). Есть еще,
например, LIBID (LIBrary IDentifier - идентификатор библиотеки типов),
IID (Interface IDentifier - идентификатор COM-интерфейса) и т.д.
Т.е. CLSID - это тот же GUID/UUID, просто называется по-другому, чтобы читающему
код сразу было понятно, откуда идентификатор.
4) Как связан GIUD с его псевдонимом и физическим расположением каталога на диске?
По-другому: откуда система знает какие файлы/физ+вирт.папки (объекты) должны находится в этой виртуальной папке?

Система этого не знает. За отображение содержимого папки и работу с ним (copy-paste,
drag-n-drop, properties и т.п.) отвечает соответствующий объект, реализующий нужные интерфейсы.
В MSDN есть кое-что по данной теме, но без хорошего понимания COM туда лучше не соваться. ad.gif

5) Можно ли зарегистрировать свой собственный псевдоним с GUID?
Ты имеешь в виду, можно ли создать свою виртуальную папку, такую как, например,
"сетевое окружение" ? Да, можно. Сошлюсь, опять же, на MSDN, отправная точка здесь: Windows Shell
 
Последнее редактирование:
CLSID и GUID - каково соотношение этих понятий?

2) GUID (или UUID, что одно и то же) - это обобщенное название для любого
идентификатора, вне зависимости от того, где и как он используется.
CLSID - это тот же GUID, только название другое. CLSID используется в COM,
отсюда и название (CLaSs IDentifier - идентификатор класса). Есть еще,
например, LIBID (LIBrary IDentifier - идентификатор библиотеки типов),
IID (Interface IDentifier - идентификатор COM-интерфейса) и т.д.
Т.е. CLSID - это тот же GUID/UUID, просто называется по-другому, чтобы читающему
код сразу было понятно, откуда идентификатор.


Все таки разница есть.
GUID является уникальным номером идентифицирующим программное обеспечение,в том числе в разных вариантах UUID.

CLSID же является идентификатором класса,то есть он связан с объектами другого рода,в связи с чем мы делаем вывод что и использовать их можно по разному.
откуда система знает какие файлы/физ+вирт.папки (объекты) должны находится в этой виртуальной папке?
Тут все и сложно,но если ты разобрался с темой файловых ассоциаций -тогда все просто.

Для того что бы прочесть идентификатор мы должны понимать что они являют собой объект,с которым связаны.
Так в каждом разделе HKEY_CLASSES_ROOT\CLSID\{****} мы имеем значение параметра по умолчанию выступающего в роли связующего звена.

Пример.

HKEY_CLASSES_ROOT\CLSID\{*********} @=test
HKEY_CLASSES_ROOT\CLSID\{*********}\InprocServer32 имеет параметр,ссылающийся на tets.dll



Как система читает GUID?
Он записывается в соответствующие заголовки программы при написании.

Так же InprocServer32 может содержать другие данные.

Об этом рассказано в этой теме:
https://safezone.cc/threads/nemnogo-o-clsid.20444/
а) HKCR\CLSID\{GUID}\InprocServer32
Под этим разделом еще есть подразделы:
б) MergedFolder с параметром Location, значение, к примеру, @shell32.dll,-4177
rundll32.exe говорит, что єто не точка входа функции, значит ресурс.
Ага вот... http://www.nirsoft.net/dll_information/windows8/shell32_dll.html
говорит, что это якобы строка "Current User". Подразумевается от какого имени пользователя будет запущена?
в) ShellFolder с параметром Attributes, значение, к примеру, 0x28100000 (672137216)
О чем нам говорит этот атрибут?


Это надо подумать как сформулировать)
Позже будет.


Почему некоторые GUID, можно подставлять только в shell:::{GUID}, но не в explorer ::{GUID} ?
Не так давно разбирался в этом,суть кроется опять же в назначении идентификаторов,более подробнее тоже расскажу позже.


) Можно ли зарегистрировать свой собдственный псевдоним с GUID?
Да,можно.
 
Последнее редактирование:
Все таки разница есть.
GUID является уникальным номером идентифицирующим программное обеспечение,в том числе в разных вариантах UUID.
CLSID же является идентификатором класса, то есть он связан с объектами другого рода,в связи с чем мы делаем вывод что и использовать их можно по разному.
Что и демонстрирует пример C#-кода, где говорится:
MSDN написал(а):
The following example uses the System.Runtime.InteropServices.GuidAttribute class to assign a GUID to an interface and to a user-defined class. It retrieves the value of the GUID by calling the GetCustomAttribute method, and compares it with two other GUIDs to determine whether they are equal.
Единственное - я не расскажу грамотно как добавляется номер гуид к заголовкам программ.
тут можешь помочь
Основное предназначение GUID - разрешить кофликт имен при идентификации (доступе к) интерфейса, класса, COM и др. сервисов.
GUID представляет из себя уникальную строку в виде 32 шестнадцатеричных цифр, разбитой на группы дефисами и окружённой фигурными скобками:
{6F9619FF-8B86-D011-B42D-00CF4FC964FF}. Формируется он согласно стандарта UUID.

Любая программа в своем исходном виде (исходный код) еще не имеет определенного GUID.
GUID назначается программе при регистрации библиотек, OLE, COM-объектов, предоставляющих свой интерфейс для использования извне инкапсулированных в нем функций.
GUID, как объект, состоит из структуры, которая генерируется на основании:
  • Идентификатора машины и сетевой платы (позже Microsoft отказалась от этого пункта вследствие претензий)
  • Текущей времи и даты
  • Информации о конфигурации системы
  • Случайной компоненты
GUID для Вашего приложения можно получить, используя в нем API-фукнцию CoCreateGuid.
Хотя сама Microsoft придерживается иногда другой методологии:
Описание схемы формирования GUID кода продукта для программ Office XP
GUID для ASP-скриптов. (используется дата-время / случайное число)

Пример класса на .NET (VB.NET, C#), и кода для Visual Basic 6, позволяюего генерировать GUID
Используется API-фукнция CoCreateGuid

Платформа .NET

VB.NET / VBA:
Класс, позволяющий генерировать уникальный идентификатор
public sealed class ComGuid
{
    private ComGuid()
    {}

    public static Guid NewGuid()
    {
        Guid val = Guid.Empty;
        int hresult = 0;
        hresult = CoCreateGuid(ref val);

        if(hresult != 0)
        {
            throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error(), "Error creating new Guid");
        }

        return val;
    }

    [DllImport("ole32.dll", SetLastError=true)]
    private static extern int CoCreateGuid(ref Guid pguid );
}

// Код для кнопки в основном классе
private void button1_Click(object sender, EventArgs e)
{
    textBox1.Text = ComGuid.NewGuid().ToString();
}

Источник.

Пример для Visual Basic 6.0.:

VB.NET / VBA:
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Private Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As
Long

Public Function GetGUID() As String
'(c) 2000 Gus Molina

Dim udtGUID As GUID

If (CoCreateGuid(udtGUID) = 0) Then

GetGUID = _
String(8 - Len(Hex$(udtGUID.Data1)), "0") & Hex$(udtGUID.Data1) & _
String(4 - Len(Hex$(udtGUID.Data2)), "0") & Hex$(udtGUID.Data2) & _
String(4 - Len(Hex$(udtGUID.Data3)), "0") & Hex$(udtGUID.Data3) & _
IIf((udtGUID.Data4(0) < &H10), "0", "") & Hex$(udtGUID.Data4(0)) & _
IIf((udtGUID.Data4(1) < &H10), "0", "") & Hex$(udtGUID.Data4(1)) & _
IIf((udtGUID.Data4(2) < &H10), "0", "") & Hex$(udtGUID.Data4(2)) & _
IIf((udtGUID.Data4(3) < &H10), "0", "") & Hex$(udtGUID.Data4(3)) & _
IIf((udtGUID.Data4(4) < &H10), "0", "") & Hex$(udtGUID.Data4(4)) & _
IIf((udtGUID.Data4(5) < &H10), "0", "") & Hex$(udtGUID.Data4(5)) & _
IIf((udtGUID.Data4(6) < &H10), "0", "") & Hex$(udtGUID.Data4(6)) & _
IIf((udtGUID.Data4(7) < &H10), "0", "") & Hex$(udtGUID.Data4(7))
End If

End Function

Источник.

[/code]

Полный перечень COM-объектов, их имен, методов, свойств, я могу увидеть, например,
установив редактор скриптов PrimalScript. View -> Browser Panel -> Object Browser.
Заодно там же есть перечень WMI-классов и объектов .NET и PowerShell.
Primal_Script_OBJ.png

Как можно воспользоваться в своей программе инфтерфейсом, которому назначен GUID.

В VBA/Visual Basic 6 достаточно подставить {GUID} в функцию создания объекта, например:
использование голосового движка, для проговаривания текста:
Код:
Set oVoice = CreateObject("SAPI.SpVoice")
oVoice.Speak "Hello World."
Здесь мы вводим имя объекта: SAPI.SpVoice
Давайте попробуем найти его в реестре. Вуаля:

SAPI.Voice.GUID.png


Теперь записываем его GUID в виде такой конструцкии:
Код:
Set oVoice = CreateObject("new:{96749377-3391-11D2-9EE3-00C04F797396}")
oVoice.Speak "Hello World."
Запускаем. Убеждаемся, что в таком виде тоже работает*.
* Данный формат записи доступен только для диалектов VBA и Visual Basic 6.
* Для Visual Basic Scripting Edition можно задавать только имена объектов, а еще получать доступ к .NET платформе.

Смысл демонстрации в том, что существуют объекты, до которых нельзя "достучаться" через имя.
В таком случае GUID нам будет полезен.
VB.NET / VBA:
Sub ПримерИспользования()
     txt = ClipboardText
     MsgBox txt, vbInformation, "Содержимое буфера обмена Windows"
End Sub

Function ClipboardText() ' чтение из буфера обмена
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
         .GetFromClipboard
         ClipboardText = .GetText
     End With
End Function

Sub SetClipboardText(ByVal txt$) ' запись в буфер обмена
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
         .SetText txt$
         .PutInClipboard
     End With
End Sub
К вопросу о получении имени объекта по GUID.

Имена и GUID, к примеру, всех элементов Панели управления, можно получить перейдя к ветке:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\

Имя для Well-Known Folder по указанному GUID, можно узнать, посмотрев значение по-умолчанию в:
HKEY_CLASSES_ROOT\CLSID\{GUID}

Как получить GUID установленного в системе ПО:

Например через WMI, с помощью такого vbscript:
VB.NET / VBA:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
  "SELECT * FROM Win32_Product",,48)
For Each objItem in colItems
  Wscript.Echo "-----------------------------------"
  Wscript.Echo "Win32_Product instance"
  Wscript.Echo "-----------------------------------"
  Wscript.Echo "IdentifyingNumber: " & objItem.IdentifyingNumber
  Wscript.Echo "Name: " & objItem.Name
  Wscript.Echo "PackageCache: " & objItem.PackageCache
Next

GET_Prog_Guids.png
 
Последнее редактирование:
MergedFolder с параметром Location, значение, к примеру, @shell32.dll,-4177
rundll32.exe говорит, что єто не точка входа функции, значит ресурс.
Ага вот... http://www.nirsoft.net/dll_information/windows8/shell32_dll.html
говорит, что это якобы строка "Current User". Подразумевается от какого имени пользователя будет запущена?
в) ShellFolder с параметром Attributes, значение, к примеру, 0x28100000 (672137216)
О чем нам говорит этот атрибут?



Продолжаю тему,рад что смог выбрать время так как самому уже интересно.
MergedFolder как я сделал выводы на основании анализа является разделом,который указывает cuid с чем произведено сопряжение непосредственно ,то есть настройка сопряжения guid идентифицирующего некоторый объект и его локализации,параметр Location указывает непосредственно на расположение.

Например
Код:
{7be9d83c-a729-4d97-b5a7-1b7313c39e0a}
Является program files,из значения

Код:
HKCR\CLSID\{7be9d83c-a729-4d97-b5a7-1b7313c39e0a}\MergedFolder\Location\@shell32.dll,-4177

Мы понимаем что папка сопряжена с @shell32.dll,-4177 что значит "Текущий пользователь".

Далее.


ShellFolder с параметром Attributes, значение, к примеру, 0x28100000 (672137216)
О чем нам говорит этот атрибут?

В данном случае я не вижу к какому объекту он относится,но в приведенном мной примере значение будет такое же значение.

Но данное значение лишь указывает на несколько флагов:

Данный элемент есть папка
Указанный элемент может быть размещен внутри веб-браузера или проводника Windows визуально.
Чушь какая - то типа этим элементам не присвоен определенный номер и они могут быть скрыты...(???)

Вот примерная расшифровка флага.
Про элементы-я думаю имеется ввиду то,что каждая папка или объект могут иметь номер,например

0x0004 / / Мой компьютер \ Принтеры

Вот давно уже не могу собраться флаги оформить,такая тема тернистая...Dragokas, формируй остальные вопросы если есть и пойдет инфа в переработку...
 
Последнее редактирование:
Если вы хотите использовать глобальные идентификаторы (GUID) для идентификации ваших файлов, то никто вас не останавливает
Обратите внимание, что после того, как вы получили глобальный идентификатор для файла, вы можете переместить его в любое место диска, и функция OpenFileById по-прежнему будет открывать его.
Неплохо, да?
 
Дабы не терять смысловую нагрузку некоторых моментов не стал переделывать а просто добавил ссылку на эту тему.
 
Создать и зарегистрировать в ОС GUID для любого файла или папки можно простым батником:
CMD/BATCH:
@Echo off

:: НАИМЕНОВАНИЕ ПАПКИ ИЛИ ПРОГРАММЫ
Reg.exe add "HKLM\SOFTWARE\Classes\CLSID\{77680c55-563c-4b37-ac69-5d283935a742}" /v "" /t REG_SZ /d "Cursors" /f

:: ПУТЬ К ПАПКЕ ИЛИ ФАЙЛУ ПРОГРАММЫ
Reg.exe add "HKLM\SOFTWARE\Classes\CLSID\{77680c55-563c-4b37-ac69-5d283935a742}\Shell\Open\Command" /v "" /t REG_SZ /d "Explorer /n, /e, C:\Windows\Cursors" /f

:: ПУТЬ К ИКОНКЕ ДЛЯ ЯРЛЫКА
Reg.exe add "HKLM\SOFTWARE\Classes\CLSID\{77680c55-563c-4b37-ac69-5d283935a742}\DefaultIcon" /v "" /t REG_SZ /d "%%SystemRoot%%\system32\SHELL32.dll,4" /f

:: ПРИМЕР ЗАПУСКА
:: shell:::{77680c55-563c-4b37-ac69-5d283935a742}, в {} - GUID, созданный в https://www.guidgen.com
 
Однажды увидел ноут, где стояла XP'шка, и в нём настроили автоподключение Wi-Fi... Странность в том, что нет значка ни в трее, ни в Сетевых подключениях. Но он подключается! И в диспетчере задач во вкладке Сеть видно "Беспроводное сетевое соединение 2". А как создать ярлык на это невидимое "Беспроводное сетевое соединение 2"?
GUID интерфейса узнал, но всё что я смог: через диспетчер устройств полазить по параметрам адаптера (а в реестре, параметр "скрытия/отображения подключения" стояло как должно, и его переключение тоже не помогало), и через WirelessNetView увидеть сети (Пункт меню "Подключаться" в XP недоступно!), только "выбранный адаптер" в нём почему-то «пустая строка». Вообщем, понял, что скорее всего виноват Eset Firewall, и решил от него избавиться, предварительно создав точку восстановления системы. После отключения Firewall'а в ноде, WirelessNetView перестал видеть адаптер, соответственно и сети. Пришлось откатываться, затем вручную выкидывать кучу ключей из реестра и переставлять некоторые мультистроковые параметры из одних в другие... Потом, снова отключив Eset Firewall, заметил, что после 0012 идёт сразу 0016.. Ну, я почему-то захотел сменить последний на 0013, но из-за этого в диспетчере устройств над ним появился восклицательный знак в жёлтом круге перед «Сетевой адаптер ASUS 802.11n».... Ага! Попробую-ка я просто "обновить драйвер", но указал Broadcom — ура! Появилось.... только "Беспроводное сетевое соединение 3". Автоподключение пропало! (Пароля я не знаю, в прочем, как и сама хозяйка ноута). В общем, вынес ярлык и спрятал копию в надёжное место. Откатился — ярлык сохранился, и автоподключение заработало! Но ярлык, конечно же, ничего не показывал :)
На этот раз я хотел ещё раз избавиться от ESET'овского Firewall'а. Всё в реестре аккуратно "переназначил", и после отключения не стал переименовывать 0016 на 0013. Не помню, работал ли адаптер после перезагрузки, но в диспетчере устройств восклицательного знака не было, но на всякий случай обновил драйвер на Broadcom (рабочий же, думал, значок должен появится, раз тогда помогло)... Хм! Нового подключения не создало (в Сетевых подключениях так и осталось одинокое проводное "Подключение по локальной сети")! Всё ясно, значит проблема именно с этим GUID интерфейса... Забыл сохранить с реестра упоминания нового интерфейса, чтоб было с чем сравнивать (да и разница, похоже только в именах, а может нужно экспортировать ключи, которые я ещё не знаю). Решил просто поправить сохранённый ярлык. Нашёл там два упоминания одного и того же GUID'а (который новый, тот что был создан в альтернативной временной линии), вписал вместо них текущий (старый), перевернув цифры (памятка во вложении). Имя подключения пришлось оставлять той же длины (а то ярлык ломался, надо же было мне от радости переименовать его в «Вай-Фай!!!», потом исправлял эти 10 букв в Unicode, чтоб понятно было, что это имя подключения :D). Всё! Теперь правой кнопкой по ярылку и теперь могу подключиться к другим сетям. Вот только ни одну настройку открыть не могу с этого окна. Но, меня уже это не волновало, главное, что сохранилось автоподключение, и есть возможность подключаться к другим сетям. Странно, перенёс этот ярлык на 7-ку — не действительный! Создал ярлык на 7-ке, убрал лишнее (типа "Сеть 2", чего нет в XP) — на 7-ке работает, на XP — нет! Сократил лишние "аттрибуты" перед именем подключения (там то ли 20 байт, то ли 4 байта с нулями, не помню, в общем, оставил столько же байт, сколько на скрине) — на XP работает, на 7-ке нет. О как! Так что, это не универсальное решение, и все байты со скриншота переписывать бесполезно, это так, для ориентира...
Теперь вот вопрос, как повторить такой же баг и скрыть подключение на других ноутах? Поздно, конечно это спрашивать для XP, т.к. вряд ли такой баг можно воспроизвести на висте/7/8/10, т.к. есть трюк shell:::{38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B} (он же rundll32 van.dll,RunVAN), но как открыть подключение определённого интерфейса с помощью shell-заклинания (или, если можно, через rundll32) на XP?
 

Вложения

  • Network adapter + Id's bytes order.png
    Network adapter + Id's bytes order.png
    32.1 KB · Просмотры: 143
Последнее редактирование:
App.UserModel.ID можно узнать*, введя:
Код:
shell:AppsFolder
Выбрать вид папки -> Таблица.
Нажать левый ALT, View (вид) -> Choose details... (Выбрать столбцы...) -> отметить галкой "AppUserModelID"

Подробнее в этой статье:
Exclusive: How to start a Modern app from desktop without going to the Metro Start Screen

Небольшое дополнение к статье:

*Update: в новых билдах Windows 10, Microsoft спрятала эту опцию. Альтернативно, получить AppId можно, нажав правой кнопкой мыши по интересующему приложению => Выбрать создать ярлык => Согласиться на создание ярлыка на рабочем столе.
Затем разобрать ярлык с помощью программы-парсера, например, lnk_parser_cmd.exe (см. в аттаче). Вас должно интересовать значение параметра типа 0x001f (VT_LPWSTR) с ID 15, которое необходимо будет подставить в explorer.exe shell:AppsFolder\<значение>
 
Всем привет!
Спустя много лет вернулся к этой теме. ))
Напомните, пожалуйста, как батником по GUID папки определить её абсолютный путь?
Например, {B4BFCC3A-DB2C-424C-B029-7FE99A87C641} = C:\Users\User\Рабочий стол и т.д.
 
Напомните, пожалуйста, как батником по GUID папки определить её абсолютный путь?
Например, {B4BFCC3A-DB2C-424C-B029-7FE99A87C641} = C:\Users\User\Рабочий стол и т.д.
Похоже, что информация о путях к этим GUID хранится в
Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}
Параметр RelativePath, а ссылка на корневую папку в свою очередь хранится в виде такого же GUID в параметре ParentFolder.
 
@Dragokas, приветствую!
Во вложении - батник в 7z-архиве, он ищет 36 путей, из них 4 "не ищутся" (cDWL, cGAM, bACC, bRNG).
GUID и ссылки, какие нашёл, добавил в тело батника.
Очень хотелось бы починить и перевести на GUID, вот только пока не выходит. Может у Вас получится?
 

Вложения

  • CSI_GetSpecialFolderToCMD.7z
    2.1 KB · Просмотры: 1
Назад
Сверху Снизу